やりたいこと
PC-AとPC-BでNodeを動かして、PCをまたいで通信させたい
作業段取り
PC-A機
- ROS2インストール
- ROS2で、sender・receiverモジュールを実装する
- sender module
- メッセージを送信し続ける
- receiver module
- メッセージを受信し続ける
- sender module
- ROS2でpackage化する
PC-B機
- ROS2インストール
- Reciver module packageをインストール
PC-A機/PC-B機
- ROS2通信をセットアップ
- Sender/Receiver moduleで通信させる
インストール
- Ubuntu22.04を用意する
- ROS2をaptでインストール
プログラム確認
実質、send moduleとreceive moduleの確認
demo_nodes_py として、サンプルが存在している。
送信側
ros2 run demo_nodes_py talker
受信側
ros2 run demo_nodes_py listener
実行結果
上段がtalker、下段がlistnerの出力結果
[INFO] [1722148649.885563864] [talker]: Publishing: "Hello World: 43"
[INFO] [1722148650.885543004] [talker]: Publishing: "Hello World: 44"
[INFO] [1722148651.885587654] [talker]: Publishing: "Hello World: 45"
[INFO] [1722148649.888894554] [listener]: I heard: [Hello World: 43]
[INFO] [1722148650.888615317] [listener]: I heard: [Hello World: 44]
[INFO] [1722148651.888136696] [listener]: I heard: [Hello World: 45]
これで、想定していた送受信の準備が整った。ちなみに、プログラム本体は以下のところに配置
/opt/ros/humble/lib/python3.10/site-packages/demo_nodes_py/topics
Pythonなので、listner.pyやtalker.pyをエディタで開けば、プログラムを確認できる
DDSの設定
インストールした状態だと、RTPSが設定済
書かれている通り、ROS_DOMAIN_IDを設定すれば、同一サブネット内で通信される
export ROS_DOMAIN_ID=11
PC-AとPC-BからTalkerを動かして、PC-AでListnerを動かすと、このような出力
PC-A Talker
[INFO] [1722152977.610636752] [talker]: Publishing: "Hi, I am PC-A: 79"
[INFO] [1722152978.610479115] [talker]: Publishing: "Hi, I am PC-A: 80"
[INFO] [1722152979.611647554] [talker]: Publishing: "Hi, I am PC-A: 81"
PC-B Talker
[INFO] [1722152978.198109339] [talker]: Publishing: "Hello, I am PC-B: 21"
[INFO] [1722152979.198202274] [talker]: Publishing: "Hello, I am PC-B: 22"
[INFO] [1722152980.198333266] [talker]: Publishing: "Hello, I am PC-B: 23"
PC-A Listener
[INFO] [1722152977.612724374] [listener]: I heard: [Hi, I am PC-A: 79]
[INFO] [1722152978.203141011] [listener]: I heard: [Hello, I am PC-B: 21]
[INFO] [1722152978.612624961] [listener]: I heard: [Hi, I am PC-A: 80]
[INFO] [1722152979.202909262] [listener]: I heard: [Hello, I am PC-B: 22]
[INFO] [1722152979.613337310] [listener]: I heard: [Hi, I am PC-A: 81]
[INFO] [1722152980.203578031] [listener]: I heard: [Hello, I am PC-B: 23]
とりあえず、やりたいことの前半はできた感じ。何もしなくても通信するのは、想定外の結果。ただ、サブネット上に影響を与えそうなところが気になった(気にしない)。と、思ったら、ROS_LOCALHOST_ONLYがあった。1を設定すると、localhostに絞られる模様
export ROS_LOCALHOST_ONLY=1
今日はここまで