Raspberry Pi MouseのROSコマンド確認


こんにちは!佐藤です。
アールティでブログを書くのにもだんだん慣れてきました。

前回はxacroファイルでモデルの形だけではなく重さなど詳細情報も含めて定義しました。
これから先は実際に動かす方法を踏まえつつ各種ファイルを用意していく必要があります。

概要

今回は実際のraspimouseと同様に操作するためのコマンドの確認を行っていきます。

実機が動くことは大変嬉しいことですが、やはり準備が大変です。
特にROSのインストールに関してはある程度慣れていても多少時間がかかってしまいます。
そこで、シミュレータで簡単に動作確認を行った上で、実機にスムーズに移行できるようにするためにシミュレーション用のモデルの作成を行っています。

どのような方法で制御すればよいのかを確認し、次回以降それらをシミュレーションモデルに実装できるように準備を行います。

ROSではノード(ROSパッケージ内の実行ファイル)に対してトピック(ノード同士でやりとりをするデータや指令)を送受信します。

ROS_CRANE_6_1
ROSを使用したCRANE+の動かし方 その6 | RT Robot Shop Blog より画像引用

またまた手前味噌で恐縮ですが、ノードとトピックについてもRT SHOP BLOGの方に詳しく書かれていますのでそちらをご参照ください。

ROSを使用したCRANE+の動かし方 その6 | RT Robot Shop Blog
http://www.rt-shop.jp/blog/archives/6664

準備

操作はROSがインストールされたUbuntuのPCを使用します。
今回はUbuntu 14.04 64bitをインストールしたdynabook R73/W4Mを使用しています。

Raspberry Pi MouseにもROSがインストールされた状態で使用します。
今回はUbuntu 14.04をインストールしたRaspberry Pi 2 Model Bを使用します。

ROSのインストール方法は様々なところに書かれていますのでその一部をご紹介します。

ROS Indigo の Ubuntu へのインストール – ROS.org
http://wiki.ros.org/ja/indigo/Installation/Ubuntu
Ubuntu 14.04 server用のROS一撃インストールシェルスクリプト – 上田ブログ
https://blog.ueda.asia/?p=8011

今回はRaspberry Pi 2を使用しましたが、Raspberry Pi 3を利用する場合はこちらの方法でインストールできます。

RaspberryPi3にUbuntu 14.04とROS indigoをインストール | RT MicroMouse
http://products.rt-net.jp/micromouse/archives/2985
RaspberryPi3にUbuntu14.04をインストールする方法 | Memoteki
https://tiryoh.com/blog/archives/928

Raspberry Pi MouseのドライバやROSパッケージはこちらの方法でインストールできます。

rt-net/RaspberryPiMouse
https://github.com/rt-net/RaspberryPiMouse
RaspberryPi3+Ubuntu 14.04+ROS indigo+にデバイスドライバをインストール | RT MicroMouse
http://products.rt-net.jp/micromouse/archives/3037
ryuichiueda/raspimouse_ros:ROS package for Raspberry Pi Mouse
https://github.com/ryuichiueda/raspimouse_ros

また、Raspberry Piと操作用PCはローカルネットワーク内で通信するのでIPアドレスをそれぞれ確認し、
通信ができるようにファイヤーウォールやルータの設定を行う必要があります。

操作

まず、操作用PCの環境変数の設定を行います。ROS_MASTER_URIとROS_IPを~/.bashrcに指定し、読み込んでおきます。
(今回は操作用PC(dynabook)のIPアドレスが192.168.1.102でした。)

$ echo "export ROS_MASTER_URI=http://192.168.1.102:11311" >> ~/.bashrc
$ echo "export ROS_IP=192.168.1.102" >> ~/.bashrc
$ source ~/.bashrc

roscoreを起動します。

$ roscore

次にRaspberry Piにsshでログインし、ROS_MASTER_URIとROS_IPを~/.bashrcに指定し、読み込んでおきます。
(今回はRaspberry PiのIPアドレスが192.168.1.121でした。)

$ echo "export ROS_MASTER_URI=http://192.168.1.102:11311" >> ~/.bashrc
$ echo "export ROS_IP=192.168.1.121" >> ~/.bashrc
$ source ~/.bashrc

