遠隔操作#

Data Visualizer上にビジュアルパーツ Command Button を配置すると、ユーザーはボタンをクリックすることによってintdashサーバーにコマンドを送信することができます。

また、ビジュアルパーツ Gamepad を配置すると、PCに接続されたゲームパッドのボタンやスティックの状態をROS Topic型のメッセージとして送信することができます。

遠隔地にある操作対象(ロボットなど)に搭載したintdashエッジでこれらのデータ(コマンドやゲームパッドの状態)を受信することで、Data Visualizerを使った遠隔操作が可能になります。

これらの遠隔操作用データを送信するとき、Data Visualizerはエッジとして振る舞い、iSCP 2.0のアップストリームを使って、サーバーにリアルタイムにデータを送信します。 このときどのエッジとして振る舞うかは、Data Visualizer画面下部のSender Edgeボタンで選択します。 (画面下部にSender Edgeボタンが表示されていない場合は、 misc-icon Miscメニューを開いてSender Edge機能をオンにしてください。)

../_images/remote-control-overview.ja.png

操作対象のエッジでは、Data Visualizerから送信されるデータを受信するよう設定しておきます。 受信するデータは、送信元エッジのID(Data VisualizerのエッジのID)とデータIDを使って指定してください。

遠隔操作用データの送信#

Data Visualizerから遠隔操作用データを送信するには、以下のように操作します。

  1. Command ButtonまたはGamepadビジュアルパーツをスクリーンに配置します。

    ../_images/command-button.png ../_images/gamepad.png

    注釈

    Gamepadはスクリーンの縦2マス以上で配置してください。

  2. ビジュアルパーツのData Bindingを設定します。 設定については、この下の各ビジュアルパーツの説明を参照してください。

  3. Sender Edge(どのエッジとして遠隔操作用データを送信するか)を選択します。

    ../_images/sender-edge.png
  4. Data VisualizerをLIVEモードにして、 play-icon (Play)をクリックします。

  5. Command Buttonまたはゲームパッドを操作します。 これにより遠隔操作用データが送信されます。

    Command Buttonまたはゲームパッドのいずれかで操作を開始してから、 stop-icon (Stop)をクリックするまでが1つの計測になります。

    遠隔操作用データは、intdashで扱われる他のデータと同様に、計測(時系列データ)としてサーバーに保存されます。 また、Sender Edgeで選択されたエッジが、その計測の送信元エッジとして記録されます。

  6. 遠隔操作を終了する場合は stop-icon (Stop)をクリックします。

遠隔操作により作成された計測は、他の計測と同様に、後からData Visualizerで可視化することができます。 ただし、Command ButtonやGamepadビジュアルパーツでは可視化できません。 再生する際は、データ型に合わせて他のビジュアルパーツを使用してください。

注釈

ネットワークが切断された場合に遠隔操作用データを蓄積して復旧後に再送する機能はありません。

Command Button#

文字列や数値を送信するためのビジュアルパーツです。 Command Buttonボタンをクリックすると、設定された任意の文字列または数値を含むメッセージがサーバーに送信されます。

../_images/command-button.png

送信される文字列または数値は、Panel OptionのBody of Commandで指定します。この値がJSON形式の所定フォーマットに埋め込まれて、iSCP 2.0のString型データポイントとして送信されます。 このとき、iSCP 2.0におけるデータ名称は、ビジュアルパーツのData Bindingの設定に従って、 v1/<チャンネル>/<Data VisualizerでのData ID> となります。 例えば、Data VisualizerでのData IDが test 、チャンネルが2の場合、iSCP 2.0でのデータ名称は、 v1/2/test となります。

../_images/command-button-send.ja.png

重要

遠隔操作用データを受信するエッジでは、ダウンストリームを使ってデータを受信するための設定が別途必要です。(上の例の場合、edge002において、edge001からのデータを受信する設定が必要です。)

