2. インストールと起動¶
2.1. intdash Edge Agentとintdash ROS2Bridge をインストールする¶
intdash ROS2Bridge を使用するには、intdash Edge Agentとintdash ROS2Bridgeをエッジデバイスインストールする必要があります。
2.1.1. intdash Edge Agentをインストールする¶
intdash Edge Agentをインストールするには、アプトポッドのリポジトリからパッケージを取得します。
以下のようにコマンドを実行し、アプトポッドのリポジトリを取得元として追加します。
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デベロッパーガイド を参照してください。
以下のコマンドを実行してintdash Edge Agentをインストールします。
$ sudo apt-get install intdash-edge
2.1.2. intdash ROS2Bridgeをインストールする¶
intdash ROS2Bridgeをインストールするには、アプトポッドのリポジトリからパッケージを取得します。
以下のようにコマンドを実行し、アプトポッドのリポジトリを取得元として追加します。
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
以下のコマンドを実行してintdash ROS2Bridgeをインストールします。
$ sudo apt-get install ros-foxy-intdash-ros2bridge
intdash ROS2Bridgeは以下のパスにインストールされます。
/opt/ros/foxy/share/intdash_ros2bridge
2.2. intdash Edge Agentの設定を行う(manager.conf)¶
2.2.1. デバイスコネクターの設定¶
intdash Edge Agentに、intdash ROS2Bridgeと接続するための設定を追加します。
注釈
intdash Edge Agentの設定の詳細については、 intdash Edge Agentデベロッパーガイド を参照してください。
manager.conf全体の例は、 付録:intdash Edge Agent用manager.confのサンプル を参照してください。
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_name
、 service_name
、 action_name
、 node_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を起動します。
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
以下のいずれかの方法で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サーバーを仲介したデータ送受信が開始されます。