読み込んだあと、raspimouse_rosパッケージのraspimouse.launchを起動します。

$ roslaunch raspimouse_ros raspimouse.launch

操作用PCで以下のコマンドを実行してアクティブなトピックをリスト表示してみます。

$ rostopc list

このような出力が得られました。

$ rostopic list
/raspimouse/buzzer
/raspimouse/lightsensors
/raspimouse/motor_raw
/raspimouse/switches
/rosout
/rosout_agg

まずは、以下のコマンドでスイッチの入力状態について確認してみます。

$ rostopic echo /raspimouse/switches

すると、SW0からSW2までの状態が継続的に出力されるようになりました。
(Ctrl + Cで停止できます。)
rostopic echo switches
Terminalの左側でrostopic echoを、右上でroscoreを、右下でssh接続したRaspberry Piでroslaunchをそれぞれ実行しています。

rostopicコマンドの使い方はこちらで紹介されています。

ja/ROS/Tutorials/UnderstandingTopics – ROS Wiki
http://wiki.ros.org/ja/ROS/Tutorials/UnderstandingTopics

rostopic – ROS Wiki
http://wiki.ros.org/rostopic

スイッチと同様に以下のコマンドで反射型距離センサのデータを取得できます。

$ rostopic echo /raspimouse/lightsensors

RasPiMouseV2

ブザーを鳴らすことも出来ます。周波数で指定するので、440を0に変更すると音を止めることができます。

$  rostopic pub /raspimouse/buzzer std_msgs/UInt16 "data: 440"  --once

Raspberry Pi Mouseなのでもちろん、走らせることもできます。
最もワクワクする瞬間ですね!

$ rostopic pub -1 /raspimouse/motor_raw raspimouse_ros/LeftRightFreqs -- "400" "400" 

モータの電源が入っていればコマンドを実行した瞬間に走り出しますからRaspberry Pi Mouseを浮かせておくか広い場所で実験するなど注意してください。

ブザーと同様に0を指定すればモータは止まります。

$ rostopic pub -1 /raspimouse/motor_raw raspimouse_ros/LeftRightFreqs -- "0" "0" 

簡単ですが、Raspberry Pi Mouseの動作確認が出来ました。
次回はこのように操作できる、ということを踏まえて他のロボットの既存のシミュレータを動かしてみるところから始めようと思います。

補足

今回は解説のため、IPアドレスはifconfigコマンドで確認できたIPアドレスを手動で設定しています。
実際の環境では毎回確認するのは手間がかかりますので、以下のように設定すればIPアドレスを自動で設定できます。

export ROS_IP=`hostname -I`

IPアドレスの指定で注意しなければならないことがあります。

ROS_MASTER_URI=http://localhost:11311

上記のようにIPアドレスではなく、hostsファイルにかかれているhostnameを指定することがあります。
ROSのノードとroscore、それぞれが実行されているマシンどちらからでもavahi-daemonなどで名前解決ができるようなhostnameを使う場合には問題ありません。
しかし、名前解決ができないhostnameあるいはlocalhostなどのようにそれぞれのマシンでIPアドレスが異なるhostnameを指定している場合、rostopicのechoはできるがpublishはできないなどの問題が生じる場合があります。
つまり、ROSとroscoreが同じマシン上で動いている場合にはこの問題はおきません。

今回の例で言えばroscoreをRaspberry Pi上で動かしている場合、かつRaspberry Piからrostopicをechoあるいはpublishする場合にはROS_MASTER_URIはhttp://localhost:11311で問題ありません。
ところが、操作用PCとRaspberry PiでROSのノードを分割する場合にはどちらもIPアドレスを指定する、またはどちらからでもお互いに名前解決することができるhostnameを指定する必要があります。
実際に操作用PCの方で正しくROS_MASTER_URIを指定していなかったためにスイッチの状態情報取得はできるにも関わらず、ブザーの設定ができないなどの問題がありました。

複数のマシン上でROSを実行する際にうまく行かないことがあった場合には、名前解決することができるかどうかなど設定を再確認してみてください。

参考文献


Posted in Raspberry Pi Mouse
Tags: , , ,