カスタムコマンド開発
カスタムコマンド開発
このページは、開発者がカスタムコマンド機能を持つ AddOn パッケージを開発する方法を案内することを目的としています。
注意:
本章は入門チュートリアルであり、開発者がカスタムコマンドの基礎知識と基本的な開発プロセスを理解することを目的としています。
具体的な応用機能を持ち、特定の作業シーンに適用されるカスタムコマンド AddOn パッケージの開発方法については、後続の完全な事例章を参照してください。
カスタムコマンドについて
カスタムコマンドとは
カスタムコマンドとは、開発者が自身のニーズに応じて、JAKA スクリプト規則に準拠しつつ、JAKA App 内の標準プログラムコマンド以外の独自コマンドを開発したものを指します。
カスタムコマンドの役割
概要で述べたように、ロボットのエンドに新しいサードパーティ製ツールを接続した場合や、特定の作業シーンで特定の工芸操作を行う際には、JAKA App のプログラミング画面で複雑なコマンドを記述し、多数のパラメータを設定する必要があります。この手順は複雑で再利用が難しいため、これらの複雑で大量のコマンドやパラメータを、直感的で簡単に使える一つのコマンドブロックにまとめることで、時間コストを節約し、操作効率を向上させます。
AddOn カスタムコマンドパッケージの作成
この例では、カスタムコマンドタイプの AddOn を作成します。この AddOn の機能は、コマンドブロックで入力および選択した内容を App のログに表示することです。
注:
以下の JAKA_Command は、これから作成する AddOn カスタムコマンドパッケージのパッケージ名です。
ステップ 1:AddOn フォルダの作成
まず、基本となる AddOn フォルダを作成する必要があります。このフォルダには、.ini 形式の設定ファイルと、データを保存する Json ファイルを含める必要があります。 最初から手動で作成することも、AddOn 開発パッケージリポジトリ内の "Template" ディレクトリにある AddOn テンプレートを使用して変更することもできます。
ディレクトリ構造
|——JAKA_Command |——AddOn.json |——JAKA_Command_config.ini
- **AddOn.json ** Json ファイルの内容は空で構いません。後の手順でデータが自動生成されて書き込まれます。
- **JAKA_Command_config.ini ** 設定ファイルの具体的な内容は以下の通りです:
[AddOnInfo] convention = 3.0 name = JAKA_Command description = "ログに情報を出力" version = 1.0 type = 1 portal = 10006 url = http://localhost/myAddOnUi languagetype = node-red service = AddOn.json serviceenabled = 1
ヒント
詳細な設定項目の説明については、設定ファイルの説明を参照してください:[クリック]してジャンプ 👈 :::
ステップ2:パッケージ化 & アップロード
次に、ステップ1で作成したフォルダをパッケージ化し、コントローラにアップロードしてコマンドブロック開発を行います。パッケージ形式は .tar.gz である必要があります。
Windows では、7z などの圧縮ツールを使用して二重圧縮を行うことができます。

アプリ内のアドオン管理プログラムページで AddOn をアップロードします。

まとめ
ここまでで、AddOn パッケージの初期化作業を完了し、AddOn の標準形式にパッケージ化してコントローラにアップロードしました。 次に、AddOn の具体的な機能をさらに作成していきます。
ステップ3:カスタムコマンドの開発
- AddOn を実行し、AddOn の動作ポート番号を確認します。

- ブラウザを開き、アドレスバーにロボットのIP + ポート番号(
IP:Portal)を入力して開発者画面にアクセスします。

まとめ
AddOn が実行されると、コントローラはこの AddOn パッケージ内の AddOn.json ファイルに基づいて node-red インスタンスを起動します。 ロボットのIPとAddOnが現在実行中のポート番号を使って、このnode-redインスタンスにアクセスすることができます。
ご注意ください:
AddOnの実行ポートは固定ではなく、システムが状況に応じて動的に割り当てます。したがって、AddOnのポート番号を使用する必要があるたびに、 現在のポート番号を確認する必要があります。もしnode-redでプログラミングする際にこのポート番号を使用する必要がある場合は、最適な方法はAddOnの設定ファイル xxx_config.ini から確認することです。
- 左側のノードバーにあるJAKA AddOnディレクトリで「
カスタムコマンド」ノードを見つけ、中央の作業領域にドラッグして、デプロイをクリックします。
カスタムコマンドノードをダブルクリックして、コマンドブロック生成ツールのページを開きます。
ヒント
カスタムコマンドノードの使用方法は、node-redのノードヘルプドキュメントで確認できます。
- 基本設定ページで、ページ例に付属しているプロパティを使用してコマンドブロックのスタイルと属性を定義し、何も変更しません。 同時に、コマンドブロックの名前をhello_jakaに変更し、色を緑に調整します。スクリプト生成ページで、 ページ例で提供されるスクリプトを使用してコマンドブロックの動作を定義し、そのまま変更しません。

