3. サンプルの実行

本章では、ROS2公式リポジトリから入手したサンプルプログラムを使って、intdash ROS2Bridgeの機能を実際に使用します。 画像と動画のサンプルについては、入力データの生成に利用しているソフトウェアの都合で、Foxy環境でのみ実行可能となっています。

3.1. サンプルを実行するためにエッジデバイスをセットアップする

  1. エッジデバイス1とエッジデバイス2で以下のコマンドを実行し、公式のROS2 FoxyまたはHumble用のサンプルプログラムをインストールします。

    注釈

    Data Visualizerを使った可視化のみを行う場合は、エッジデバイス2の準備は不要です。

    $ sudo apt install ros-[foxy,humble]-examples-*
    
  2. エッジデバイス1とエッジデバイス2で、intdash ROS2Bridgeを起動するターミナルで以下のコマンドを実行して環境をセットアップします。

    $ source /opt/ros/[foxy,humble]/setup.bash
    

3.2. トピックを伝送する

  1. エッジデバイス1上とエッジデバイス2上でintdash ROS2Bridgeとintdash Edge Agentを起動します。

  2. エッジデバイス1で以下のコマンドを実行します。

    $ ros2 topic pub /chatter std_msgs/String "data: Hello world"
    
  3. エッジデバイス2で以下のコマンドを実行します。

    $ ros2 topic echo /chatter
    

    エッジデバイス1でパブリッシュされたトピックがintdash経由でメッセージが伝送され、エッジデバイス2に出力されます。

    # ros2 topic echo /chatter
    data: Hello world
    ---
    data: Hello world
    ---
    (省略)
    

3.3. サービスを伝送する

  1. エッジデバイス1上とエッジデバイス2上でintdash ROS2Bridgeとintdash Edge Agentを起動します。

  2. エッジデバイス2で以下のコマンドを実行しサービスを起動します。

    $ ros2 run examples_rclcpp_minimal_service service_main
    
  3. エッジデバイス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. エッジデバイス1上とエッジデバイス2上でintdash ROS2Bridgeとintdash Edge Agentを起動します。

  2. エッジデバイス2で以下のコマンドを実行します

    $ ros2 run examples_rclcpp_minimal_action_server action_server_member_functions
    
  3. エッジデバイス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. エッジデバイス1上とエッジデバイス2上でintdash ROS2Bridgeとintdash Edge Agentを起動します。

  2. エッジデバイス2で以下のコマンドを実行します

    $ ros2 run examples_rclcpp_minimal_action_server action_server_member_functions
    
  3. エッジデバイス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データをパースする設定を行います。

  1. Data Visualizer画面左側の[Data Settings](data-settings )をクリックします。

  2. [Add Group] をクリックします。

    ../_images/data-viz-add-group.png

    図 6 Groupを追加

    New Data Groupが追加されます。

  3. New Data Groupの[Add Data]をクリックします。

    ../_images/data-viz-add-data.png

    図 7 Dataを追加

  4. 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

    ../_images/data-viz-json-parse-setting.png

    図 8 JSONデータ {"msg":{"data":"Hello world"}} をパースして値を取り出す設定

    [OK] をクリックし元の画面に戻ります。

以上で、データ設定の準備は完了です。

次に、Data Visualizerでビジュアルパーツを配置します。

  1. Data Visualizer 上に、文字列を表示することができるビジュアルパーツを配置します。ここでは例としてText Stream を使用します。

    ../_images/text-stream-visual-part.png

    図 9 Text Streamを選択

  2. 先ほど作成したデータ設定を使って、送信側エッジからのデータをビジュアルパーツにバインドします。

    ../_images/data-viz-bind-chatter-sample.png

    図 10 データをバインド

  3. ライブモードになっていることを確認し、(live-modeアイコンがピンク色)、playをクリックして、表示を開始します。

  4. エッジデバイス1でintdash ROS2Bridgeとintdash Edge Agentを起動します。

  1. エッジデバイス1で以下のコマンドを実行します。

    $ ros2 topic pub /chatter std_msgs/String "data: Hello world"
    

    Data Visualizer に、エッジデバイス1からのメッセージが表示されれば成功です。

    ../_images/data-viz-chatter-sample.png

    図 11 メッセージの表示

3.7. Data Visualizerで画像を可視化する(Foxy向け)

画像のROS2メッセージをData VisualizerでJPEGとして可視化するためには、以下を行います。

  • Data Visualizerで、JPEGデータを表示するための設定を行う

  • intdash ROS2Bridgeで画像をJPEGに変換したうえで、intdash Edge Agentからintdashサーバーに送信する

