2. インストールと起動

2.1. intdash Edge Agentとintdash ROS2Bridge をインストールする

intdash ROS2Bridge を使用するには、intdash Edge Agentとintdash ROS2Bridgeをエッジデバイスインストールする必要があります。

2.1.1. intdash Edge Agentをインストールする

intdash Edge Agentをインストールするには、アプトポッドのリポジトリからパッケージを取得します。

  1. 以下のようにコマンドを実行し、アプトポッドのリポジトリを取得元として追加します。

    DISTRIBUTION 、ARCHITECTUREは以下の表から値を設定してください。

    DISTRIBUTION

    ARCHITECTURE

    ubuntu

    amd64, arm64

    $ sudo apt-get update
    $ sudo apt-get install \
      apt-transport-https \
      ca-certificates \
      curl \
      gnupg-agent \
      lsb-release
    $ curl -s --compressed \
      "https://repository.aptpod.jp/intdash-edge/linux/${DISTRIBUTION}/gpg" | sudo apt-key add -
    $ echo "deb [arch=${ARCHITECTURE}] \
      https://repository.aptpod.jp/intdash-edge/linux/${DISTRIBUTION} \
      $(lsb_release -cs) \
      stable" \
      | sudo tee /etc/apt/sources.list.d/intdash-edge.list
    $ sudo apt-get update
    

    なお、上記の手順は最新ではない可能性があります。 intdash Edge Agentのインストール方法の詳細については、 intdash Edge Agentデベロッパーガイド を参照してください。

  2. 以下のコマンドを実行してintdash Edge Agentをインストールします。

    $ sudo apt-get install intdash-edge
    

2.1.2. intdash ROS2Bridgeをインストールする

ヒント

以下の説明ではご使用の環境に直接intdash ROS2Bridgeをインストールしますが、Dockerを使ってintdash ROS2Bridgeを起動することも可能です。 Amazon ECR Public Galleryにて配布されているDockerイメージ の説明を参考にしてください。

intdash ROS2Bridgeをインストールするには、アプトポッドのリポジトリからパッケージを取得します。

  1. 以下のようにコマンドを実行し、アプトポッドのリポジトリを取得元として追加します。

    ARCHITECTUREは intdash Edge Agentをインストールする で設定したものを使用します。

    $ curl -s --compressed \
     "https://repository.aptpod.jp/intdash-robotics/linux/ubuntu/gpg" | sudo apt-key add -
    $ echo "deb [arch=${ARCHITECTURE}] \
      https://repository.aptpod.jp/intdash-robotics/linux/ubuntu \
      $(lsb_release -cs) \
      stable" \
     | sudo tee /etc/apt/sources.list.d/intdash-robotics.list
    $ sudo apt-get update
    
  2. 以下のコマンドを実行してintdash ROS2Bridgeをインストールします。

    $ sudo apt-get install ros-[foxy,humble]-intdash-ros2bridge
    

    intdash ROS2Bridgeは以下のパスにインストールされます。

    /opt/ros/[foxy,humble]/share/intdash_ros2bridge
    
  3. JPEGまたはH.264で送信する機能を利用する場合のみ:GStreamerを利用するためのパッケージをインストールします。

    $ sudo apt-get install gstreamerproxy
    

2.2. intdash Edge Agentの設定を行う(manager.conf)

2.2.1. デバイスコネクターの設定

intdash Edge Agentに、intdash ROS2Bridgeと接続するための設定を追加します。

注釈

intdash Edge Agentの設定ファイルmanager.conf内で、 loggers (デバイスコネクター)として、 intdash_bridge を追加します。

"loggers": [
    {
        "devicetype": "intdash_ros2bridge",
        "path": "",
        "connections": [
            {
                "fifo_tx": "/var/run/intdash/logger_001.tx", # (1)
                "fifo_rx": "/var/run/intdash/logger_001.rx", # (2)
                "channel": 1 # (3)
            }, # (X)
            {
                "fifo_tx": "/var/run/intdash/logger_002.tx", # (1)
                "channel": 2 # (3)
            } # (Y)
        ],
        "details": {
            "plugin": "fifo"
        }
    },
...
]

