九州工業大学 CIR-KIT Blog

九工大自律移動ロボット製作プロジェクトCIR-KITの技術系ブログ

No.6-1:GazeboをROSに繋ぐ (ROSの概要 編)

gazebo_logo

検証日時

02/14/2015 (Sat)

概要

Gazeboのチュートリアル第六弾「Connect to ROS」。
ROSはロボットの制御フレームワークです。このチュートリアルでは、GazeboとROSのインターフェースについて説明します。
今回はその「ROS Overview」編です。
公式サイトを適当に翻訳しただけですので、あしからず。

レベル

INTERMEDIATE

環境
PC : Lenovo ThinkPad X240
Prosessor : Intel Core i7-4600U (2.10GHz, 4MB, 1600MHz)
RAM : PC3-12800 DDR3L (8GB)
OS : Ubuntu 14.04 LTS 64bit
Kernel : 3.13.0-44-generic
Gazebo : Version 5.0.1
参考

GAZEBO Tutorial-Connect to ROS

チュートリアル : ROSの統合概要

Gazebo1.9とROS Hydroでは、GazeboはROSの直接的な依存関係はなく、Ubuntuのスタンドアローンなパッケージとしてインストールされていました。歴史的に、GazeboをROSと共に使うには、Legacyのsimulator_gazeboスタックと共にビルドされた、特別なバージョンのGazeboが必要でした。
ROSとスタンドアローンなGazeboを統合するときに、スタンドアローンなGazeboに関するラッパーである、新しいgazebo_ros_pkdsという名前のROSパッケージが作られました。このパッケージでは、ROSのメッセージやサービス、そして動的参照を使ってGazeboの中でロボットをシミュレートするために、必要なインターフェースを供給しています。simulatiorgazebogazeboros_pkgsの間の主な違いは現在以下のようになっている。:

  • それ単体ではROSとの接続機能を持たないGazeboの最新スタンドアローンな依存関係をサポートしている
  • catkinでビルドできる
  • 可能な限り、URDFとSDFを同じものとみなす
  • Gazeboでのソースコードの重複を減らす
  • ros_controlを使ったコントロールのためのボックス以外のサポートの改善
  • DARPAロボティクスチャレンジによるリアルタイムコントローラ統合の効率的な改善
  • 現在のROSとGazeboから古いコードを削除する

新しいインターフェースの概要は下図のようになっているそうです。尚、下図は公式サイトのものです。: 775px-Gazebo_ros_api

simulator_gazeboからアップグレードする

以下のガイドラインは、あなたのGazeboの依存パッケージを、ROSパッケージの中で使用するために、simulator_gazeboからアップグレードするのに役立つでしょう。:

Catkin

Gazeboと古いsimulatorgazeboスタックによるインターフェースのための現在のパッケージはrosbuildのビルドシステムで使われているものに似ています。ROS Hydroの中のgazeboros_pkgsとともに移行するためには、まず最初にパッケージを“catkinize”する必要があります。Catkin Tutorialsをご覧ください。

Launch Files

Gazeboを起動するためには、以前作成したroslaunchファイルにいくつかの変更を行う必要があります。それらのパッケージをアップデートする最も良い方法は、GazeboのチュートリアルにあるGazeboでroslaunchファイルを使ってモデルをスポーンさせるを読むことです。nutshellでは:

  • roslaunchファイルの中では、pkg="gazebo"pkg="gazebo_ros"とリネームする必要があります。
  • gazebo_worldsパッケージは消去されました。ほとんどのworldファイルはめったに使われず、SDFやXMLフォーマットの中の変更と共に定義されることもありません。つまり、empty.worldを含むすべてのworldファイルはGazeboのプロジェクト自身の中で、センタライズ(初期化)されます。
  • Gazeboのlaunchファイルを使う最も良い方法は、gazebo_rosパッケージにある、empty worldlaunchファイルをただ単にinherentもしくはincludeすることです。

CMakeLists.txt

GazeboはもはやROSパッケージではないが、システム依存はあるので、Cmakeファイルを再構成する必要があります。以下に示すのは、CMakeLists.txtの一例です。:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cmake_minimum_required(VERSION 2.8.3)
project(YOURROBOT_gazebo_plugins)

find_package(catkin REQUIRED COMPONENTS
  gazebo_ros
)

# Depend on system install of Gazebo
find_package(gazebo REQUIRED)

include_directories(include ${catkin_INCLUDE_DIRS} ${GAZEBO_INCLUDE_DIRS} ${SDFormat_INCLUDE_DIRS})

# Build whatever you need here
add_library(...) # TODO

catkin_package(
    DEPENDS
      gazebo_ros
    CATKIN_DEPENDS
    INCLUDE_DIRS
    LIBRARIES
)

package.xml

これはrosbuildにおけるmanifest.xmlを置き換えたものです : 新規のgazebo_rosパッケージに依存関係を追加します。

Gazeboを起動する

GazeboをlaunchするためのROSノードの名前はGazeboで実行可能な名前に少しだけ変更されます :

  • rosrun gazebo_ros Gazebo GazeboサーバーとGUIを両方起動します。
  • rosrun gazebo_ros gui rosrun gazebo_ros gzclientに置き換えられています
  • rosrun gazebo_ros gzserver 以下のノードを起動することができるようになります
1
2
3
4
5
6
rosrun gazebo_ros gazebo
rosrun gazebo_ros gzserver
rosrun gazebo_ros gzclient
rosrun gazebo_ros spawn_model
rosrun gazebo_ros perf
rosrun gazebo_ros debug

これらのノードについては、Gazeboでroslaunchファイルを使ってモデルをスポーンさせるというチュートリアルに詳しく述べてあります。

More

ここにissueをアップグレードしてください。

チュートリアル

Gazeboの履歴に起因する多くの変更を反映するために、ros.orgのチュートリアルは完全に消去され、このウェブサイトのscratchに再投稿されています。Gazeboの中で、URDFベースのロボットをスムーズに動かすためのやり方について、私達は、徹底的なドキュメントを作ることにより、最善を尽くしています。もし、疑問があるなら、answers.ros.orgをご覧ください。
gazebo_rosパッケージをインストールするに続きます。