Raspberry Pi Mouse(移行中)

GazeboでRasPiMouseのチュートリアル

こんにちは!佐藤です。

前回は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

rviz rrbot

リンクを動かすことが出来ました。

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

リンクが振り子のように動く様子を確認できました。

rrbot gazebo

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 freeze

静止しなかった場合、おそらく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 rrbot joint2-0

さて、大まかにではありますがGazeboとGazeboの使い方について説明しました。
これでようやく作成したURDFモデルに不足している情報を書き加え、コントローラパッケージを追加する準備が整いました。
いまのところ表示することしかできていませんが、動く様子が見られるようになると思うとワクワクしてきます!
raspimouse rviz

まだ準備中ですが、最終的にはRaspberry Pi Mouseも同じようにGitHubに公開する予定です。

次回からは公開するファイルをどんどん用意し、Gazebo上で動かせるようにしていきます。

補足

Gazeboとは

オープンソースの3Dロボットシミュレータです。ライセンスはApacheライセンスです。
Mercurialで管理されているのでBitbucketで公開されています。
https://bitbucket.org/osrf/gazebo

センサのシミュレーションを行うこともできます。つまり、実機を用意しなくてもロボットの挙動を確認することができるようになるということです。

机の上にロボット(Kobuki)をおいたシミュレーションをしてみた様子です。
gazebo

バージョン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

参考文献

タイトルとURLをコピーしました