2018年6月21日木曜日

ROSが配信する情報を別のPCのROSで確認する方法


背景

ROSとは、ロボットの制御に便利な仕組みを提供してくれるプログラムです。
ロボットの情報(センサ情報など)を配信するようにプログラムを作っておくと、他のROSのプログラムがその情報を参照できます。

何もしなければセンサの情報は他のPCで確認できないようなのですが、 設定を行なえば、他のPCでも値を参照できます。
この方法が分かるまでに時間を取られたので、記事としてまとめて共有します。

使ったもの

ROSをインストールしたPCを2台用意します。
この記事では、こちらの2つのPCを使いました。

方法

IPアドレスを使う場合


まず、ロボットのPCで下記のコマンドを実行して、IPアドレスを調べます。
ifconfig


この記事では、このとき確認できた192.168.0.15を例に説明を進めます。

ロボットのPCで、先ほど確認したIPをROS_IPに指定して、roscoreを実行します。
export ROS_IP=192.168.0.15
roscore


roscoreを実行したら、ロボットのPCで別のターミナルを起動して、先ほどと同様にROS_IPを指定して、情報の配信(publish)を行うプログラムを実行します。
この記事では、/rosoutに「Hello from ROS on robot」というメッセージを1秒ごとに配信するコマンドを実行します。
export ROS_IP=192.168.0.15
rostopic pub /rosout rosgraph_msgs/Log -r 1 '{msg: "Hollo from ROS on robot"}'
 配信を行うプログラムの実行時にROS_IPを指定しないと、手元のPCのROSで「rostopic list」で一覧は見れるのに、「rostopic echo」で情報は見れないという状態になるので注意が必要です。

 

ロボットのPCでROS_IPを指定して配信できたら、手元のPCでROS_MASTER_URIを指定して購読(subscribe)します。
export ROS_MASTER_URI=http://192.168.0.15:11311
rostopic echo /rosout


うまくいくと、ロボットのPCのROSで配信している「Hello from ROS on robot」を確認できます。

hostnameを使う場合

先ほどはIPでやり取りする方法を紹介しましたが、環境によっては同様のやりとりができます。
(記事を書いている時点の自分の知っている情報では、Wiindowsだとhostnameでアクセスできません。そのため、LinuxやMacならこの方法は使えると思いますが、WindowsPCを介する場合はこの方法は使えないと思います。)

ロボットのPCのホスト名を調べます。
cat /etc/hostname


ロボットのPCで、ホスト名をROS_IPに指定してroscoreを実行します。
export ROS_IP=raspberrrypi.local
roscore

ロボットのPCの別のターミナルで、ROS_IPを先ほどと同様に指定して、配信プログラムを実行します。
export ROS_IP=raspberrypi.local
rostopic pub /rosout rosgraph_msgs/Log -r 1 '{msg: "Hollo from ROS on robot"}'

手元のPCでROS_MASTER_URIを指定して、購読します。
export ROS_MASTER_URI=http://raspberrypi.local:11311
rostopic echo /rosout

うまくいくと、ロボットのPCで配信しているrosgraph_msgを手元のPCで確認できます。

余談: ROSの情報を公開したくない場合

ロボットのPCで実行するROSのIPをlocalhostにすると、外部に配信されなくなります。
export ROS_IP=localhost
roscore

まとめ

ロボットのPCで動かすROSの情報を手元のPCで確認できました。
開発が捗りそうです。

参考になれば嬉しいです。

参考

ROS remote master: can see topics but no data
rostopic

0 件のコメント :