ここでは「Ubuntu Server 20.04.2 LTS」と「Gazebo」をインストールした「Raspberry Pi 4 Model B」でMake a Mobile Robotのチュートリアルを試すまでの手順を紹介します。
この記事を読むことで
Gazeboでロボットモデルを作成する方法
Gazeboでロボットを動作させる方法
を知ることができ
上図のように、ロボットモデルを動作させる基礎を学ぶことができます。
ロボットをGazeboでシミュレーションする予定のある方や、Gazeboを触ってみたいという方は是非挑戦してみてください。
それでは早速始めていきましょう。
※ この記事は
を参考にしています。
Gazeboでの準備とモデル表示の基礎
まずはGazeboでモデルのデータベースとなるディレクトリを準備して、簡単な長方形モデルを表示してみます。
Gazeboモデルのデータ準備
始めに、モデルのディレクトリを.gazebo/models下にmy_robotという名前で準備をします。
この.gazeboフォルダですが、普段は隠しファイルに設定されており見えないようになっています。
ls -al
ls -la
などのaオプションを使って隠しファイルを表示してみましょう。
.gazeboフォルダがあることが分かりますね。
と絶対パスを指定して、先ほど作成したディレクトリを確認することもできます。
そしたら以下のコマンドを実行し、model.configファイルを作成・編集します。
.configファイルとはチュートリアルによると
と説明がありますが、ロボットの名前、バージョン、要約を記述するファイルと考えてもらって大丈夫かと思います。
gedit(ジーエディット)で編集をする場合は、XmingなどのGUI表示アプリケーションを使用してください。
もちろん
など好みの編集モードでプログラムを記述しても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など保存をしておきましょう。
続いて、ロボットモデルのリンク、ジョイントなどの詳細情報を定義するmodel.sdfファイルを作成・記述していきます。
という認識でひとまずOKです。
gedit ~/.gazebo/models/my_robot/model.sdf
sudo nano 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>
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>を使用する
他にも、様々なタグの種類があるので、使用毎に解説を追加するようにします。
ひとまずはこのようなタグがあることを理解しておけば問題ありません。
また、上記の
は「0.4×0.2×0.1[m]」の長方形を表しています。
プログラムの記述が終わったら、保存してモデルを表示していきましょう。
Gazeboで長方形モデルを表示する
XmingなどのGUI表示アプリケーションを起動していおき、(Ubuntu Desktopなら起動しなくても良い)ターミナルから
とコマンドを入力して実行しましょう。
するとGazeboのGUIが表示されるので
を選択して、モデルを画面上に読み込みましょう。
クリックを押すと好きな位置にモデルを配置できるので、配置できたら完了です。
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>
上記のプログラムの中で
<geometry> <sphere> <radius>.05</radius> </sphere> </geometry>
と<sphere>タグでジオメトリを設定しているので、半径0.05mの球が指定の座標に追加されます。
※上図の赤枠が、追加された球のジオメトリ
さらに、ロボットのホイールとなるリンクを、先ほどのリンクの下に記述します。
<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>
上記のプログラムの中で
<cylinder> <radius>.1</radius> <length>.05</length> </cylinder> </geometry>
と<cylinder>タグでジオメトリを設定しているので、半径0.1、長さ0.05の円筒が指定の座標に追加されます。
これで、簡単な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で確認してみましょう。
ロボットの動作を確認する
ターミナルから
を実行し、Insertでモデルを画面へ表示したら「右側パネル」を開きます。
右側パネルはデフォルトで非表示となっており
ことで開くことできます。
するとForceタブが見つかるので
に設定してタイムラインから再生をクリックしてみましょう。
このように、作成したロボットが動き出したら確認完了です。
以上、Gazeboでロボットモデルを作成し動作させるまででした。
Gazeboでロボットのシミュレーションする上では今回の内容は基礎知識となるので、是非挑戦してみてください。
お疲れ様でした。