上記サンプルでは、intdash ROS2Bridgeとの間で双方向の送受信を行うチャンネル1(X)と、intdash ROS2Bridgeからの受信のみを行うチャンネル2(Y)を設定しています。このあとの設定により、チャンネル1ではCDR形式でintdashサーバーとの送受信を行い、チャンネル2ではJSON形式でintdashサーバーへの送信のみを行います。

番号

フィールド

説明

(1)

loggers[].connections[].fifo_tx

intdash Edge AgentがintdashROS2Bridgeからデータを受け取るために使用するFIFOのパスです(アップストリーム用)。任意のパスを指定してください。このパスは intdash ROS2Bridgeの設定を行う にも設定します。

(2)

loggers[].connections[].fifo_rx

intdash Edge Agent がintdashROS2Bridgeにデータを渡すために使用するFIFOのパスです(ダウンストリーム用)。任意のパスを指定してください。このパスは intdash ROS2Bridgeの設定を行う にも設定します。

(3)

loggers[].connections[].channel

データに付与するintdashのチャンネル番号を設定します。

2.2.2. ダウンストリームの設定

以下に該当する場合は、manager.confでダウンストリームの設定も行う必要があります。

  • トピックメッセージのブリッジをする場合の、受信(サブスクライブ)側エッジデバイス

  • サービス、アクション、またはパラメータのブリッジをする場合の、送信側と受信側エッジデバイス(レスポンスの処理が発生するため、双方向の伝送が発生します)

ここでは、intdash ROS2Bridgeに関わる部分のみを説明します。

intdash Edge Agentにおけるダウンストリーム用のモジュールである「controlクライアント」の詳細は、 intdash Edge Agentデベロッパーガイド を参照してください。

注釈

以下の例では、受信するデータのデータIDを ctlr_flt_ids で指定します。データIDについては、 ROS2メッセージの種類とintdashデータIDの対応関係 を参照してください。

2.2.2.1. トピックをブリッジする場合のエッジデバイス2(受信側)

エッジデバイス1でパブリッシュされたトピックをエッジデバイス2でサブスクライブする場合は、以下のようにします。

エッジデバイス2のmanager.confの設定:

  • ctlr_id (受信するデータの送信元の指定)にエッジデバイス1のUUIDを設定します。

  • ctlr_flt_ids (受信するデータのIDの指定)に、 "/topic:/<topic_name>" を追加します。

以下は設定例です。

"ctlr_id": "エッジデバイス1のUUID",
"ctlr_flt_ids": [
  "/topic:/chatter",
]

2.2.2.2. サービスをブリッジする場合のエッジデバイス1とエッジデバイス2

エッジデバイス1のサービスクライアントが発行したサービスリクエストをエッジデバイス2のサービスサーバーが処理する場合は、以下のようにします。

エッジデバイス1のmanager.confの設定:

  • ctlr_id (受信するデータの送信元の指定)にエッジデバイス2のUUIDを設定します

  • ctlr_flt_ids (受信するデータのIDの指定)に "/srv/resp:<service_name>" を追加します。

以下は設定例です。

"ctlr_id": "エッジデバイス2のUUID",
"ctlr_flt_ids": [
  "/srv/resp:/add_two_ints",
]

エッジデバイス2の設定:

  • ctlr_id (受信するデータの送信元の指定)にエッジデバイス1のUUIDを設定します

  • ctlr_flt_ids (受信するデータのIDの指定)に "/srv/req:<service_name>" を追加します。

以下は設定例です。

"ctlr_id": "エッジデバイス1のUUID",
"ctlr_flt_ids": [
  "/srv/req:/add_two_ints",
]

2.2.2.3. アクションをブリッジする場合のエッジデバイス1とエッジデバイス2

