複数 PC に分散したノードの ROS を使った通信
Jetsonを導入したことで,ロボットにくっついているPCが二つになりました.
今までもマイコンは使っていたのですが,マイコンとPCはシリアル通信だったので複数のPCに散らばったROSノードをくっつけるという作業をするのは今回が初めてになります.きっとはまるんだろうな...と思っていたのですが,ROSのチュートリアルを読みながら進めると意外とすんなりと行きました.
ROS/Tutorials/MultipleMachines - ROS Wiki
具体的には,添付のスライドのJetsonとINTELPCをつなぐ部分に当たります.
で、簡単にできたんですが、ちょっとメモって置かないと忘れそうだったので備忘録を残しておきます。
0. ネットワーク環境のセットアップ
それぞれのPCに固定IPアドレスを割り振ります。/etc/network/interfacesを上書きする方法しか知らなかったのですが、これ超めんどくさいので、GUIでなんとかならないかなと思って調べてたんですが、できました。あと、WiredのポートをROSの通信に使って、Wirelessの通信でインターネットにつなげたかったのですが、これもどうにか解決しました。画面右上のネットワーク関連のマークを右クリックして、そこからGUIで設定していけば完結しました。
上記の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補完で教えてくれます。
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
5. Jetsonでステレオの視差計算を実施して、マスタで描画。
ということで,ひとまずできました.上記添付写真を見てもわかる通り,JETSON使うとステレオの視差計算が自分のPCでやるよりだいぶ早くなりました!
大体10FPS位出てます.能力的にはまだ余裕ありそうなので,どこまでをJETSONの役割にするか,考えてみます.JETSONの性能とか,細かいとこはまた後日エントリで書きます.
うーん.やっぱりやること多すぎで間に合わないな...