複数 PC に分散したノードの ROS を使った通信

Jetsonを導入したことで,ロボットにくっついているPCが二つになりました.
今までもマイコンは使っていたのですが,マイコンとPCはシリアル通信だったので複数のPCに散らばったROSノードをくっつけるという作業をするのは今回が初めてになります.きっとはまるんだろうな...と思っていたのですが,ROSのチュートリアルを読みながら進めると意外とすんなりと行きました.

ROS/NetworkSetup - ROS Wiki

ROS/Tutorials/MultipleMachines - ROS Wiki

具体的には,添付のスライドのJetsonとINTELPCをつなぐ部分に当たります.

f:id:rkoichi2001:20170702141622p:plain

で、簡単にできたんですが、ちょっとメモって置かないと忘れそうだったので備忘録を残しておきます。

0. ネットワーク環境のセットアップ

それぞれのPCに固定IPアドレスを割り振ります。/etc/network/interfacesを上書きする方法しか知らなかったのですが、これ超めんどくさいので、GUIでなんとかならないかなと思って調べてたんですが、できました。あと、WiredのポートをROSの通信に使って、Wirelessの通信でインターネットにつなげたかったのですが、これもどうにか解決しました。画面右上のネットワーク関連のマークを右クリックして、そこからGUIで設定していけば完結しました。

f:id:rkoichi2001:20170702144336p:plain

上記のNetwork Connections画面でAddしていく感じですが、対象のボードのMACアドレスEthernetのDeviceコンボボックスから選べるので、ここで選択します。で、次にIPV4設定タブに移って、MethodをManualにして、設定したいIPアドレスを追加します。このときに、AddressとNetmaskだけ指定してGatewayは空白にして設定を完了します。これで固定IPのWiredとDHCPのWirelessが共存してネットも繋がるようになりました。ちなみに、これは正しいかわかんないんですが、/etc/network/interfacesの記述は全部コメントアウトしました。

1.SSH環境のセットアップ

おそらく、マスタのPCからスレーブにログインしていろいろと操作をする形になるのかなと思います。なので、リモートログインできるようにスレーブ側にSSHを入れておきます。いれて再起動すれば、ポートを開けて待っててくれました。

sudo apt-get install openssh-server

2.ホスト名の解決

IPアドレスで毎回入れるのも辛いので、それぞれのパソコンにホスト名解決のためにIPアドレス・ホスト名の対を記述します。/etc/hostsファイルにl,0で決めたIPアドレスとそのアドレスのPCの名前の対を記述します。

10.0.0.10 master_pc
10.0.0.20 slave_pc

みたいな感じです。ここで登録しとけば、sshでつなぐ時とかにもtab補完で教えてくれます。

3. PINGで通信の確認。

マスターからスレーブ、スレーブからマスタへPINGをうって、通信確認。

4. ROSノードの起動

複数PCがあっても、ROSのマスタはひとつ出なければいけないので、マスタとなるPC上でroscoreします。

マスタ側でやること。

roscore実行
roscore
システム上で、どいつがマスタか宣言、あと自分のIPをROSに伝える。
export ROS_MASTER_URI=http://master_pc:11311
export ROS_IP=10.0.0.10
roslaunch hogehogemaster.launch

スレーブ側でやること。(SSHでリモートログインすると仮定してます。)

sshログイン
ssh xxxx@slave_pc
(パスワード入力)
export ROS_MASTER_URI=http://master_pc:11311
export ROS_IP=10.0.0.20
roslaunch hogehogeslave.launch

5. Jetsonでステレオの視差計算を実施して、マスタで描画。


f:id:rkoichi2001:20170702164017p:plain

ということで,ひとまずできました.上記添付写真を見てもわかる通り,JETSON使うとステレオの視差計算が自分のPCでやるよりだいぶ早くなりました!
大体10FPS位出てます.能力的にはまだ余裕ありそうなので,どこまでをJETSONの役割にするか,考えてみます.JETSONの性能とか,細かいとこはまた後日エントリで書きます.
うーん.やっぱりやること多すぎで間に合わないな...