3. チュートリアルA: intdash Bridgeを使って2つのROS空間を接続する¶
このチュートリアルでは、intdash Bridge、intdash Edge Agent、intdashサーバーを使用することにより、インターネットを介して2つのROS空間を接続します。
publisherとsubscriberの例として、 ROS公式チュートリアル のtalkerとlistenerを使用します。
送信側のROS空間では、talkerが"chatter"というトピックにROSメッセージをパブリッシュします。
受信側のROS空間では、listenerが、同じく"chatter"というトピックをサブスクライブします。
3.1. 送信側エッジを準備する¶
送信側の環境に、 使用方法 の手順に従ってintdash Edge Agentおよびintdash Bridgeをインストールしてください。 その上で、以下のように設定を行います。
3.1.1. ROSノードを設定する¶
以下のコマンドを実行し、ワークスペースとなるディレクトリを作成します
$ mkdir -p ~/catkin_ws/src
ワークスペース内に、beginner_tutorialsパッケージを作成します。
$ cd ~/catkin_ws $ cd src/ $ catkin_create_pkg beginner_tutorials
ROS公式チュートリアルのtalkerノードのスクリプトをワークスペースにダウンロードします。
$ cd beginner_tutorials/ $ mkdir scripts $ cd scripts/ $ wget \ https://raw.github.com/ros/ros_tutorials/indigo-devel/rospy_tutorials/001_talker_listener/talker.py $ chmod +x talker.py
ビルドを実行します。
$ cd ~/catkin_ws/ $ catkin_make
launchファイル(
~/catkin_ws/sender.launch
)を作成し、talkerノードとintdash_bridgeノードの起動を以下のように設定します。パラメーター
fifo_tx_raw
では、intdash Bridgeからintdash Edge Agentにデータを渡すためのFIFO(logger_001.tx)を設定しています。sender.launch
<launch> <node name="talker" pkg="beginner_tutorials" type="talker.py" /> <arg name="paramsfile" default="/opt/vm2m/etc/params.yaml" /> <group ns="intdash"> <node pkg="intdash_bridge" name="intdash_bridge" type="intdash_bridge_node" output="screen" clear_params="true"> <param name="fifo_tx_raw" value="/opt/vm2m/var/run/intdash/logger_001.tx" /> <param name="fifo_rx_raw" value="" /> <param name="fifo_tx_json" value="" /> <rosparam command="load" file="$(arg paramsfile)" /> </node> </group> </launch>
3.1.2. 送信側intdash Edge Agentを設定する¶
intdash Edge Agentの設定ファイルmanager.confで、以下のように設定します。
主な設定内容:
送信側エッジの認証情報(クライアントシークレット)とUUID(
my_secret
とmy_id
)intdashサーバーのホスト名+ドメイン名(FQDN) (
host
)受信側エッジのUUID(
dst_id
)intdash Bridgeからデータを受け取るFIFO(
logger_001.tx
を使用し、チャンネル1を付与)
注釈
旧来のエッジの認証情報(トークン)を使用する場合は、 my_secret
の代わりに my_token
をご使用ください。
manager.conf
{
"manager":{
"workdirs":[
"/opt/vm2m/var/lib/intdash/meas",
"/opt/vm2m/var/run/intdash"
],
"rawdir":"/opt/vm2m/var/lib/intdash/raw",
"meas_root":"/opt/vm2m/var/lib/intdash/meas",
"basetime":"/opt/vm2m/var/run/intdash/basetime",
"stat":"/opt/vm2m/var/run/intdash/manager.stat",
"system_stat":"/opt/vm2m/var/run/intdash/system.stat",
"process_stat":"/opt/vm2m/var/run/intdash/process.stat",
"wwan_stat":"/opt/vm2m/var/run/intdash/wwan.stat",
"filters":[]
},
"clients":[
{
"protocol":"mod_websocket.v2",
"type":"realtime",
"my_secret":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"my_id":"XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"connection":{
"host":"xxxxxxx.intdash.jp",
"path":"/api/v1/ws/measurements"
},
"dst_id":[
"YYYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY"
],
"fifo_rx":"/opt/vm2m/var/run/intdash/client_realtime.rx",
"fifo_tx":"/opt/vm2m/var/run/intdash/client_realtime.tx",
"path":"/opt/vm2m/sbin/intdash-edge-client",
"stat":"/opt/vm2m/var/intdash/client_realtime.stat",
"fast_net_check_cmd":"/opt/vm2m/bin/intdash-edge-networkd.sh -q -t"
},
{
"protocol":"mod_http",
"type":"resend",
"my_secret":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"my_id":"XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"connection":{
"host":"xxxxxxx.intdash.jp",
"path":"/api/v1/measurements"
},
"fifo_rx":"/opt/vm2m/var/run/intdash/client_resend.rx",
"fifo_tx":"/opt/vm2m/var/run/intdash/client_resend.tx",
"path":"/opt/vm2m/sbin/intdash-edge-client",
"stat":"/opt/vm2m/var/run/intdash/client_resend.stat",
"fast_net_check_cmd":"/opt/vm2m/bin/intdash-edge-networkd.sh -q -t"
}
],
"loggers":[
{
"devicetype":"intdash_bridge",
"path":"",
"connections":[
{
"fifo_tx":"/opt/vm2m/var/run/intdash/logger_001.tx",
"channel":1
}
],
"details":{
"plugin":"fifo"
}
}
]
}
3.1.3. 送信側intdash Bridgeを設定する¶
intdash Bridge用パラメーター設定ファイル( /opt/vm2m/etc/params.yaml
)を以下のように作成します。
ここでは、トピック "/chatter"を、rawモードでintdashに送信するように設定しています。
params.yaml
outgoing:
enabled: true
buffering: false
advertise_interval: 5
max_array_size: 500
topics:
- topic_name: "/chatter"
send_mode: "raw"
queue_size: 100
incoming:
enabled: false
queue_size: 100
suffix: ""
3.2. 受信側エッジを準備する¶
受信側の環境にも、 使用方法 の手順に従ってintdash Edge Agentおよびintdash Bridgeをインストールしてください。 その上で、以下のように設定を行います。
3.2.1. ROSノードを設定する¶
以下のコマンドを実行し、ワークスペースとなるディレクトリを作成します
$ mkdir -p ~/catkin_ws/src
ワークスペース内に、beginner_tutorialsパッケージを作成します。
$ cd ~/catkin_ws $ cd src/ $ catkin_create_pkg beginner_tutorials
ROS公式チュートリアルのlistenerノードのスクリプトをワークスペースにダウンロードします。
$ cd beginner_tutorials/ $ mkdir scripts $ cd scripts/ $ wget \ https://raw.github.com/ros/ros_tutorials/indigo-devel/rospy_tutorials/001_talker_listener/listener.py $ chmod +x listener.py
ビルドを実行します。
$ cd ~/catkin_ws/ $ catkin_make
launchファイル(
~/catkin_ws/receiver.launch
)を作成し、listenerノードとintdash_bridgeノードの起動を以下のように設定します。パラメーター
fifo_rx_raw
では、intdash Bridgeがintdash Edge Agentからデータを受け取るためのFIFO(logger_001.rx)を設定しています。receiver.launch
<launch> <node name="listener" pkg="beginner_tutorials" type="listener.py" output="screen" /> <arg name="paramsfile" default="/opt/vm2m/etc/params.yaml" /> <node pkg="intdash_bridge" name="intdash_bridge" type="intdash_bridge_node" output="screen" clear_params="true"> <param name="fifo_tx_raw" value="" /> <param name="fifo_rx_raw" value="/opt/vm2m/var/run/intdash/logger_001.rx" /> <param name="fifo_tx_json" value="" /> <rosparam command="load" file="$(arg paramsfile)" /> </node> </launch>
3.2.2. 受信側intdash Edge Agentを設定する¶
intdash Edge Agentの設定ファイルmanager.confで、以下のように設定します。
主な設定内容:
受信側エッジの認証情報(クライアントシークレット)とUUID(
my_secret
とmy_id
)送信側エッジのUUID(
ctlr_id
)intdashサーバーのホスト名+ドメイン名(FQDN) (
host
)intdashから受け取るデータの設定(
ctlr_filts
)intdash Edge Agentからintdash Bridgeにデータを渡すためのFIFO(チャンネル1のデータを、
logger_001.rx
に渡す)
注釈
旧来のエッジの認証情報(トークン)を使用する場合は、 my_secret
の代わりに my_token
をご使用ください。
manager.conf
{
"manager":{
"meas_root":"/opt/vm2m/var/intdash/meas",
"rawdir":"/opt/vm2m/var/intdash/raw",
"basetime":"/opt/vm2m/var/intdash/basetime",
"stat":"/opt/vm2m/var/intdash/manager.stat",
"logger_stat":"/opt/vm2m/var/intdash/logger_%03hhu.stat",
"process_stat":"/opt/vm2m/var/intdash/process.stat",
"intdash_stat":"/opt/vm2m/var/intdash/intdash.stat",
"network_stat":"/opt/vm2m/var/intdash/network.stat",
"system_stat":"/opt/vm2m/var/intdash/system.stat",
"wwan_stat":"/opt/vm2m/var/intdash/wwan.stat",
"workdirs":[
"/opt/vm2m/var/lib/intdash/meas",
"/opt/vm2m/var/run/intdash"
],
"filters":[]
},
"clients":[
{
"path":"/opt/vm2m/sbin/intdash-edge-client",
"protocol":"mod_websocket.v2",
"type":"control",
"fifo_rx":"/opt/vm2m/var/intdash/client_control.rx",
"fifo_tx":"/opt/vm2m/var/intdash/client_control.tx",
"stat":"/opt/vm2m/var/intdash/client_control.stat",
"my_secret":"YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY",
"my_id":"YYYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY",
"connection":{
"host":"xxxxxxxx.intdash.jp",
"port":443,
"path":"/api/v1/ws/measurements",
"ca":"/opt/vm2m/etc/ssl/certs/cacert.pem",
"ssl":"secure",
"opts":[]
},
"ctlr_id":"XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"ctlr_flts":[
{
"channel":1,
"dtype":14,
"ids":[
"/chatter"
]
}
]
}
],
"loggers":[
{
"devicetype":"system",
"path":"",
"connections":[
{
"channel":255
}
],
"details":{
"plugin":"status",
"plugin_dir":"/opt/vm2m/lib/plugins",
"plugin_arg":{
"mc7430_cli":"/opt/vm2m/sbin/mc7430_cli",
"stintd":{
"meas_root":"/opt/vm2m/var/intdash/meas"
},
"stsys":{
"storage_dir":"/"
}
}
}
},
{
"connections":[
{
"fifo_rx":"/opt/vm2m/var/run/intdash/logger_001.rx",
"channel":1
}
],
"details":{
"plugin":"fifo"
}
}
]
}
注釈
受信するデータの指定
上記の例のとおり、受信するデータはControlクライアントに関する設定の ctlr_flts
で指定しています。
dtype
では、受信するデータのiSCPデータタイプを十進法で指定します。上の設定で指定されている14
はデータタイプ「Bytes」を指します。ids
では、受信するデータIDを指定します。
3.2.3. 受信側intdash Bridgeを設定する¶
intdash Bridge用パラメーター設定ファイル( /opt/vm2m/etc/params.yaml
)を以下のように作成します。
intdash Bridgeは、intdash Edge Agentから受け取ったメッセージをすべてROS空間へパブリッシュするため、トピックの指定は必要ありません。
params.yaml
outgoing:
enabled: false
incoming:
enabled: true
queue_size: 100
suffix: ""
3.3. メッセージの送信を開始する¶
送信側エッジと受信側エッジをそれぞれ起動します。
送信側
ワークスペースで setup.bash
を実行することによりワークスペースの設定を有効にし、 roslaunch
によりtalkerと送信側intdash Bridgeを起動します。
$ cd ~/catkin_ws
$ source devel/setup.bash
$ roslaunch sender.launch
別のターミナルで、以下のコマンドを実行してintdash Edge Agentを起動します。
$ sudo LD_LIBRARY_PATH=/opt/vm2m/lib /opt/vm2m/sbin/intdash-edge-manager -C manager.conf
受信側
ワークスペースで setup.bash
を実行することによりワークスペースの設定を有効にし、 roslaunch
によりlistenerと受信側intdash Bridgeを起動します。
$ cd ~/catkin_ws
$ source devel/setup.bash
$ roslaunch receiver.launch
別のターミナルで、以下のコマンドを実行してintdash Edge Agentを起動します。
$ sudo LD_LIBRARY_PATH=/opt/vm2m/lib /opt/vm2m/sbin/intdash-edge-manager -C manager.conf
受信側で以下のような出力が出力されれば成功です。
[INFO] [1624435399.116440641]: Upstream disabled.
[INFO] [1624435399.117253533]: Downstream enabled.
[INFO] [1624435399.612276354]: Advertising to /chatter
[INFO] [1624435399.706018]: /listenerI heard hello world 1624435399.67
[INFO] [1624435399.809872]: /listenerI heard hello world 1624435399.77