gazeboシミュレータの使い方

gazeboシミュレータの概要

 Gazeboは、ロボットの実機がなくても姿勢や動作などを確認できる3次元シミュレータです。Gazeboには、ODE(Open Dynamics Engine)と呼ばれる物理演算エンジンがデフォルトで組み込まれていますが、他の物理演算エンジンを利用することもできます。また、ROS用のパッケージも提供されていますので、ROS環境でも利用することができます。
 英語版しかありませんが、チュートリアルのページに解説があります。

gazeboの基本操作

gazeboの起動

 ターミナルを開き、下記のコマンドを実行すると、gazeboを起動できます。

$ gazebo

ビューの操作方法

 gazeboの基本操作のビューの操作には、いくつかの方法があります。
 視点を上下左右に移動するパン操作は、マウスのドラッグ(左ドラッグ)で行うことができます。
 視点を回転し画面上の位置をいろいろな方向から見る操作は、Shiftキーを押しながらドラッグするか、マウスホイールを押しながらドラッグすることで行うことができます。
 視点を近づけたり遠ざけたりするズーム操作は、マウスホイールを回転するか、マウスの右ドラッグで行うことができます。

モデルの作成

 gazeboでは、画面上部のモデル作成アイコンで、箱型(Box)、球(Sphere)、円柱(Cylinder)の3種類のモデルを作成することができます。

モデルの操作モード

 モデルの操作は、画面上部のモデル操作モードアイコンで、選択モード(Selection mode / Default mode)、移動モード(Translation mode)、回転モード(Rotate mode)、拡大縮小モード(Scale mode)を切り替えることができます。キーボードでは、ESCキーで選択モード、tキーで移動モード(Translation mode)、rキーで回転モード(Rotate mode)、sキーで拡大縮小モード(Scale mode)で切り替えることができます。
 移動モードでモデルを選択すると、赤色、緑色、青色の座標軸が表示されます。赤色がx軸で、緑色がy軸で、青色がz軸ですので、rgbの順にxyzになっています。その線をドラッグすることで、モデルを各軸に沿って移動することができます。座標軸以外のモデルをドラッグすると、xy平面上を自由に移動することができます。Ctrlキーを押しながらドラッグすると、グリッドに合わせて移動されます。
 回転モードでモデルを選択すると、赤色、緑色、青色の円盤が表示されます。その円盤をドラッグすることで、モデルを円盤に沿って回転することができます。Ctrlキーを押しながらドラッグすると、45度単位で回転されます。
 拡大縮小モードでモデルを選択すると、赤色、緑色、青色の座標軸が表示されます。その座標軸をドラッグすることで、モデルを拡大縮小することができます。Ctrlキーを押しながらドラッグすると、グリッドに合わせて拡大縮小されます。

モデルの編集

 gazeboでは、モデルの削除、複写、貼付を行うことができます。
 DELETEキーで削除、Ctrl+cキーで複写、Ctrl+vキーで貼付を行うことができます。複写と貼付は、画面上部の編集アイコンでも行えます。

パネルの表示

 gazeboの画面の左側に表示されるパネルに、WorldタブとInsertタブがあります。
 Worldタブには、表示されている画面内にあるモデルの情報が表示されていて、値を変更することもできます。GUIオプションを展開すると、視点位置を調整することができます。Sceneオプションを展開すると、画面全体の明るさを調整することができます。Modelsオプションを展開すると、モデルデータの構造が表示されます。Lightオプションを展開すると、光源の情報を変更することができます。
 Insertタブでは、新しいモデルを追加することができます。▼を展開するとモデルリストが表示されます。

画面の明るさの調整

 Melodic版のgazebo9は、Kinetic版のgazebo7よりも画面が暗くなるので、画面上部の光源ボタンをクリックして明るくする必要があります。左パネルのModelタブのSceneオプションのambientの値を大きくすることでも、画面全体を明るくすることができます。

gazeboの構成要素(component)

