背景
ROSとは、ロボットの制御に便利な仕組みを提供してくれるプログラムです。ロボットの情報(センサ情報など)を配信するようにプログラムを作っておくと、他のROSのプログラムがその情報を参照できます。
何もしなければセンサの情報は他のPCで確認できないようなのですが、 設定を行なえば、他のPCでも値を参照できます。
この方法が分かるまでに時間を取られたので、記事としてまとめて共有します。
使ったもの
ROSをインストールしたPCを2台用意します。この記事では、こちらの2つのPCを使いました。
- ロボットのPC
Raspberry PiのRaspbianにROS(Merodic)をインストールして、ロボットに取り付けました。 - 手元のPC
ノートPCのUbuntuにROSをインストールして、遠隔操作装置として動かしました。
方法
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 datarostopic
0 件のコメント :
コメントを投稿