エッジデバイス1のアクションクライアント(ROS2ノード)のアクションリクエストをエッジデバイス2のアクションサーバー(ROS2ノード)が処理しアクションを実行する場合は、以下のようにします。

エッジデバイス1の設定:

  • ctlr_id (受信するデータの送信元の指定)にエッジデバイス2のUUIDを設定します

  • ctlr_flt_ids (受信するデータのIDの指定)に以下を追加します。

    • アクションゴールレスポンス "/act/goal_resp:<action_name>"

    • アクションフィードバック "/act/fb:<action_name>"

    • アクションゴールリザルト "/act/result:<action_name>"

    • アクションキャンセルレスポンス "/act/cancel_resp:<action_name>"

以下は設定例です。

"ctlr_id": "エッジデバイス2のUUID",
"ctlr_flt_ids": [
  "/act/goal_resp:/fibonacci",
  "/act/fb:/fibonacci",
  "/act/result:/fibonacci",
  "/act/cancel_resp:/fibonacci",
]

エッジデバイス2の設定:

  • ctlr_id (受信するデータの送信元の指定)にエッジデバイス1のUUIDを設定します。

  • ctlr_flt_ids (受信するデータのIDの指定)に以下を追加します。

    • アクションゴールリクエスト "/act/goal_req:<action_name>"

    • アクションキャンセルリクエスト "/act/cancel_req:<action_name>"

以下は設定例です。

"ctlr_id": "エッジデバイス1のUUID",
"ctlr_flt_ids": [
  "/act/goal_req:/fibonacci",
  "/act/cancel_req:/fibonacci",
]

2.2.2.4. パラメータをブリッジする場合のエッジデバイス1とエッジデバイス2

エッジデバイス1のパラメータクライアント(ROS2ノード)のパラメータリクエストをエッジデバイス2のパラメータサービスサーバ(ROS2ノード)が処理しパラメータレスポンスを返す場合は、以下のようにします。

エッジデバイス1の設定:

  • ctlr_id (受信するデータの送信元の指定)にエッジデバイス2のUUIDを設定します

  • ctlr_flt_ids (受信するデータのIDの指定)に、パラメータレスポンスを受信するための設定を追加します。

    • "/param/resp:<node_name>/get_parameters"

    • "/param/resp:<node_name>/describe_parameters"

    • "/param/resp:<node_name>/get_parameter_types"

    • "/param/resp:<node_name>/get_parameters"

    • "/param/resp:<node_name>/list_parameters"

    • "/param/resp:<node_name>/set_parameters"

    • "/param/resp:<node_name>/set_parameters_atomically"

以下は設定例です。

"ctlr_id": "エッジデバイス2のUUID",
"ctlr_flt_ids": [
  "/param/resp:/minimal_action_server/get_parameters",
  "/param/resp:/minimal_action_server/describe_parameters",
  "/param/resp:/minimal_action_server/get_parameter_types",
  "/param/resp:/minimal_action_server/get_parameters",
  "/param/resp:/minimal_action_server/list_parameters",
  "/param/resp:/minimal_action_server/set_parameters",
  "/param/resp:/minimal_action_server/set_parameters_atomically"
]

エッジデバイス2の設定:

  • ctlr_id (受信するデータの送信元の指定)にエッジデバイス2のUUIDを設定します。

  • ctlr_flt_ids (受信するデータのIDの指定)に、パラメータリクエストを受信するための設定を追加します。

    • "/param/req:<node_name>/get_parameters"

    • "/param/req:<node_name>/get_parameters"

    • "/param/req:<node_name>/describe_parameters"

    • "/param/req:<node_name>/get_parameter_types"

    • "/param/req:<node_name>/get_parameters"

    • "/param/req:<node_name>/list_parameters"

    • "/param/req:<node_name>/set_parameters"

    • "/param/req:<node_name>/set_parameters_atomically

