それでは行ってみましょう.
システム例
ラズパイでコントロールできるような車をROSで制御するというのはなるほどなかなか面白そうです.
Smart Video Car kit購入しました - yayu_daemanのブログ
ROSとArduinoの通信
ということで,ROSとArduinoとをうまく通信させる必要があります.
rosserialのインストール
今のところメモでしか無いですが以下のようにrosserialパッケージをダウンロードすることで通信することが可能です.
ossyaritoori.hatenablog.com
異なるデバイスのROS同士の接続
もちろんROS同士の通信もサポートされています.
こいつはロボットを走行させている時に,他のPCから様子をリアルタイムで確認したりデータを逐次チェックしたりするのに使えます.もちろんリモート制御も可能.
普段はROSの公式ページを貼るところなんですがこれに限っては以下の日本語のサイトが非常にわかりやすいです.
ROS 使い方メモ -- ROS ネットワーキング
手順としては以下の3つになります.
ここでは例えば,roscoreを走らせる側をhost,そうでない側をclientと定義します.
以下の設定は基本的には両方の側で設定する必要があります.
ネットワークの設定と確認
まずifconfigなどで同じローカル回線にいるか確認します.
次に/etc/hosts というファイルの設定を変更して例えば
sudo gedit /etc/hosts
としてファイルを開いた後,
<host ip address> host <client ip address> client
のような一文を書き加えます.
これで192.168.12.xxと入力する代わりにhostとclientとうつことができます.
これは必須ではないのですがいちいち192.168.12.xxみたいなのを打ち込むよりよっぽど間違いが少ないです.
できることならDHCPでアドレスが変わることのないようmanualでipを設定できるようにすると良いでしょう.
なお,この設定はhost側とclient側の両方でやっておくことをおすすめします.
ROSの設定
ホスト側の設定
以下のような変数を定義します.
export ROS_MASTER_URI=http://host:11311 export ROS_HOSTNAME=host
上の定義は違う端末のROS同士がコミュニケーションする際に必須で,
下の定義は実際にデータをやり取りするときに必要になるようです.
これらはプログラムを実行するターミナル毎に必要ですのでbashrcに書いておくのがよいでしょう.
ハマった罠とか
とりあえず,ROS_MASTER_URIはきちんと設定しないと通信がまずできません.
その後,ROS_HOSTNAMEを持っていないとrostopic listは見れるのにechoができないとかいうことになります.
困った時はチュートリアルとGoogleで頑張って.
ROS/Tutorials/MultipleMachines - ROS Wiki
参考になりそうな書籍
ArduinoとMATLABで制御系設計をはじめよう!実験キット-Physical Computing Lab
- 出版社/メーカー: TechShare(テックシェア)
- メディア:
- この商品を含むブログを見る
- 作者: 牧野浩二
- 出版社/メーカー: 東京電機大学出版局
- 発売日: 2015/07/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
- 作者: 上田隆一
- 出版社/メーカー: 日経BP社
- 発売日: 2017/03/30
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 作者: Morgan Quigley,Brian Gerkey,William D. Smart
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2015/12/25
- メディア: ペーパーバック
- この商品を含むブログを見る