3. サンプルの実行¶
本章では、ROS2公式リポジトリから入手したサンプルプログラムを使って、intdash ROS2Bridgeの機能を実際に使用します。
3.1. サンプルを実行するためにエッジデバイスをセットアップする¶
エッジデバイス1とエッジデバイス2で以下のコマンドを実行し、公式のROS2 Foxy用のサンプルプログラムをインストールします。
注釈
Data Visualizerを使った可視化のみを行う場合は、エッジデバイス2の準備は不要です。
$ sudo apt install ros-foxy-examples-*
エッジデバイス1とエッジデバイス2で、intdash ROS2Bridgeを起動するターミナルで以下のコマンドを実行して環境をセットアップします。
$ source /opt/ros/foxy/setup.bash
3.2. トピックを伝送する¶
エッジデバイス1上とエッジデバイス2上でintdash ROS2Bridgeとintdash Edge Agentを起動します。
エッジデバイス1で以下のコマンドを実行します。
$ ros2 topic pub /chatter std_msgs/String "data: Hello world"
エッジデバイス2で以下のコマンドを実行します。
$ ros2 topic echo /chatter
エッジデバイス1でパブリッシュされたトピックがintdash経由でメッセージが伝送され、エッジデバイス2に出力されます。
# ros2 topic echo /chatter data: Hello world --- data: Hello world --- (省略)
3.3. サービスを伝送する¶
エッジデバイス1上とエッジデバイス2上でintdash ROS2Bridgeとintdash Edge Agentを起動します。
エッジデバイス2で以下のコマンドを実行しサービスを起動します。
$ ros2 run examples_rclcpp_minimal_service service_main
エッジデバイス1で以下のコマンドを実行しサービスクライアントを起動します。
$ ros2 run examples_rclcpp_minimal_client client_main
エッジデバイス1では以下のような出力が表示されます。
$ ros2 run examples_rclcpp_minimal_service service_main [INFO] [1634879875.987806930] [minimal_service]: request: 41 + 1
intdash経由でメッセージが伝送され、エッジデバイス2に以下のような出力が表示されます。
$ ros2 run examples_rclcpp_minimal_client client_main [INFO] [1634879881.148063426] [minimal_client]: result of 41 + 1 = 42
3.4. アクションを伝送する¶
エッジデバイス1上とエッジデバイス2上でintdash ROS2Bridgeとintdash Edge Agentを起動します。
エッジデバイス2で以下のコマンドを実行します
$ ros2 run examples_rclcpp_minimal_action_server action_server_member_functions
エッジデバイス1で以下のコマンドを実行します
$ ros2 run examples_rclcpp_minimal_action_client action_client_member_functions
intdash経由でメッセージが伝送され、エッジデバイス2に以下のような出力が表示されます。
$ ros2 run examples_rclcpp_minimal_action_client action_client_member_functions [INFO] [1634881800.018154229] [minimal_action_client]: Sending goal [INFO] [1634881800.020415652] [minimal_action_client]: Goal accepted by server, waiting for result [INFO] [1634881801.019846782] [minimal_action_client]: Next number in sequence received: 2 [INFO] [1634881802.020532553] [minimal_action_client]: Next number in sequence received: 3 [INFO] [1634881803.019839647] [minimal_action_client]: Next number in sequence received: 5 [INFO] [1634881804.019882402] [minimal_action_client]: Next number in sequence received: 8 [INFO] [1634881805.019849450] [minimal_action_client]: Next number in sequence received: 13 [INFO] [1634881806.020189671] [minimal_action_client]: Next number in sequence received: 21 [INFO] [1634881807.020374203] [minimal_action_client]: Next number in sequence received: 34 [INFO] [1634881808.020415252] [minimal_action_client]: Next number in sequence received: 55 [INFO] [1634881809.020678136] [minimal_action_client]: Result received [INFO] [1634881809.020779122] [minimal_action_client]: 0 [INFO] [1634881809.021047253] [minimal_action_client]: 1 [INFO] [1634881809.021416536] [minimal_action_client]: 1 [INFO] [1634881809.021530100] [minimal_action_client]: 2 [INFO] [1634881809.021594926] [minimal_action_client]: 3 [INFO] [1634881809.021844648] [minimal_action_client]: 5 [INFO] [1634881809.021910571] [minimal_action_client]: 8 [INFO] [1634881809.022269954] [minimal_action_client]: 13 [INFO] [1634881809.022328569] [minimal_action_client]: 21 [INFO] [1634881809.022367620] [minimal_action_client]: 34 [INFO] [1634881809.022578242] [minimal_action_client]: 55
3.5. パラメータを伝送する¶
エッジデバイス1上とエッジデバイス2上でintdash ROS2Bridgeとintdash Edge Agentを起動します。
エッジデバイス2で以下のコマンドを実行します
$ ros2 run examples_rclcpp_minimal_action_server action_server_member_functions
エッジデバイス1で以下のコマンドを実行します。
$ ros2 service call /minimal_action_server/get_parameters rcl_interfaces/srv/GetParameters
intdash経由でメッセージが伝送され、エッジデバイス1に以下のような出力が表示されます。
waiting for service to become available... requester: making request: rcl_interfaces.srv.GetParameters_Request(names=[]) response: rcl_interfaces.srv.GetParameters_Response(values=[])
3.6. Data Visualizerでメッセージを可視化する¶
intdashサーバーに送信されたJSONデータをData Visualizerで可視化するためには、以下を行います。
ROS2BridgeからメッセージをJSON形式で送信する
Data Visualizerで、JSONデータをパースしてメッセージを取り出す設定を行う
ここでは、JSONデータをパースする設定を行います。
Data Visualizer画面左側の[Data Settings]( )をクリックします。
[Add Group] をクリックします。
New Data Groupが追加されます。
New Data Groupの[Add Data]をクリックします。
String型データをJSONとしてパースし、msg内の/chatter/dataの値を文字列として取り出す設定をします。
注釈
intdashにおける、ROS2メッセージのJSON表現については ROS2メッセージのJSON表現 を確認ください。
Data Name: 分かりやすい任意の名前
Target Data:
Data Type: String
Data ID:
/topic:/chatter
Channel: 2
Conversion Settings:
Conversion Type: As JSON
Field Path:
msg.data
Value Type: String
[OK] をクリックし元の画面に戻ります。
以上で、データ設定の準備は完了です。
次に、DataVisualizerでビジュアルパーツを配置します。
Data Visualizer 上に、文字列を表示することができるビジュアルパーツを配置します。ここでは例としてText Stream を使用します。
先ほど作成したデータ設定を使って、送信側エッジからのデータをビジュアルパーツにバインドします。
ライブモードになっていることを確認し、(アイコンがピンク色)、をクリックして、表示を開始します。
エッジデバイス1でintdash ROS2Bridgeとintdash Edge Agentを起動します。
エッジデバイス1で以下のコマンドを実行します。
$ ros2 topic pub /chatter std_msgs/String "data: Hello world"
Data Visualizer に、エッジデバイス1からのメッセージが表示されれば成功です。