以下は設定例です。

"ctlr_id": "エッジデバイス1のUUID",
"ctlr_flt_ids": [
  "/param/req:/minimal_action_server/get_parameters",
  "/param/req:/minimal_action_server/get_parameters",
  "/param/req:/minimal_action_server/describe_parameters",
  "/param/req:/minimal_action_server/get_parameter_types",
  "/param/req:/minimal_action_server/get_parameters",
  "/param/req:/minimal_action_server/list_parameters",
  "/param/req:/minimal_action_server/set_parameters",
  "/param/req:/minimal_action_server/set_parameters_atomically"
]

注意

topic_nameservice_nameaction_namenode_name の先頭に / が含まれている場合は、manager.confの ctlr_flt_ids にも / を入力してください。

2.3. intdash ROS2Bridgeの設定を行う

intdash ROS2Bridgeの設定は、yaml形式の設定ファイルで行います。設定項目の詳細については、 intdash ROS2Bridgeの設定 を参照してください。

2.3.1. エッジデバイス1の設定

エッジデバイス1では以下のような設定ファイルを用意します。以下の設定ファイルは後述するサンプルで使用します。

num_callback_threads: 15

upstream:
  enabled: true
  formats:
  - format: "cdr"
    writer:
      path: "/var/run/intdash/logger_001.tx"
      buffering: true
  - format: "json"
    writer:
      path: "/var/run/intdash/logger_002.tx"
      max_array_size: 100
downstream:
  enabled: true
  format: "cdr"
  reader:
    path: "/var/run/intdash/logger_001.rx"

action_servers:
  enabled: true
  actions:
  - action_name: "/fibonacci"
    action_type: "example_interfaces/action/Fibonacci"
    format:
      - "cdr"
      - "json"

parameter_service_servers:
  enabled: true
  nodes:
  - node_name: "/minimal_action_server"
    format:
    - "cdr"
    - "json"

service_servers:
  enabled: true
  services:
  - service_name: "/add_two_ints"
    service_type: "example_interfaces/srv/AddTwoInts"
    format:
      - "cdr"
      - "json"

subscribers:
  enabled: true
  topics:
  - topic_name: "/chatter"
    format:
    - "cdr"
    - "json"

2.3.2. エッジデバイス2の設定

エッジデバイス2では以下のような設定ファイルを用意します。以下の設定ファイルは後述するサンプルで使用します。

注釈

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

num_callback_threads: 15

upstream:
  enabled: true
  formats:
  - format: "cdr"
    writer:
      path: "/var/run/intdash/logger_001.tx"
      buffering: true
  - format: "json"
    writer:
      path: "/var/run/intdash/logger_002.tx"
      max_array_size: 100
downstream:
  enabled: true
  format: "cdr"
  reader:
    path: "/var/run/intdash/logger_001.rx"

action_clients:
  enabled: true
  actions:
  - action_name: "/fibonacci"
    action_type: "example_interfaces/action/Fibonacci"
    format:
      - "cdr"

parameter_clients:
  enabled: true
  nodes:
  - node_name: "/minimal_action_server"
    format:
    - "cdr"
    - "json"

service_clients:
  enabled: true
  response:
    resend_duration: "10sec"
    resend_interval: "1sec"
  services:
  - service_name: "/add_two_ints"
    service_type: "example_interfaces/srv/AddTwoInts"
    format:
      - "cdr"
      - "json"

publishers:
  enabled: true

2.4. intdash ROS2Bridgeとintdash Edge Agentを起動する

