注目キーワード
  1. Photoshop
  2. Python
  3. Raspberry Pi
  4. Arduino

Gazebo Make a Mobile Robotでロボットモデルを作成してみた

ここでは「Ubuntu Server 20.04.2 LTS」と「Gazebo」をインストールした「Raspberry Pi 4 Model B」でMake a Mobile Robotのチュートリアルを試すまでの手順を紹介します。

 

この記事を読むことで

Gazeboでロボットモデルを作成する方法

Gazeboでロボットを動作させる方法

を知ることができ

 

gazebo_makerobot

上図のように、ロボットモデルを動作させる基礎を学ぶことができます。

 

ロボットをGazeboでシミュレーションする予定のある方や、Gazeboを触ってみたいという方は是非挑戦してみてください。

それでは早速始めていきましょう。

 

※ この記事は

Gazebo Make a Mobile Robot

を参考にしています。

 

Gazeboでの準備とモデル表示の基礎

まずはGazeboでモデルのデータベースとなるディレクトリを準備して、簡単な長方形モデルを表示してみます。

 

Gazeboモデルのデータ準備

始めに、モデルのディレクトリを.gazebo/models下にmy_robotという名前で準備をします。

mkdir -p ~/.gazebo/models/my_robot

 

この.gazeboフォルダですが、普段は隠しファイルに設定されており見えないようになっています。

 

ls -al

ls -la

などのaオプションを使って隠しファイルを表示してみましょう。

gazebo_makerobot_01

 

.gazeboフォルダがあることが分かりますね。

cd ~/.gazebo/models/my_robot

と絶対パスを指定して、先ほど作成したディレクトリを確認することもできます。
gazebo_makerobot_02

 

そしたら以下のコマンドを実行し、model.configファイルを作成・編集します。

gedit ~/.gazebo/models/my_robot/model.config

 

.configファイルとはチュートリアルによると

メタデータを使用してロボットを記述するもの

と説明がありますが、ロボットの名前、バージョン、要約を記述するファイルと考えてもらって大丈夫かと思います。

 

gedit(ジーエディット)で編集をする場合は、XmingなどのGUI表示アプリケーションを使用してください。

もちろん

sudo nano model.config

など好みの編集モードでプログラムを記述してもOKです。

 

model.config

<?xml version="1.0"?>
<model>
  <name>My Robot</name>
  <version>1.0</version>
  <sdf version='1.4'>model.sdf</sdf>

  <author>
   <name>My Name</name>
   <email>me@my.email</email>
  </author>

  <description>
    My awesome robot.
  </description>
</model>

と記述したら、Saveなど保存をしておきましょう。

 

gazebo_makerobot_03

 

続いて、ロボットモデルのリンク、ジョイントなどの詳細情報を定義するmodel.sdfファイルを作成・記述していきます。

.SDFはGazeboでモデルを表示するのに必要なファイル

という認識でひとまずOKです。

 

gedit ~/.gazebo/models/my_robot/model.sdf

sudo nano model.sdf

などお好みの編集ツールでプログラムを記述していきます。
model.sdf
<?xml version='1.0'?>
  <sdf version='1.4'>
    <model name="my_robot">
    <static>true</static>
      <link name='chassis'>
        <pose>0 0 .1 0 0 0</pose>

        <collision name='collision'>
          <geometry>
            <box>
              <size>.4 .2 .1</size>
            </box>
          </geometry>
        </collision>

        <visual name='visual'>
          <geometry>
            <box>
              <size>.4 .2 .1</size>
            </box>
          </geometry>
        </visual>
      </link>
  </model>
</sdf>

 

gazebo_makerobot_04

 

SDFファイルのタグ説明の要約は以下のようになります。

 

sdfファイルの要約

model name:作成するモデル全体の名前

 

link name:各リンクごとの名前

 

pose:x座標[m],   y座標[m],  z座標[m],  roll[deg],  pitch[deg],   yaw[deg]の引数をとる

 

collision:衝突検知で使用する形状を指定する

 

visual:レンダリングで使用する形状を指定する

 

geometry:ジオメトリの定義、stlなどを呼び出す場合は<geometry><mesh><uri>stlファイルのパス</uri></mesh></geometry>を使用する

 

他にも、様々なタグの種類があるので、使用毎に解説を追加するようにします。

ひとまずはこのようなタグがあることを理解しておけば問題ありません。

 

また、上記の

<size>.4 .2 .1</size>

「0.4×0.2×0.1[m]」の長方形を表しています。

 

プログラムの記述が終わったら、保存してモデルを表示していきましょう。

 

Gazeboで長方形モデルを表示する

 

XmingなどのGUI表示アプリケーションを起動していおき、(Ubuntu Desktopなら起動しなくても良い)ターミナルから

gazebo

とコマンドを入力して実行しましょう。

 

するとGazeboのGUIが表示されるので

右側のパネル Insert → My Robot

を選択して、モデルを画面上に読み込みましょう。

 

gazebo_makerobot_05

 

