九州工業大学 CIR-KIT Blog

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

No.2-10:ロボットを作ってみよう !(動く箱 編)

gazebo_logo

検証日時

02/01/2015 (Sun)

概要

Gazeboのチュートリアル第二弾「Build a Robot」。
このチュートリアルではロボットを作ったり、修正したりします。また、センサ、アクチュエータを搭載した車輪型ロボットを作り、モデルを描画するなどの実践例も行います。
今回はその「Animated Box」編です。
公式サイトを適当に翻訳しただけですので、あしからず。

レベル

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-Build a Robot

はじめに

このチュートリアルでは、10周期で地面の上をスライドするようなシンプルな箱と、そのworldを生成します。
また、Gazeboもしくは、自分独自の実行可能なシミュレーションを使用しての参照方法、アクセス方法、相互作用の様々な方法を紹介します。 シミュレーションで生成する箱は自身の姿勢を配信し、姿勢を受け取るとコールバックを呼び、箱のロケーションとタイムスタンプをプリントアウトします。

セットアップ

作業ディレクトリを作成しましょう。

1
2
mkdir ~/gazebo_animatebox_tutorial
cd ~/gazebo_animatebox_tutorial

動く箱のコード

animate_box.ccindependent_listner.ccintegrated_main.ccCMakeLists.txtanimated_box.worldを現在のディレクトリにコピーしましょう。

1
2
3
4
5
wget http://bitbucket.org/osrf/gazebo/raw/gazebo_4.0/examples/stand_alone/animated_box/animated_box.cc
wget http://bitbucket.org/osrf/gazebo/raw/gazebo_4.0/examples/stand_alone/animated_box/independent_listener.cc
wget http://bitbucket.org/osrf/gazebo/raw/gazebo_4.0/examples/stand_alone/animated_box/integrated_main.cc
wget http://bitbucket.org/osrf/gazebo/raw/gazebo_4.0/examples/stand_alone/animated_box/CMakeLists.txt
wget http://bitbucket.org/osrf/gazebo/raw/gazebo_4.0/examples/stand_alone/animated_box/animated_box.world

プラグインをビルドしましょう。

1
2
3
4
mkdir build
cd build
cmake ../
make

ただし、Gazeboはプラグインを最後に読み込むことができるということを覚えておいてください。

1
export GAZEBO_PLUGIN_PATH=`pwd`:$GAZEBO_PLUGIN_PATH

Gazeboでシミュレーションする

今回は、プラグインを使ったGazeboをどのようにして使うかを説明します。
以下のようにしてGazeboを起動しましょう。

1
2
cd ~/gazebo_animatebox_tutorial
gazebo animated_box.world

他のターミナルで、gz topcコマンドを使用し、箱の姿勢を表示するユーザーインターフェースを起動しましょう。この時、buildディレクトリ内でコマンドを使用してください。でなければパスが通らず、箱が動きません。

1
gz topic -v /gazebo/animated_box_world/pose/local/info

すると、箱の姿勢を表示するGUIが表示できたはずです。
以下の動画は、動く箱と、その状態を表示するGUIが動いている様子です。

独自の実行ファイルを使ってシミュレーションに接続する。

Gazeboが起動していないことを確認してください。
これまでの説明通りにGazeboを起動してください。同時にGazeboに接続できる独立したリスナを起動してください。このリスナというのは、箱のロケーションとタイムスタンプを受け取り、それをプリントアウトするようなものです。

1
2
cd ~/gazebo_animatebox_tutorial
gazebo animated_box.world & ./build/independent_listener

実行すると、以下の動画のようになります。
先ほどまでのように、gz topicによるアプリケーションとは異なり、箱の状態が端末に表示されていることがわかります。
注目 : もし、Gazeboは起動するが、箱が動ないという現象に陥ったなら、それは、パス通しがうまく行っていません。一つ前の項でパス通しをしていますので、libanimated_box.soファイルのあるディレクトリで、以下のコマンドを実行し、パス通しをし直しましょう。

1
export GAZEBO_PLUGIN_PATH=`pwd`:$GAZEBO_PLUGIN_PATH

ちなみに、この現象は、パスを通した後に一旦端末を閉じ、新しい端末で実行した場合に起きるようです。

シミュレーションを起動し、独自の実行ファイルを接続する。

Gazeboが起動していないことを確認してください。 例integrated_mainは以下のようになっています。

  1. 箱を表示するシミュレーションを起動する。

  2. シミュレーションにリスナを接続する。

  3. リスナはタイムスタンプと姿勢を受け取り、それぞれをプリントアウトします。

ファイルintegrated_mainを実行しましょう。

1
2
cd ~/gazebo_animatebox_tutorial
./build/integrated_main animated_box.world

シミュレーションを見るために、以下のコマンドを実行しましょう。

1
gzclient

実行すると、以下の動画のようになります。
先ほどと同様、端末に箱の状態が表示されますが、コマンド一つでGazeboが立ち上がっていないところに違いがあります。つまり、今回は、gzserverのみを立ち上げ、その後手動でgzclientを立ち上げたということです。この、gzservergzclientの概念についてはGAZEBOを使ってみよう ! (Gazebo コンポーネント 編)で説明していますので、そちらをご覧ください。

ソースコード

independent_listner.cc

実行しているシミュレーションに接続し、姿勢情報トピックを受け取り、物体の姿勢を表示します。

integrated_main.cc

シミュレーションを起動し、姿勢情報トピックを受け取り、物体の姿勢を表示します。

animated_box.cc

シミュレーションのアニメーション要素を定義したプラグインライブラリです。アニメーション要素とは、シミュレーションの中で、箱を動かすようなものです。

animated_box.world

シミュレーションの環境とその環境下に置く箱のについて定義下XMLファイルです。

CMakeLists.txt

スクリプトをビルドするCMakeです。