エッジデバイス1(および必要な場合はエッジデバイス2)で、intdash ROS2Bridgeとintdash Edge Agentを起動します。

  1. intdash Edge Agentを起動します。

    $ sudo \
    LD_LIBRARY_PATH=/opt/vm2m/lib \
    INTDASH_EDGE_UUID=エッジデバイス 1の UUID \
    INTDASH_EDGE_SECRET=エッジデバイス 1の シークレット \
    INTDASH_EDGE_SERVER=dummy.intdash.jp \
    INTDASH_EDGE_APPDIR=/var/lib \
    INTDASH_EDGE_RUNDIR=/var/run \
    INTDASH_EDGE_BINDIR=/opt/vm2m/bin \
    INTDASH_EDGE_SBINDIR=/opt/vm2m/sbin \
    INTDASH_EDGE_LIBDIR=/opt/vm2m/lib \
    INTDASH_EDGE_CONFDIR=/etc/opt/intdash \
    /opt/vm2m/sbin/intdash-edge-manager -C manager.conf
    
  2. 以下のいずれかの方法でintdash ROS2Bridgeを起動します。 起動時にネームスペースを指定することもできます。

    • ros2 run で起動する場合、以下のコマンドを実行します。

      • ネームスペースを指定しない場合

        $ ros2 run intdash_ros2bridge intdash_ros2bridge --ros-args -p config_path:=path_to_config_file
        
      • ネームスペースを指定する場合

        $ ros2 run intdash_ros2bridge intdash_ros2bridge --ros-args -p config_path:=path_to_config_file -r  __ns:=/namespace
        
    • 事前に用意されているlaunchファイルを使う場合は以下のコマンドを実行します。

      • ネームスペースを指定しない場合

        $ ros2 launch intdash_ros2bridge intdash_ros2bridge.launch.py config_path:=path_to_config_file
        
      • ネームスペースを指定する場合

        $  ros2 launch intdash_ros2bridge intdash_ros2bridge.launch.py config_path:=path_to_config_file namespace:=/namespace
        
    • コンポーネントを使用する場合、まずコンポーネントを起動します。

      $ ros2 run rclcpp_components component_container
      

      次に、intdash ROS2Bridgeをロードします。

      • ネームスペースを指定しない場合

        $ ros2 component load /ComponentManager intdash_ros2bridge -p config_path:=/ws/src/intdash_ros2bridge/test/system_test/action/config/cdr/action_server.yaml intdash_ros2bridge::IntdashRos2Bridge
        
      • ネームスペースを指定する場合

        $ ros2 component load /ComponentManager intdash_ros2bridge -p config_path:=path_to_config_file -r __ns:=/namespace intdash_ros2bridge::IntdashRos2Bridge
        
    • ユーザー自身が作成したlaunchファイルからintdash_ros2bridgeのlaunchファイルを呼び出す場合は場合は以下のように記述します。

      • ネームスペースを指定しない場合

        from launch import LaunchDescription
        from launch.actions import IncludeLaunchDescription
        from launch.actions import LogInfo
        from launch.launch_description_sources import PythonLaunchDescriptionSource
        from launch.substitutions import ThisLaunchFileDir
        
        def generate_launch_description():
            return LaunchDescription([
                IncludeLaunchDescription(
                    PythonLaunchDescriptionSource(
                        [ThisLaunchFileDir(), '/intdash_ros2bridge.launch.py']
                    ),
                    launch_arguments=
                        {'config_path': '/ws/src/intdash_ros2bridge/config/sample1.yaml'}.items()
                ),
            ])
        
      • ネームスペースを指定する場合

        from launch import LaunchDescription
        from launch.actions import IncludeLaunchDescription
        from launch.actions import LogInfo
        from launch.launch_description_sources import PythonLaunchDescriptionSource
        from launch.substitutions import ThisLaunchFileDir
        
        def generate_launch_description():
            return LaunchDescription([
                IncludeLaunchDescription(
                    PythonLaunchDescriptionSource(
                        [ThisLaunchFileDir(), '/intdash_ros2bridge.launch.py']
                    ),
                    launch_arguments=
                        {'config_path': '/ws/src/intdash_ros2bridge/config/sample1.yaml',
                        'namespace':'/namespace'}.items()
                ),
            ])
        

    intdashサーバーを仲介したデータ送受信が開始されます。