Command Buttonから送信されるメッセージの例を以下に挙げます。(説明のために改行を入れてあります。)

{
  "message_id": "9e1d87de-a1af-f04f-bd18-61940dc9003",
  "sync_type": "sync",
  "body_type": "int",
  "body": 12345
}
message_id

メッセージを識別するためのランダムなID(UUID v4形式)が自動的に付与されます。

sync_type

Panel OptionのSync Typeの設定に従って、 sync または async の値が送信されます。

body_type

Panel OptionのBody Type of Commandの設定に従って、 canfloatintbytesstring のいずれかになります。

body

Panel OptionのBody of Commandで設定された値が、メッセージのボディとして送信されます。

コマンドを受信したエッジからのレスポンス#

Panel OptionでWait Responseをオンにした場合、Command Buttonビジュアルパーツはエッジからのレスポンスを待ちます。 操作対象のエッジからは以下のようなレスポンスを送信してください。

  • データ型: string

  • データ名称: コマンドと同じ(上記の例の場合、 v1/2/test

{
    "ack": "9e1d87de-a1af-f04f-bd18-61940dc9003"
}
ack

操作対象が受信したコマンドの message_id

Panel OptionでWait Responseをオンにした場合、設定されたResponse Timeoutが経過するまでにレスポンスを受信できないと、ビジュアルパーツにエラーが表示されます。

Panel Settings#

設定項目

設定内容

Panel Name

パネルに表示する名前です。送信されるデータには影響しません。

Data Binding

コマンドの送信とレスポンスの受信のための設定を行います。 適切にデータ設定を作成し、それをバインドしてください。

エッジ

Panel OptionsでWait Responseをオンにした場合、ここで設定したエッジからのレスポンスを待ち受けます。 (この設定は、レスポンスを待ち受ける場合にどのエッジからのレスポンスを待ち受けるかを設定するものです。 ここでエッジを指定することによって、そのエッジ宛てにコマンドが送信されるわけではありません。 どのエッジがコマンドを受信するかは、受信する側の設定によって決まります。)

Data Name

任意の文字列。 Data Visualizer上でデータを識別するための一意な名前を指定します。送信されるデータには影響しません。

Data Type

「String」を指定してください。

Data ID

任意の文字列。 ここで指定した文字列は、コマンド送信時とレスポンス待ち受け時のデータ名称の一部として使用されます。 コマンドとレスポンスは同じデータ名称でやり取りされます。

Channel

任意のチャンネル。 ここで設定したチャンネルは、コマンド送信時とレスポンス待ち受け時のデータ名称の一部として使用されます。 コマンドとレスポンスは同じデータ名称でやり取りされます。

Conversion Settings

「No Conversion (As String)」を指定してください。

Rendering Speed

表示の更新頻度です。デフォルトは20fpsです。

Rendering Speedの値を大きくすると処理の負荷が上がります。負荷が高すぎると指定した頻度で更新できない場合があります。

Panel Option#

設定項目

設定内容

Body Type of Command

送信するコマンドのデータ型を設定します。 String、Int、Float、Bytes、CANのいずれかを選択します。 この情報は、 body_type として送信されます。

  • Intを選択した場合は、Body of Commandは整数に変換されます。

  • Floatを選択した場合、Body of Commandは小数に変換されます

  • String、CAN、Byteを選択した場合、Body of Commandに入力した文字列はそのまま送信されます。

Body of Command

送信するコマンドの本体です。 CANデータやByteデータを送信したい場合は、Base64でエンコードした文字列を入力してください。

Sync Type

コマンド送信先(操作対象)での処理の種類(SyncまたはAsync)を選択します。 このフィールドの値は、 sync_type として送信されます。

この値をどのように使用するかは、操作対象に任されます。Data Visualizerや、データを中継するintdashサーバーはこの値による影響を受けません。

Button Label

ボタンに表示するテキストを設定します。

Buttton Background Color

ボタンの背景色を設定します。 CSSにおける色指定を利用できます(例: blue#0000FFrgba(0,0,255,0.5)

Confirmation Dialog

オンにすると、コマンドが送信される前に確認ダイアログが表示されます。

Server Timeout (ms)

サーバーとの通信タイムアウトを設定します。

Wait Response

オンにすると、サーバーからの応答と、操作対象エッジからの応答を待ちます。 Response Timeoutで設定された時間内にサーバーと操作対象エッジから応答を受信できない場合はエラーとなります。 操作対象エッジからの応答の詳細については、 コマンドを受信したエッジからのレスポンス を参照してください。

オフにした場合は、サーバーや操作対象からの応答を待ちません。

Response Timeout (ms)

Wait Responseをオンにした場合にどれだけ応答を待つかを設定します。ここで設定した時間内に応答がない場合、エラーとなります。

Gamepad#

Gamepadは、ゲーム用のコントローラーでの操作を送信するためのビジュアルパーツです。

../_images/gamepad.png

対応するゲームパッドハードウェアをPCに接続すると、ゲームパッドの状態をData Visualizerから送信することができます。

ゲームパッドハードウェアが認識されると、Gamepadビジュアルパーツ上でハードウェアが選択可能になります。使用するハードウェアを選択してください。 ゲームパッドの代わりにキーボードやマウスで操作する場合はKeyboardまたはMouseを選択してください。

../_images/gamepad-control-select.png

キーボードでの操作は、マウスポインターがゲームパッドの上にあるときのみ可能です。ビジュアルパーツ上に表示されるキーで操作します。

Data VisualizerをLIVEモードにし、 play-icon (Play)を押した状態で、ゲームパッドのボタンを操作するとデータの送信が開始されます(計測が開始されます)。

その後、ゲームパッドの状態が変化するたびに、ゲームパッドの状態がサーバーに送信されます。 また、状態が変化していなくても、Auto Repeat Intervalで設定された間隔ごとに送信されます。

データのフォーマットとしては、iSCP 2.0の拡張仕様で定義されたROS Topic用のペイロードフォーマットが使用されます。詳細については、iSCP 2.0の仕様書を参照してください。

../_images/gamepad-send.ja.png

重要

コマンドを受信するエッジでは、ダウンストリームを使って受信するための設定が別途必要です。(上の例の場合、edge002において、edge001からのデータを受信する設定が必要です。)

Command Buttonビジュアルパーツとは異なり、操作対象のエッジからのレスポンスを受信することはできません。

動作確認済みのゲームパッドハードウェア#

ハードウェア名

Mac

Windows

ビジュアルパーツで選択するLayout

PlayStation DualSense ワイヤレスコントローラー

Type P

Nintendo Switch Proコントローラー

-

Type N

ロジクール F310 ゲームパッド

-

Type X

Razer Wolverine V2

-

Type X

ゲームパッドのaxesとbuttons#

ゲームパッドの状態は、以下のようなROS Topicタイプのデータとして送信されます。 スティックやボタンの状態は axesbuttons という2つの配列で表現されます。

例:

header:
  stamp:
    sec: 1695804308,
    nanosec: 674000000
  frame_id: example
axes: [-0.2659664701083979, 0.0997374262906492, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0]
buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

重要

上記データは送信時に MessagePack でシリアライズされますが、このとき小数点以下を含む値は、使用している変換ライブラリの制限によりfloat 64でエンコードされます。

ROSの sensor_msgs/Joy タイプのメッセージでは、 axes の要素はfloat32と定義されているため、Gamepadから送信されたデータを sensor_msgs/Joy タイプのメッセージとして使用する場合、データ型の変換が必要になる場合があります。

各スティックやボタンと、配列要素との対応は以下のとおりです。

../_images/gamepad-layout.ja.png

注釈

動作確認済みのゲームパッドを使用する場合、どのゲームパッドでも、同じ位置のスティックやボタンは同じインデックス番号を持ちます。

axes#

axesは、スティックの位置やボタンの押し込み量を表す小数の配列です。

インデックス

Type N

Type P

Type X

ニュートラル

axes[0]

LS

L3

LS

0.0

左 +1.0 ~ 右 -1.0

axes[1]

LS

L3

LS

0.0

下 -1.0 ~ 上 +1.0

axes[2]

ZL

L2

LT

+1.0

ニュートラル +1.0 ~ 完全に押し込んだ状態 -1.0 (押し込む方向がマイナス)

axes[3]

RS

R3

RS

0.0

左 +1.0 ~ 右 -1.0

axes[4]

RS

R3

RS

0.0

下 -1.0 ~ 上 +1.0

axes[5]

ZR

R2

RT

+1.0

ニュートラル +1.0 ~ 完全に押し込んだ状態 -1.0 (押し込む方向がマイナス)

axes[6]

方向キー←→

方向キー←→

方向キー←→

0.0

←押下 +1.0 ~ →押下 -1.0

axes[7]

方向キー↓↑

方向キー↓↑

方向キー↓↑

0.0

↓押下 -1.0 ~ ↑押下 +1.0

buttons#

buttonsは、ボタンが押されているかを表す整数の配列です。 いずれも、ニュートラルのとき0、押したとき1となります。

インデックス

Type N

Type P

Type X

備考

buttons[0]

B

X

A

buttons[1]

A

B

buttons[2]

X

Y

buttons[3]

Y

X

buttons[4]

L

L1

LB

buttons[5]

R

R1

RB

buttons[6]

ZL

L2

LT

buttons[7]

ZR

R2

RT

buttons[8]

-

Create

View

buttons[9]

+

Option

Menu

buttons[10]

Home

PS

Guide

buttons[11]

LS

L3

LS

スティック押し込み時

buttons[12]

RS

R3

RS

スティック押し込み時

Panel Settings#

設定項目

設定内容

Panel Name

パネルに表示する名前です。送信されるデータには影響しません。

Data Binding

他のビジュアルパーツと異なり、このビジュアルパーツには、他のエッジからデータを受信する機能はありませんので、ここでエッジを指定することはできません。

以下のようにデータ設定をバインドしてください。

Data Name

任意の文字列。 Data Visualizer上で識別するための一意な名前を指定します。送信されるデータには影響しません。

Data Type

「ROS Topic」を指定してください。

Data ID

任意の文字列を指定します(ただし、 / を含めることはできません)。 送信されるデータの、iSCP 2.0におけるデータIDとして使用されます。

Channel

データ型としてROS Topicを指定するため、チャンネルは指定できません。

Conversion Settings

必ず「No Conversion (As Hex String)」または「No Conversion (As Binary)」を選択してください。 これら以外を選ぶと、正しい形式でデータを送信できません。

Rendering Speed

表示の更新頻度です。デフォルトは20fpsです。

Rendering Speedの値を大きくすると処理の負荷が上がります。負荷が高すぎると指定した頻度で更新できない場合があります。

Panel Option#

設定項目

設定内容

Layout

使用するゲームパッドのレイアウトを選択します。 レイアウトについては、 動作確認済みのゲームパッドハードウェア を参照してください。

  • Type N

  • Type P

  • Type X

frame_id in sensor_msgs/Joy

ROSメッセージヘッダーの frame_id に指定する文字列

Stick Deadzone

ゲームパッドの各ボタンまたはスティックにおいて、ニュートラル位置からの移動量がこの値以下の場合、動かされていないとみなします。

Auto Repeat Interval (ms): Zero is OFF

無操作時の自動送信間隔。 ゲームパッドの状態が変化していなくても、ここで指定した間隔ごとにデータが送信されます。 0を指定した場合、ゲームパッドの状態が変化していないときにはデータを送信しません。

Server Timeout (ms)

サーバー接続時のタイムアウト