クリックを押すと好きな位置にモデルを配置できるので、配置できたら完了です。

 

Gazeboでロボットモデルを動作させる

Gazeboの基本操作を理解したら、実際にリンクやジョイントを使用してモデルを動かしてみましょう。

 

ロボットにリンクを追加する

好みの編集モードを使って「model.sdf」ファイルを編集し、ロボットに様々なリンクを追加していきます。

まずは<visual name = ‘visual’>・・・</visual>の下に以下の記述を追加します。

 

model.sdf

<collision name='caster_collision'>
  <pose>-0.15 0 -0.05 0 0 0</pose>
  <geometry>
      <sphere>
      <radius>.05</radius>
    </sphere>
  </geometry>

  <surface>
    <friction>
      <ode>
        <mu>0</mu>
        <mu2>0</mu2>
        <slip1>1.0</slip1>
        <slip2>1.0</slip2>
      </ode>
    </friction>
  </surface>
</collision>

<visual name='caster_visual'>
  <pose>-0.15 0 -0.05 0 0 0</pose>
  <geometry>
    <sphere>
      <radius>.05</radius>
    </sphere>
  </geometry>
</visual>

 

gazebo_makerobot_06

 

上記のプログラムの中で

<geometry>
  <sphere>
    <radius>.05</radius>
  </sphere>
</geometry>

と<sphere>タグでジオメトリを設定しているので、半径0.05mの球が指定の座標に追加されます。

 

gazebo_makerobot_07

※上図の赤枠が、追加された球のジオメトリ

 

さらに、ロボットのホイールとなるリンクを、先ほどのリンクの下に記述します。

 

<link name="left_wheel">
  <pose>0.1 0.13 0.1 0 1.5707 1.5707</pose>
  <collision name="collision">
    <geometry>
      <cylinder>
        <radius>.1</radius>
        <length>.05</length>
      </cylinder>
    </geometry>
  </collision>
  <visual name="visual">
    <geometry>
      <cylinder>
        <radius>.1</radius>
        <length>.05</length>
      </cylinder>
    </geometry>
  </visual>
</link>

<link name="right_wheel">
  <pose>0.1 -0.13 0.1 0 1.5707 1.5707</pose>
  <collision name="collision">
    <geometry>
      <cylinder>
        <radius>.1</radius>
        <length>.05</length>
      </cylinder>
    </geometry>
  </collision>
  <visual name="visual">
    <geometry>
      <cylinder>
        <radius>.1</radius>
        <length>.05</length>
      </cylinder>
    </geometry>
  </visual>
</link>

 

gazebo_makerobot_08

 

上記のプログラムの中で

  <cylinder>
    <radius>.1</radius>
    <length>.05</length>
  </cylinder>
</geometry>

と<cylinder>タグでジオメトリを設定しているので、半径0.1、長さ0.05の円筒が指定の座標に追加されます。

 

gazebo_makerobot_09

 

これで、簡単なAGVロボットのモデルが完成しましたね。

 

ロボットにジョイントを追加する

では、最後にロボットへジョイントを追加していきます。

ジョイントを追加して、ロボットを動かす場合はmodel.sdfの<static>タグを動的に設定します。

 

<static>false</static>

 

さらに、動作する軸の位置や回転軸を最後の<link>タグ直下に追加します。

 

model.sdf

<joint type="revolute" name="left_wheel_hinge">
  <pose>0 0 -0.03 0 0 0</pose>
  <child>left_wheel</child>
  <parent>chassis</parent>
  <axis>
    <xyz>0 1 0</xyz>
  </axis>
</joint>

<joint type="revolute" name="right_wheel_hinge">
  <pose>0 0 0.03 0 0 0</pose>
  <child>right_wheel</child>
  <parent>chassis</parent>
  <axis>
    <xyz>0 1 0</xyz>
  </axis>
</joint>

 

jointタグの要約

joint type:回転を意味するrevoluteに設定

 

chile:子リンク先の設定で、right_wheelを指定

 

parent:親リンクの設定で、chassisを指定

 

axis xyz:今回の場合はY軸回りの回転を定義

 

joint タグでは、各リンクの関係や回転軸を定義すると覚えていればOKです。

これらを理解できたら、実際にロボットの動作をGazeboで確認してみましょう。

 

ロボットの動作を確認する

ターミナルから

gazebo

を実行し、Insertでモデルを画面へ表示したら「右側パネル」を開きます

 

右側パネルはデフォルトで非表示となっており

右側のバーをクリックしてドラッグする

ことで開くことできます。

 

するとForceタブが見つかるので

各ジョイントのForce:0.1N-m

に設定してタイムラインから再生をクリックしてみましょう。

 

gazebo_makerobot

 

このように、作成したロボットが動き出したら確認完了です。

 

以上、Gazeboでロボットモデルを作成し動作させるまででした。

Gazeboでロボットのシミュレーションする上では今回の内容は基礎知識となるので、是非挑戦してみてください。

 

お疲れ様でした。

gazebo_make_robot_top
学びに関する情報をチェック!