九州工業大学 CIR-KIT Blog

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

No.2-3:ロボットを作ってみよう ! (モデルをつくる 編)

gazebo_logo

検証日時

01/25/2015 (Sun)

概要

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

レベル

BEGINNER

環境
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

はじめに

このチュートリアルでは、SDFモデルオブジェクトについて説明します。
SDFモデルは複雑なロボットの形状を整理して記述することができます。これには、<model>SDFタグが必要です。また、リンク、ジョイント、物体の衝突情報、外観、プラグインなどの要素が必要です。必要なモデルのが複雑な依存関係にあるとき、modelファイルを作るのは困難になります。このページでは自身のモデルをどうやってビルドするのかについて、いくつかの方法を説明します。

SDFモデルの構成

  • Links : リンクにはモデル本体の物理的な情報が記述されています。例えば、タイヤであったりジョイントチェーンのリンクであったりします。それぞれのリンクには多くの衝突判定や外観要素が含まれています。パフォーマンスや安定性を向上させるためには、モデルのリンクの数を減らしてみてください。例えば、テーブルのモデルには、5つのリンク(4つは脚で、1つは天板)がジョイントで結合されています。しかし、これはとても複雑です。特にジョイントが決して動かない場合などです。なので、テーブルを1つのリンクと5つの衝突要素で生成します。

    • Collision : 衝突要素は衝突判定に使用される幾何学にカプセル化されています。これは単純な形状(そのほうが好ましい)、もしくは、三角形のメッシュ(こちらの方がよりリソースを必要とします)です。リンクはたくさんの衝突要素が含まれています。

    • Visual : 外観要素はリンクの外観部分に使われます。リンクには0もしくはそれ以上の外観要素が含まれています。

    • Inertial : 慣性要素は質量や回転慣性行列などのリンクの物理的特性を記述します。

    • Sensor : センサはプラグインの中で使用するための環境データを取得します。リンクには0もしくはそれ以上のセンサが含まれています。

  • Joints : ジョイントは2つのリンクを接続します。回転のやじる地とジョイントの限界のように、親子関係が他の親との間に生成されます。

  • Plugins : プラグインはモデルを制御するためのサードパーティーによって作られた共有ライブラリです。

モデルを作る

ステップ 1 : メッシュを集める

モデルを作成する際に必要な3Dメッシュファイルのすべて集めることを意味します。Gazeboは簡単な形状のセット(:箱、球、円柱)を提供しています。もし、あなたのモデルがもう少し複雑であるなら、このまま読み進めてください。
メッシュはいろいろな方法で生成できます。Google’s 3D wharehouseは良い3Dモデルのレポジトリです。あるいは、必要なファイルをすでに持っているかもしれない。いずれにせよ、最終的には、BlenderSketchupなどの3Dモデラーを使って独自のメッシュを作ることができます。
GazeboではメッシュファイルはSTLもしくはColladaフォーマットでなければなりません。Colladaフォーマットの方が好ましいです。

  • コツ : 原点が中心となるように、3Dモデリングソフトウェアを使ってメッシュを動かしておきましょう。これを行っておけばGazeboの中で、メッシュを動かすのがとtも簡単になります。

  • コツ : Colladaファイルフォーマットでは、マテリアルにメッシュを貼り付けることができます。作成したメッシュの外見の体裁を良くするためにこの仕組みを使いましょう。

  • コツ : メッシュはシンプルにしてください。これは、特に、メッシュを衝突要素として使用する場合に重要です。衝突要素には単純なポリゴンメッシュを使用し、見た目には複雑なポリゴンメッシュを使用するというのが一般的です.すでに提供されている形状(箱、球、円柱)を衝突要素として使用するのも、良い方法です。

ステップ 2 : モデルのSDFファイルを作る

極端に簡単なモデルファイルを作る、もしくはすでにあるモデルファイルをコピーしてくるところから始めてください。機能がすでにわかっているもしくは、デバッグがとても簡単なものからスタートするのが鍵です。
とても単純な最小単位のボックスモデルファイルを衝突、幾何形状のユニットボックスとして、更に慣性ボックスユニット、外観ユニットとする。:
モデルファイルbox.sdf を生成する。

1
gedit box.sdf

以下をbox.sdfにコピーしてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version='1.0'?>
<sdf version="1.4">
<model name="my_model">
  <pose>0 0 0.5 0 0 0</pose>
  <static>true</static>
    <link name="link">
      <inertial>
        <mass>1.0</mass>
        <inertia> <!-- interias are tricky to compute -->
          <!-- http://answers.gazebosim.org/question/4372/the-inertia-matrix-explained/ -->
          <ixx>0.083</ixx>       <!-- for a box: ixx = 0.083 * mass * (y*y + z*z) -->
          <ixy>0.0</ixy>         <!-- for a box: ixy = 0 -->
          <ixz>0.0</ixz>         <!-- for a box: ixz = 0 -->
          <iyy>0.083</iyy>       <!-- for a box: iyy = 0.083 * mass * (x*x + z*z) -->
          <iyz>0.0</iyz>         <!-- for a box: iyz = 0 -->
          <izz>0.083</izz>       <!-- for a box: izz = 0.083 * mass * (x*x + y*y) -->
        </inertia>
      </inertial>
      <collision name="collision">
        <geometry>
          <box>
            <size>1 1 1</size>
          </box>
        </geometry>
      </collision>
      <visual name="visual">
        <geometry>
          <box>
            <size>1 1 1</size>
          </box>
        </geometry>
      </visual>
    </link>
  </model>
</sdf>

Box-geometryの原点はboxの幾何学的中心に置くことに留意してください、なので、地面の水平面と共に更新されるboxの底面を生成するために、地面の水平面の上へboxを引き上げるように、<pose>0 0 0.5 0 0 0</pose>の原点を加えます。

  • コツ : 上記の例だとシンプルなboxモデルを静的に設置しました。モデルを作る際に有効なのが特徴です。一回でもモデルを生成し、モデルを動かせるようにしたいなら、<staticタグをfalseにしてください。

ステップ 3 : モデルをSDFファイルに加える

起動中の.sdfファイルと共に、慎重にモデルを加えていき、少しずつ複雑にしていきましょう。それぞれの要素を加えていく際に、モデルがGUIクライアントできちんと動作していることを確認しながら、加えていきましょう。
以下に、要素を追加していく際に見習ったほうが良い手順を示します。

  1. リンクを追加

  2. 衝突要素を追加

  3. 外観要素を追加

  4. 慣性情報を追加

  5. すべてのリンクを追加し終わるまで、1.に戻る

  6. すべてのジョイントを追加(使うなら)

  7. すべてのプラグインを追加(使うなら)