3. サンプルの実行

本章では、ROS2公式リポジトリから入手したサンプルプログラムを使って、intdash ROS2Bridgeの機能を実際に使用します。

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

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

    注釈

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

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

    $ source /opt/ros/foxy/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でメッセージを可視化する

intdashサーバーに送信されたJSONデータをData Visualizerで可視化するためには、以下を行います。

  • ROS2BridgeからメッセージをJSON形式で送信する

  • Data Visualizerで、JSONデータをパースしてメッセージを取り出す設定を行う

ここでは、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] をクリックし元の画面に戻ります。

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

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

  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 メッセージの表示