準備として、ROS2空間で画像を送信するノードを準備します。

  1. 以下のコマンドを実行し、ワークスペースとなるディレクトリを作成します

    $ mkdir -p ~/ws/src
    
  2. ワークスペース内に、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
    
  3. ビルドを実行します。

    $ cd ~/ws/
    $ sudo rosdep install --from-paths src --ignore-src -y
    $ colcon build
    
  4. 画像変換に必要なGStreamerプラグインをインストールします。

    $ sudo apt-get install gstreamer1.0-plugins-good
    
  5. 画像送信ノード用パラメーター設定ファイル( /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用のデータ設定が必要です。

  1. Data Visualizer画面左側の[Data Settings](data-settings )をクリックします。

  2. [Add Group] をクリックします。

    ../_images/data-viz-add-group.png

    図 12 Groupを追加

    New Data Groupが追加されます。

  3. New Data Groupの[Add Data]をクリックします。

    ../_images/data-viz-add-data.png

    図 13 Dataを追加

  4. データポイントをJPEG型データとして扱うための設定をします。

    • Data Name: 分かりやすい任意の名前

    • Target Data:

      • Data Type: VIDEO(H.264,JPEG)

      • Data ID: VIDEO

      • Channel: 1

    ../_images/data-viz-jpeg-setting.png

    [OK] をクリックし元の画面に戻ります。

以上で、データ設定の準備は完了です。

次に、DataVisualizerでビジュアルパーツを配置します。

  1. Data Visualizer上にImage Viewerを配置します。

    ../_images/image-viewer-visual-part.png

    図 14 Image Viewerを選択

  2. 先ほど作成したデータ設定を使って、送信側エッジからのデータをビジュアルパーツにバインドします。

    ../_images/data-viz-bind-data-jpeg.png

    図 15 データをバインド

  3. ライブモードになっていることを確認し、(live-mode-jpegアイコンがピンク色)、play-jpegをクリックして、表示を開始します。

  4. エッジデバイス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"
    
  5. エッジデバイス1でintdash ROS2Bridgeとintdash Edge Agentを起動します。

  6. エッジデバイス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からの画像が表示されれば成功です。

    ../_images/data-viz-jpeg.png

    図 16 Image Viewerでの画像の表示

3.8. Data Visualizerで動画を可視化する(Foxy向け)

動画のROS2メッセージをData VisualizerでH.264として可視化するためには、以下を行います。

  • Data Visualizerで、H.264データを表示するための設定を行う

  • intdash ROS2Bridgeで動画をH.264に変換したうえで、intdash Edge Agentからintdashサーバーに送信する

準備として、ROS2空間で画像を送信するノードを準備します。

  1. 以下のコマンドを実行し、ワークスペースとなるディレクトリを作成します

    $ mkdir -p ~/ws/src
    
  2. ワークスペース内に、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
    
  3. ビルドを実行します。

    $ cd ~/ws/
    $ sudo rosdep install --from-paths src --ignore-src -y
    $ colcon build
    
  4. 画像変換に必要なGStreamerプラグインをインストールします。

    $ sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
    
  5. 画像送信ノード用パラメーター設定ファイル( /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用のデータ設定が必要です。

  1. Data Visualizer画面左側の[Data Settings](data-settings )をクリックします。

  2. [Add Group] をクリックします。

    ../_images/data-viz-add-group.png

    図 17 Groupを追加

    New Data Groupが追加されます。

  3. New Data Groupの[Add Data]をクリックします。

    ../_images/data-viz-add-data.png

    図 18 Dataを追加

  4. データポイントをH.264型データとして扱うための設定をします。

    • Data Name: 分かりやすい任意の名前

    • Target Data:

      • Data Type: VIDEO(H.264,JPEG)

      • Data ID: VIDEO

      • Channel: 1

    ../_images/data-viz-jpeg-setting.png

    [OK] をクリックし元の画面に戻ります。

以上で、データ設定の準備は完了です。

次に、DataVisualizerでビジュアルパーツを配置します。

  1. Data Visualizer上にVideo Playerを配置します。

    ../_images/video-player-visual-part.png

    図 19 Video Playerを選択

  2. 先ほど作成したデータ設定を使って、送信側エッジからのデータをビジュアルパーツにバインドします。

    ../_images/data-viz-bind-data-h264.png

    図 20 データをバインド

  3. ライブモードになっていることを確認し、(live-mode-h264アイコンがピンク色)、play-h264をクリックして、表示を開始します。

  4. エッジデバイス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"
    
  5. エッジデバイス1でintdash ROS2Bridgeとintdash Edge Agentを起動します。

  6. エッジデバイス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からの動画が表示されれば成功です。

    ../_images/data-viz-h264.png

    図 21 Video Playerでの動画の表示