3. サンプルの実行¶
本章では、ROS2公式リポジトリから入手したサンプルプログラムを使って、intdash ROS2Bridgeの機能を実際に使用します。 画像と動画のサンプルについては、入力データの生成に利用しているソフトウェアの都合で、Foxy環境でのみ実行可能となっています。
3.1. サンプルを実行するためにエッジデバイスをセットアップする¶
エッジデバイス1とエッジデバイス2で以下のコマンドを実行し、公式のROS2 FoxyまたはHumble用のサンプルプログラムをインストールします。
注釈
Data Visualizerを使った可視化のみを行う場合は、エッジデバイス2の準備は不要です。
$ sudo apt install ros-[foxy,humble]-examples-*
エッジデバイス1とエッジデバイス2で、intdash ROS2Bridgeを起動するターミナルで以下のコマンドを実行して環境をセットアップします。
$ source /opt/ros/[foxy,humble]/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でメッセージを可視化する¶
ROS2メッセージをData Visualizerで可視化するためには、以下を行います。
Data Visualizerで、JSONデータをパースしてメッセージを取り出す設定を行う
intdash ROS2BridgeでメッセージをJSON表現に変換したうえで、intdash Edge Agentからintdashサーバーに送信する
まず、Data Visualizerで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] をクリックし元の画面に戻ります。
以上で、データ設定の準備は完了です。
次に、Data Visualizerでビジュアルパーツを配置します。
Data Visualizer 上に、文字列を表示することができるビジュアルパーツを配置します。ここでは例としてText Stream を使用します。
先ほど作成したデータ設定を使って、送信側エッジからのデータをビジュアルパーツにバインドします。
ライブモードになっていることを確認し、(アイコンがピンク色)、をクリックして、表示を開始します。
エッジデバイス1でintdash ROS2Bridgeとintdash Edge Agentを起動します。
エッジデバイス1で以下のコマンドを実行します。
$ ros2 topic pub /chatter std_msgs/String "data: Hello world"
Data Visualizer に、エッジデバイス1からのメッセージが表示されれば成功です。
3.7. Data Visualizerで画像を可視化する(Foxy向け)¶
画像のROS2メッセージをData VisualizerでJPEGとして可視化するためには、以下を行います。
Data Visualizerで、JPEGデータを表示するための設定を行う
intdash ROS2Bridgeで画像をJPEGに変換したうえで、intdash Edge Agentからintdashサーバーに送信する
準備として、ROS2空間で画像を送信するノードを準備します。
以下のコマンドを実行し、ワークスペースとなるディレクトリを作成します
$ mkdir -p ~/ws/src
ワークスペース内に、gscam2 (ROS2 camera driver for GStreamer-based video streams) をダウンロードします。
$ cd ~/ws $ cd src/ $ git clone https://github.com/clydemcqueen/gscam2.git -b foxy $ git clone https://github.com/ptrmu/ros2_shared.git
ビルドを実行します。
$ cd ~/ws/ $ sudo rosdep install --from-paths src --ignore-src -y $ colcon build
画像変換に必要なGStreamerプラグインをインストールします。
$ sudo apt-get install gstreamer1.0-plugins-good
画像送信ノード用パラメーター設定ファイル(
/opt/vm2m/etc/params_image.yaml
)を以下のように作成します。params_image.yaml
gscam_publisher: ros__parameters: gscam_config: 'videotestsrc pattern=smtpe75 ! video/x-raw,format=YUY2,width=320,height=240,framerate=1/1 ! videoconvert' preroll: False use_gst_timestamps: False camera_name: 'my_camera' frame_id: 'my_camera_frame'
Data VisualizerでJPEGを可視化するためには、JPEG用のデータ設定が必要です。
Data Visualizer画面左側の[Data Settings]( )をクリックします。
[Add Group] をクリックします。
New Data Groupが追加されます。
New Data Groupの[Add Data]をクリックします。
データポイントをJPEG型データとして扱うための設定をします。
Data Name: 分かりやすい任意の名前
Target Data:
Data Type:
VIDEO(H.264,JPEG)
Data ID:
VIDEO
Channel: 1
[OK] をクリックし元の画面に戻ります。
以上で、データ設定の準備は完了です。
次に、DataVisualizerでビジュアルパーツを配置します。
Data Visualizer上にImage Viewerを配置します。
先ほど作成したデータ設定を使って、送信側エッジからのデータをビジュアルパーツにバインドします。
ライブモードになっていることを確認し、(アイコンがピンク色)、をクリックして、表示を開始します。
エッジデバイス1のintdash ROS2Bridge設定ファイルを以下のように作成します。
params.yaml
upstream: enabled: true formats: - format: "jpeg_1" writer: path: "/opt/vm2m/var/run/intdash/logger_001.tx" buffering: true subscribers: enabled: true topics: - topic_name: "/sensor_msgs/image_raw" format: - "jpeg_1" pipeline: "jpegenc ! appsink name=appsink emit-signals=true"
エッジデバイス1でintdash ROS2Bridgeとintdash Edge Agentを起動します。
エッジデバイス1で以下のコマンドを実行します。
$ source ~/ws/install/setup.bash $ ros2 run gscam2 gscam_main --ros-args --remap /image_raw:=/sensor_msgs/image_raw --params-file /opt/vm2m/etc/params_image.yaml
Data Visualizer に、エッジデバイス1からの画像が表示されれば成功です。
3.8. Data Visualizerで動画を可視化する(Foxy向け)¶
動画のROS2メッセージをData VisualizerでH.264として可視化するためには、以下を行います。
Data Visualizerで、H.264データを表示するための設定を行う
intdash ROS2Bridgeで動画をH.264に変換したうえで、intdash Edge Agentからintdashサーバーに送信する
準備として、ROS2空間で画像を送信するノードを準備します。
以下のコマンドを実行し、ワークスペースとなるディレクトリを作成します
$ mkdir -p ~/ws/src
ワークスペース内に、gscam2 (ROS2 camera driver for GStreamer-based video streams) をダウンロードします。
$ cd ~/ws $ cd src/ $ git clone https://github.com/clydemcqueen/gscam2.git -b foxy $ git clone https://github.com/ptrmu/ros2_shared.git
ビルドを実行します。
$ cd ~/ws/ $ sudo rosdep install --from-paths src --ignore-src -y $ colcon build
画像変換に必要なGStreamerプラグインをインストールします。
$ sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
画像送信ノード用パラメーター設定ファイル(
/opt/vm2m/etc/params_image.yaml
)を以下のように作成します。params_image.yaml
gscam_publisher: ros__parameters: gscam_config: 'videotestsrc pattern=smtpe75 ! video/x-raw,format=YUY2,width=320,height=240,framerate=1/1 ! videoconvert' preroll: False use_gst_timestamps: False camera_name: 'my_camera' frame_id: 'my_camera_frame'
Data VisualizerでH.264を可視化するためには、H.264用のデータ設定が必要です。
Data Visualizer画面左側の[Data Settings]( )をクリックします。
[Add Group] をクリックします。
New Data Groupが追加されます。
New Data Groupの[Add Data]をクリックします。
データポイントをH.264型データとして扱うための設定をします。
Data Name: 分かりやすい任意の名前
Target Data:
Data Type:
VIDEO(H.264,JPEG)
Data ID:
VIDEO
Channel: 1
[OK] をクリックし元の画面に戻ります。
以上で、データ設定の準備は完了です。
次に、DataVisualizerでビジュアルパーツを配置します。
Data Visualizer上にVideo Playerを配置します。
先ほど作成したデータ設定を使って、送信側エッジからのデータをビジュアルパーツにバインドします。
ライブモードになっていることを確認し、(アイコンがピンク色)、をクリックして、表示を開始します。
エッジデバイス1のintdash ROS2Bridge設定ファイルを以下のように作成します。
params.yaml
upstream: enabled: true formats: - format: "h264_1" writer: path: "/opt/vm2m/var/run/intdash/logger_001.tx" buffering: true subscribers: enabled: true topics: - topic_name: "/sensor_msgs/image_raw" format: - "h264_1" pipeline : "\ videoconvert ! \ videorate ! \ video/x-raw,framerate=5/1 ! \ x264enc ! \ video/x-h264, stream-format=byte-stream ! \ queue ! \ h264parse ! \ queue ! \ appsink name=appsink emit-signals=true"
エッジデバイス1でintdash ROS2Bridgeとintdash Edge Agentを起動します。
エッジデバイス1で以下のコマンドを実行します。
$ source ~/ws/install/setup.bash $ ros2 run gscam2 gscam_main --ros-args --remap /image_raw:=/sensor_msgs/image_raw --params-file /opt/vm2m/etc/params_image.yaml
Data Visualizer に、エッジデバイス1からの動画が表示されれば成功です。