こんにちは!佐藤です。
前回はRaspberry Pi MouseをROSを使って動かすためのコマンドを確認しました。
Raspberry Pi Mouseから少し話がそれてしまいますが、今回はGazeboでURDFを使う方法をGazeboのチュートリアルに沿って進めていきます。
Gazebo : Tutorial : URDF in Gazebo
Gazeboインストール手順
前提
執筆に用いたマシンは Ubuntu Desktop 14.04 LTS 64bitがインストールされたdynabook R73/W4Mです。
ROSのバージョンはIndigoを使用しています。
ROSのインストールについてはこちらをご覧ください。
ROSを使用したCRANE+の動かし方 その2 | RT Robot Shop Blog
ROSはインストールできている状態で作業をしていきます。
Gazeboのインストール
先ほど紹介したRT Robot Shop Blogに書いてあるとおり、以下のコマンドでインストールした場合にはGazebo2.2.3がインストールされています。
sudo apt-get install ros-indigo-desktop-full
それ以外の方法でインストールしてある場合も再度上記のコマンドを実行すれば差分のパッケージをインストールすることができます。
サンプルデータの用意
以下のGazeboサンプルデータを今回は使用します。
ros-simulation/gazebo_ros_demos: Example robots and code for interfacing Gazebo with ROS
https://github.com/ros-simulation/gazebo_ros_demos
ちなみに、ここで出てくるロボットの名称であるRRBotはRevolute-Revolute Manipulator Robotだそうです。
$ cd ~/catkin_ws/src/ $ git clone https://github.com/ros-simulation/gazebo_ros_demos.git $ (cd ~/catkin_ws && catkin_make) && source ~/catkin_ws/devel/setup.bash
最終的に以下のようにBuilt target gazebo_tutorialsと出力されれば無事にコンパイルできています。
. . . Scanning dependencies of target gazebo_tutorials [100%] Building CXX object gazebo_ros_demos/custom_plugin_tutorial/CMakeFiles/gazebo_tutorials.dir/src/simple_world_plugin.cpp.o Linking CXX shared library /home/ubuntu/catkin_ws/devel/lib/libgazebo_tutorials.so [100%] Built target gazebo_tutorials
次のコマンドでrvizを起動します。
$ roslaunch rrbot_description rrbot_rviz.launch
リンクを動かすことが出来ました。
Gtk-Message: Failed to load module "canberra-gtk-module"
とエラーが出ることがあります。その際は以下のようにlibcanberra-gtk-moduleをインストールすれば良いようです。
sudo apt-get install libcanberra-gtk-module
次はGazeboを起動します。
$ roslaunch rrbot_gazebo rrbot_world.launch
リンクが振り子のように動く様子を確認できました。
Gazeboを起動する際は、先ほどとは異なりrrbot_descriptionではなく、rrbot_gazeboにあるrrbot_world.launchを起動しました。
ロボットの名称をMYROBOTとしたとき、モデルの定義をMYROBOT_descriptionに、Gazeboの定義をMYROBOT_gazeboに、コントローラの定義をMYROBOT_controllerに書きます。
第1回や第2回では説明なしにraspimouse_descriptionという名前のパッケージを作成しました。実はこのルールに基づいて作成をしていました。
名称やファイルの配置方法はこちらに説明があります。
Gazebo : Tutorial : Using roslaunch
http://gazebosim.org/tutorials?tut=ros_roslaunch#CreatingyourownGazeboROSPackage
では、このRRBotを操作してみます。
再びGazeboを起動し、コントローラも一緒に起動します。同じTerminalでは開けませんので別のTerminalを起動してください。
$ roslaunch rrbot_gazebo rrbot_world.launch
$ roslaunch rrbot_control rrbot_control.launch
無事にrrbot_gazeboもrrbot_controlも起動することができれば、Gazebo上のRRBotが中途半端な角度で静止します。
静止しなかった場合、おそらくrrbot_control.launchをroslaunchした方のTerminalに次のようなエラーが出ています。
[INFO] [WallTime: 1470303007.805370] [0.000000] Loading controller: joint_state_controller [ERROR] [WallTime: 1470303008.821268] [3.968000] Failed to load joint_state_controller [INFO] [WallTime: 1470303008.821717] [3.968000] Loading controller: joint1_position_controller [ERROR] [WallTime: 1470303009.825328] [4.969000] Failed to load joint1_position_controller [INFO] [WallTime: 1470303009.825681] [4.969000] Loading controller: joint2_position_controller [ERROR] [WallTime: 1470303010.828437] [5.961000] Failed to load joint2_position_controller [INFO] [WallTime: 1470303010.828873] [5.962000] Controller Spawner: Loaded controllers: [INFO] [WallTime: 1470303010.831716] [5.965000] Started controllers:
正常な場合はStarted controllersが空白にはなりませんのでそこで判断することもできます。
[INFO] [WallTime: 1470303102.824995] [0.000000] Loading controller: joint_state_controller [INFO] [WallTime: 1470303102.873146] [4.390000] Loading controller: joint1_position_controller [INFO] [WallTime: 1470303102.941999] [4.459000] Loading controller: joint2_position_controller [INFO] [WallTime: 1470303102.972293] [4.490000] Controller Spawner: Loaded controllers: joint_state_controller, joint1_position_controller, joint2_position_controller [INFO] [WallTime: 1470303102.975217] [4.493000] Started controllers: joint_state_controller, joint1_position_controller, joint2_position_controller
このエラーはコントローラが正常に読み込めなかった場合に出るエラーでパッケージが一部不足していることが原因となっています。
次のコマンドで不足しているパッケージをインストールすることができます。
sudo apt-get install ros-indigo-gazebo-ros-control ros-indigo-ros-controllers
ここで、更に別のTerminalを開いてrostopicをpublishします。
$ rostopic pub -1 /rrbot/joint2_position_controller/command std_msgs/Float64 "data: 1.5"
joint2は先端に近い方の関節なので0を指定すると延ばすことができます。
ここで指定する値の単位はラジアンです。
さて、大まかにではありますがGazeboとGazeboの使い方について説明しました。
これでようやく作成したURDFモデルに不足している情報を書き加え、コントローラパッケージを追加する準備が整いました。
いまのところ表示することしかできていませんが、動く様子が見られるようになると思うとワクワクしてきます!
まだ準備中ですが、最終的にはRaspberry Pi Mouseも同じようにGitHubに公開する予定です。
次回からは公開するファイルをどんどん用意し、Gazebo上で動かせるようにしていきます。
補足
Gazeboとは
オープンソースの3Dロボットシミュレータです。ライセンスはApacheライセンスです。
Mercurialで管理されているのでBitbucketで公開されています。
https://bitbucket.org/osrf/gazebo
センサのシミュレーションを行うこともできます。つまり、実機を用意しなくてもロボットの挙動を確認することができるようになるということです。
机の上にロボット(Kobuki)をおいたシミュレーションをしてみた様子です。
バージョン1.9以上のGazeboでは物理エンジンにOpen Dynamics Engine(ODE)が採用されています。
その他にもバージョン3.0以上ではBullet/Simbody/DARTを選ぶことができます。
今回使用するのはODEです。
ODEについては金沢工業大学の出村先生のページが詳しいです。
demura.net | 1. ODEとは
demura.net | ODE
http://demura.net/ode
Gazeboインストール
ROS Indigoがインストールされている状態でOSRF公式のチュートリアルに従ってGazeboをインストールしようとするとエラーが出ます。
aptitudeでインストールしようとするとROSのパッケージを削除するよう求めてきますので注意してください。
$ sudo apt-get install gazebo5 Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: gazebo5 : Depends: libgazebo5 (= 5.3.0-1~trusty) but it is not going to be installed Depends: libsdformat2 but it is not going to be installed Depends: gazebo5-common but it is not going to be installed Recommends: gazebo5-plugin-base E: Unable to correct problems, you have held broken packages.
$ sudo aptitude install gazebo5 The following NEW packages will be installed: gazebo5{b} gazebo5-common{ab} gazebo5-plugin-base{a} libarmadillo4{a} libarpack2{a} libbullet2.82{a} libdap11{a} libdapclient3{a} libepsilon1{a} libfreexl1{a} libgazebo5{ab} libgdal1h{a} libhdf4-0-alt{a} libkml0{a} libogdi3.2{a} libproj0{a} libsdformat2{ab} libsimbody3.5{a} libspatialite5{a} proj-bin{a} proj-data{a} sdformat-sdf{ab} 0 packages upgraded, 22 newly installed, 0 to remove and 37 not upgraded. Need to get 63.0 MB of archives. After unpacking 156 MB will be used. The following packages have unmet dependencies: libsdformat2 : Conflicts: libsdformat1 but 1.4.11-1ubuntu0.1 is installed. gazebo5 : Conflicts: gazebo2 but 2.2.3-1~trusty is installed and it is kept back. gazebo5-common : Conflicts: gazebo2 but 2.2.3-1~trusty is installed and it is kept back. libgazebo5 : Conflicts: gazebo2 but 2.2.3-1~trusty is installed and it is kept back. sdformat-sdf : Conflicts: libsdformat1 but 1.4.11-1ubuntu0.1 is installed. The following actions will resolve these dependencies: Remove the following packages: 1) gazebo2 2) libsdformat-dev 3) libsdformat1 4) ros-indigo-desktop-full 5) ros-indigo-gazebo-plugins 6) ros-indigo-gazebo-ros 7) ros-indigo-gazebo-ros-control 8) ros-indigo-gazebo-ros-pkgs 9) ros-indigo-kobuki-gazebo 10) ros-indigo-kobuki-gazebo-plugins 11) ros-indigo-simulators 12) ros-indigo-turtlebot-gazebo 13) ros-indigo-turtlebot-simulator Accept this solution? [Y/n/q/?] n The following actions will resolve these dependencies: Keep the following packages at their current version: 1) gazebo5 [Not Installed] 2) gazebo5-common [Not Installed] 3) gazebo5-plugin-base [Not Installed] 4) libgazebo5 [Not Installed] 5) libsdformat2 [Not Installed] 6) sdformat-sdf [Not Installed] Accept this solution? [Y/n/q/?] q Abandoning all efforts to resolve these dependencies. Abort.
Gazeboのバージョンについて
デフォルトではROS IndigoはGazebo 2.x、ROS JadeはGazebo 5.xがインストールされます。
(Jadeでは手動でGazeboをインストールする必要があるとの情報もあります。)
以下のコマンドでデフォルトバージョン以外のバージョンをインストールすることはできますが、ROSのリポジトリからインストールできるGazebo(とROS)を使うパッケージが動かなくなります。
sudo apt-get install ros-indigo-gazebo5-ros-pkgs
GazeboとROSのバージョンの関係についての詳細な情報はこちらに書かれています。
Gazebo : Tutorial : Which combination of ROS/Gazebo versions to use
dockerでのROSについて
いくつかのバージョンについて検証するためにdockerを使ってRVizを起動することもあるかと思います。
その際にはX11転送を有効にすることでCan’t open displayエラーやcannot connect to X serverエラーなどを回避することができます。
docker run -it --rm --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" osrf/ros:indigo-desktop-full bash"
同じコンテナにログインする際には以下のコマンドで入ることができます。
docker exec -it <container_name> bash
更に詳細な情報はROS Wikiをご覧ください。
docker/Tutorials/Docker – ROS Wiki
http://wiki.ros.org/docker/Tutorials/Docker
参考文献
- Gazebo : Tutorial : URDF in Gazebo
http://gazebosim.org/tutorials/?tut=ros_urdf#Tutorial:UsingaURDFinGazebo - demura.net | 1. ODEとは
http://demura.net/tutorials/ode1 - Gazebo : Tutorial : Which combination of ROS/Gazebo versions to use
http://gazebosim.org/tutorials/?tut=ros_wrapper_versions - Gazebo : Tutorial : ROS control
301 Moved Permanently - ROSを使用したCRANE+の動かし方 その1 | RT Robot Shop Blog
ROSを使用したCRANE+の動かし方 その1はじめまして!アールティでアルバイトをしております大学2年生の長谷川と申します。これから、何回かに分けまして、ROSを使用してTurtleBot2用ロボットアーム「CRANE+」を動かす方法について解説していきたいと思います。ROSを知らな - ROSを使用したCRANE+の動かし方 その2 | RT Robot Shop Blog
http://www.rt-shop.jp/blog/archives/6528 - 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
ROSを使用したCRANE+の動かし方 その6こんにちは!長谷川です。前回はCRANE+を動かすための環境の構築について説明しましたが、今回はCRANE+の全ての関節を同時に、かつ自動で動かす方法について説明したいと思います。ROSのノードとトピックについてCRANE+を動かす前に、R - 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ファ... - Raspberry Pi MouseのROSコマンド確認 | RT MicroMouse
Raspberry Pi MouseのROSコマンド確認こんにちは!佐藤です。 アールティでブログを書くのにもだんだん慣れてきました。 前回はxacroファイルでモデルの形だけではなく重さなど詳細情報も含めて定義しました。 これから先は実際に動かす方法を踏まえつつ各種ファイルを用意していく必要が...