ヒント
ここで使用されているスクリプト言語はJAKAプログラミングスクリプトです。具体的な構文についてはJAKAプログラミングスクリプト👈を参照してください。
まとめ
これで、スタイル、属性、スクリプトなどを含むカスタムコマンドの定義を無事に完了しました。この段階で、実際にはアプリ内でもう 先ほど作成したコマンドブロックを見つけることができますが、プログラムにドラッグして実行することはできません。これは、アプリがまだカスタムコマンドのスクリプトを取得できないためです。 次に、node-red内でフローをさらに完成させ、アプリがスクリプトを取得できるようにします。
- http inノード
とhttp responseノードを使用してフローを完成させます。

ご注意ください:
http inノードのURLは、カスタムコマンドブロックの名前と一致させる必要があります。
まとめ
カスタムコマンドは実際には一種のカスタムサービスとみなすことができ、Httpリクエストの形式でアプリにカスタムコマンドのスクリプトを提供します。 アプリでカスタムコマンドを保存または実行すると、スクリプトを取得するためにHttp GETリクエストが送信されます。 リクエストのURLは Robot_IP:AddOn_Port/Command_Name です。
ステップ4:実行
node-redでフローをデプロイした後、アドオンページで更新ボタンをクリックすると、アプリのプログラミングページの拡張コマンドに先ほど作成したコマンドブロックが表示されます。

ヒント
🎉おめでとうございます! カスタム指令の開発プロセスをすべて完了しました。次に、デバッグ方法とよくある問題の対処法について見ていきましょう。
デバッグ
**通信の送受信パラメータが正しいかどうかを確認するには? ** ::: tip Node-RED で debug ノードを使用するのは、デバッグの一般的な方法です。 :::
debug ノードを使用して、保存時にアプリから送信された指令ブロックのパラメータと返された JKS が正しいか確認します。

保存またはプログラムを実行するとき、アプリは Get リクエストを発行し、その際に指令ブロックに入力された内容がリクエストパラメータとして送信されます。

このとき、debug1 はリクエスト内で渡されたパラメータオブジェクトを捕捉できます。このオブジェクトのキーは指令ブロック上の属性名であり、値はその属性の具体的な内容(属性値および属性タイプ)です。
以下に受信内容の例を示します。「Select1」は定義されたドロップダウンボックスの属性名で、「value」は属性値を表し、0 はドロップダウンメニューの最初の項目が選択されていることを意味します。「type」は指令ブロックに入力されたパラメータのタイプで、このパラメータは入力ボックスタイプの属性にのみ意味を持ちます。0 は入力ボックスに手動で入力された値を示し、1 は入力ボックスに変数タイプの内容(システム変数、計算結果などのデータタイプの指令ブロック)が設定されていることを示します。

debug2 に出力される情報には、今回保存時に生成された JKS スクリプトのオブジェクトが含まれています。
その中の error_code は JKS 生成時のエラーコードで、0 は正常生成、-12 は内部エラーを意味します。このエラーコードが 0 でない場合、アプリはポップアップで対応するエラーコードとエラーメッセージを表示します。ここでは「jks」という属性だけに注目すれば十分で、その値が実際に生成された JKS スクリプトとなります。

スクリプト生成のシミュレーション
- スクリプト生成ページで、左側の指令ブロックにパラメータを入力し、「JKS スクリプトを生成」をクリックするとスクリプトをシミュレート生成し、下のコードウィンドウで生成されたコードを確認できます。

注意:
「JKS スクリプトを生成」ボタンをクリックすると、単に下のコードウィンドウにシミュレート生成されたスクリプトを表示するだけで、その他の実際の動作はありません。
よくある質問
開発中に次のような問題が発生する場合があります。詳細な状況と対処方法は以下をご覧ください。
**カスタム指令の生成に失敗しました ** アプリのプログラミング画面でカスタム指令ブロックを使用し、保存をクリックした際に「カスタム指令の生成に失敗しました」というエラーが表示される場合、以下の原因が考えられます。

AddOn が実行されていません 解決方法:アドオンページで該当する AddOn を見つけ、「実行」ボタンをクリックして AddOn を起動します。

node-red の
http inノードにおける URL とコマンドブロック名が一致していません 解決方法:URL とコマンドブロック名を一致させます。
**サーバー内部エラー ** サーバー内部エラーが発生する場合、多くは App が HTTP リクエストの応答を受信できず、タイムアウトしたことが原因です。

解決方法:node-red 側で http in ノードが正しく http response ノードに接続されているか確認し、接続後に App 側で AddOn を再起動します。
注意:
- 接続を回復した後でも、AddOn サービスを再起動しなければプログラムを正常に保存できません。
- エラーメッセージに「コントローラーを再起動してください」とありますが、AddOn を再起動するだけで問題ありません。
プロパティの一致に失敗しました

解決方法:node-red 内のカスタムコマンドのプロパティ名がスクリプト定義で使用されているものと一致しているか確認します。