Worldファイル

 Worldファイルは、壁などの静的オブジェクトを記述しますが、ロボット、ライト、センサーのようなモデルデータなど、すべての要素を記述することができます。ファイル形式は、URDFを拡張した、SDF(Simulation Description Format)フォーマットが使われていて、通常は.worldという拡張子が付いています。

Modelファイル

 Modelファイルは、ロボット、ライト、センサーなどのモデルデータを記述することができます。ファイル形式は、Worldファイルと同じSDFフォーマットです。モデルファイルの目的は、モデルの再利用を容易にし、Worldファイルを単純化することです。Modelファイルを作成したら、以下のSDF構文で、Worldファイルに含めることができます。

<include>
  <uri>model://model_file_name</uri>
</include>

 Modelデータは、Modelファイルとしてだけでなく、オンラインのモデルデータベースとしても提供されています。これらのデータは、gazebo起動時にインターネットに接続されていると自動的にダウンロードされます。データーベースの検索とダウンロードには時間がかかりますが、ダウンロードしたデータは、~/.gazeboフォルダ内に格納されますので、2回目以降は高速に起動されます。
 この他、プログラムからspawnすることで、後からModelデータを追加することもできます。

環境変数

 gazeboは、多くの環境変数を参照してファイルを探しますが、デフォルト値が設定されていますので、通常は環境変数を設定する必要はありません。

GAZEBO_MODEL_PATHモデルを検索するディレクトリ
GAZEBO_RESOURCE_PATHWorldファイルやMediaファイルなどのリソースを検索するディレクトリ
GAZEBO_MODEL_DATABASE_URIモデルをダウンロードするオンラインモデルデータベースのURI
GAZEBO_MASTER_URIGazeboマスターのURI
GAZEBO_PLUGIN_PATHGazebo実行時にプラグイン共有ライブラリを検索するディレクトリ

Worldファイルの選択

 gazeboのworldsフォルダには、いくつかのワールドファイルが入っていて、lsコマンドで確認できます。起動パラメータにワールドファイル名を指定することで、これらのワールドファイルを参照できます。ただ、プラグインやモデルデータなどが必要な場合は、起動オプションで指定するだけでは参照できません。--verbodeオプションを付けると、エラーの詳細を表示してくれます。

$ ls /usr/share/gazebo-*/worlds
$ gazebo worlds/ワールドファイル名
$ gazebo --verbose worlds/ワールドファイル名

empty_sky.world

$ gazebo worlds/empty_sky.world

 empty_sky.worldは、背景の空に雲が表示されます。
 

shapes.world

$ gazebo worlds/shapes.world

 shapes.worldは、gazeboの基本プリミティブである、箱型、円柱、球が表示されます。
 

lift_drag_demo.world

$ gazebo worlds/lift_drag_demo.world

 lift_drag_demo.worldは、落下傘のようなプロペラ付きの箱が表示されます。Translationモードで箱を上に持ち上げて離すと、重力によって落下して、プロペラが回ります。それだけですが、gazeboによって物理シミュレーションが行われていることを確認できます。
 

willowgarage.world

$ gazebo worlds/willowgarage.world

 willowgarage.worldは、オフィスの鳥観図モデルです。ロボット製作会社のWillowGarage社の名前が付いていますので、WillowGarage社のオフィスがモデルなのかもしれません。データ量が多いため、最初の起動には数分間程度の時間がかかります。
 

ROSとgazeboの接続

 ROSには、gazeboを利用するためのgazebo_rosというパッケージが組み込まれています。その中に、gazeboをROSで利用するためのlaunchファイルが入っています。
 Worldファイル名をパラメータで渡すことにより、Worldファイルの選択で紹介したWorldファイルをROS上で起動することもできます。

$ roslaunch gazebo_ros empty_world.launch
$ roslaunch gazebo_ros empty_world.launch world_name:=worlds/empty_sky.world
$ roslaunch gazebo_ros empty_world.launch world_name:=worlds/shapes.world
$ roslaunch gazebo_ros empty_world.launch world_name:=worlds/lift_drag_demo.world
$ roslaunch gazebo_ros empty_world.launch world_name:=worlds/willowgarage.world/

Copyright (C) ASH Joe Masumura