こんにちは!佐藤です。
アールティでブログを書くのにもだんだん慣れてきました。
前回はxacroファイルでモデルの形だけではなく重さなど詳細情報も含めて定義しました。
これから先は実際に動かす方法を踏まえつつ各種ファイルを用意していく必要があります。
概要
今回は実際のraspimouseと同様に操作するためのコマンドの確認を行っていきます。
実機が動くことは大変嬉しいことですが、やはり準備が大変です。
特にROSのインストールに関してはある程度慣れていても多少時間がかかってしまいます。
そこで、シミュレータで簡単に動作確認を行った上で、実機にスムーズに移行できるようにするためにシミュレーション用のモデルの作成を行っています。
どのような方法で制御すればよいのかを確認し、次回以降それらをシミュレーションモデルに実装できるように準備を行います。
ROSではノード(ROSパッケージ内の実行ファイル)に対してトピック(ノード同士でやりとりをするデータや指令)を送受信します。
ROSを使用したCRANE+の動かし方 その6 | RT Robot Shop Blog より画像引用
またまた手前味噌で恐縮ですが、ノードとトピックについてもRT SHOP BLOGの方に詳しく書かれていますのでそちらをご参照ください。
ROSを使用したCRANE+の動かし方 その6 | RT Robot Shop Blog
準備
操作は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
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
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で停止できます。)
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
ブザーを鳴らすことも出来ます。周波数で指定するので、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を実行する際にうまく行かないことがあった場合には、名前解決することができるかどうかなど設定を再確認してみてください。
参考文献
- ROSを使用したCRANE+の動かし方 その1 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その1はじめまして!アールティでアルバイトをしております大学2年生の長谷川と申します。これから、何回かに分けまして、ROSを使用してTurtleBot2用ロボットアーム「CRANE+」を動かす方法について解説していきたいと思います。ROSを知らな - ROSを使用したCRANE+の動かし方 その2 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その2こんにちは!長谷川です。前回はROSそのものについての解説をしましたが、今回はROSを実際にインストールしてみましょう。長くなると思いますが、環境が整わないとCRANE+を動かすこともできないので、ご辛抱ください。使用PCの環境この連載で使 - ROSを使用したCRANE+の動かし方 その3 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その3こんにちは!長谷川です。前回はROSのインストールについて説明しましたが、今回はROSの環境のセットアップとROSのファイルシステムについて説明したいと思います。今回は、主に英語版Wikiのチュートリアルに従って進みます。日本語版Wikiの - ROSを使用したCRANE+の動かし方 その4 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その4こんにちは!長谷川です。前回はROSの環境のセットアップとROSのファイルシステムについて説明しましたが、今回はROSのパッケージの作成とビルドについて説明したいと思います。今回も前回同様、主に英語版Wikiのチュートリアルに従って進みます - ROSを使用したCRANE+の動かし方 その5 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その5こんにちは!長谷川です。前回はROSのパッケージの作成とビルドについて説明しましたが、今回はCRANE+を動かすための環境の構築について説明したいと思います。CRANE+を動かすためのチュートリアルここを見ていただくとわかりますが、「CRA - ROSを使用したCRANE+の動かし方 その6 | RT Robot Shop Blog
http://www.rt-shop.jp/blog/archives/6664 - ROSを使用したCRANE+の動かし方 その7 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その7こんにちは!長谷川です。前回はCRANE+の全ての関節を同時に、かつ自動で動かす方法について説明しましたが、今回はその時出てきたソースコードの解説を通して、ROSのプログラムの書き方について説明したいと思います。プログラムについてのチュート - ROSを使用したCRANE+の動かし方 その8 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その8こんにちは!長谷川です。前回はROSのプログラムの書き方について説明しましたが、今回はCRANE+のURDFモデルの作り方について説明したいと思います。URDFモデルとはURDFとはUnified Robot Description For - ROSを使用したCRANE+の動かし方 その9 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その9こんにちは!長谷川です。前回はCRANE+のURDFモデルの作り方について説明しましたが、今回は、前回作ったモデルと実物のCRANE+の連動のさせ方について説明したいと思います。プログラムの作成まずは、モデルとCRANE+を連動させるプログ - ROSを使用したCRANE+の動かし方 その10 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その10こんにちは!長谷川です。この連載も、ついに10回目に突入しました。ここまで見てくださった皆様、本当にありがとうございます!前回は、前々回作ったモデルと実物のCRANE+の連動のさせ方について説明しましたが、今回は、CRANE+の状態をモデル - ROSを使用したCRANE+の動かし方 その11(完結) | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その11(完結)こんにちは!長谷川です。前回はCRANE+の状態をモデルに反映させる方法について説明しましたが、今回は、CRANE+の状態をrviz上でモニタリングしつつ、CRANE+を自動で動かす方法について説明したいと思います。使用するプログラム実は、 - Gazebo + ROS で自分だけのロボットをつくる 1.STLファイルをつくる- Qiita
Gazebo + ROS で自分だけのロボットをつくる 2.STLファイルをつくる - Qiitaはじめに今回は、手順2.についてです。完成までの手順好きなCADソフトを使ってSTLファイルを作る ←今ココ好きなソフトを使ってCOLLADAファイルを作るURDFファイルを作るGaze… - Gazebo + ROS で自分だけのロボットをつくる 2.好きなソフトを使ってCOLLADAファイルを作る- Qiita
Gazebo + ROS で自分だけのロボットをつくる 3.COLLADAファイルをつくる - Qiitaはじめに今回は、手順3.についてです。完成までの手順好きなCADソフトを使ってSTLファイルを作る好きなソフトを使ってCOLLADAファイルを作る ←今ココURDFファイルを作るGaze… - Gazebo + ROS で自分だけのロボットをつくる 3.URDFファイルをつくる- Qiita
Gazebo + ROS で自分だけのロボットをつくる 4.URDFファイルをつくる - Qiitaはじめに今回は、手順4.についてです。完成までの手順好きなCADソフトを使ってSTLファイルを作る好きなソフトを使ってCOLLADAファイルを作るURDFファイルを作る ←今ココGaze… - Gazebo + ROS で自分だけのロボットをつくる 4. GazeboとROSの連携- Qiita
Gazebo + ROS で自分だけのロボットをつくる 5. GazeboとROSの連携 - Qiitaはじめに今回は、手順5.についてです。完成までの手順好きなCADソフトを使ってSTLファイルを作る好きなソフトを使ってCOLLADAファイルを作るURDFファイルを作るGazeboとRO… - ロボット記述言語 安曇野の森から
ロボット記述言語 - Raspberry Pi MouseのURDFモデル作成 その1 | RT MicroMouse
Raspberry Pi MouseのURDFモデル作成 その1はじめまして。この夏、インターンシップでアールティのお仕事のお手伝いをしています佐藤です。 Raspberry Pi MouseのURDFモデルの作成をし、Gazeboでシミュレーションを行うところまで行っていきたいと思います。 ROSを使... - Raspberry Pi MouseのURDFモデル作成 その2 | RT MicroMouse
Raspberry Pi MouseのURDFモデル作成 その2こんにちは!佐藤です。 今回は前回の続きでURDFのモデルの作成を行っていきます。 前回はとりあえず動かすことを目的としてパッケージを用意して、URDFを記述するところまで行いました。 URDFファイルについて はじめに記述したURDFファ...