検証日時
01/25/2015 (Sun)
概要
Gazeboのチュートリアル第二弾「Build a Robot」。
このチュートリアルではロボットを作ったり、修正したりします。また、センサ、アクチュエータを搭載した車輪型ロボットを作り、モデルを描画するなどの実践例も行います。
今回はその「Make a Mobile Robot」編です。
公式サイトを適当に翻訳しただけですので、あしからず。
レベル
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
レベル
BEGINNER
はじめに
このチュートリアルでは、デファレンシャル駆動機構をもつ二輪移動ロボットを作るプロセスを通じて、Gazeboの基本的なモデルマネジメントを学び、モデルデータベースの中でのベーシックモデル描写についても詳しく学びます。
モデルディレクトリのセットアップ
モデルデータベースドキュメント を読んでください。Gazeboモデルデータベースディレクトリ構成のフォーマットルールに従ったモデルを作成します。また、モデルの構成フォーマットについての詳細はSDFリファレンス をご覧ください。
モデルディレクトリを作成します。:
1
mkdir -p ~/.gazebo/models/my_robot
ファイルmodel.config
を作成します。:
1
gedit ~/.gazebo/models/my_robot/model.config
中身は以下の内容にしてください。:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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>
ファイル~/.gazebo/models/my_robot/model.sdf
を作成してください。
1
gedit ~/.gazebo/models/my_robot/model.sdf
また、その中身は以下の内容にしてください。
1
2
3
4
5
<?xml version='1.0'?>
<sdf version= '1.4' >
<model name= "my_robot" >
</model>
</sdf>
ここまでで、モデルの基本的なコンテンツを作成しました。model.config
ファイルではいくつかの追加メタデータによりロボットを記述しています。model.sdf
ファイルにはSDF version 1.4にリンクされたGazeboを使用するmy_robot
という名前のモデルを初期化するために必要なタグが記述されています。
モデルの構成を作成する
このステップでは、長方形の本体に2つの車輪も持つモデルを制作してゆきます。
まずは、シンプルなモデルから始め、段階を踏んでモデルを組み立ててゆくことが重要です。最初のステップはモデルの基本的な形状を作成することです。そのために、まずは、静的なモデルを作成します。つまり、物理エンジンについては無視したものから作成するということです。その結果、モデルは一定の場所から移動せず、構成要素を詳細に整理することができるようになります。
モデルを静的にするために、~/.gazebo/models/my_robot/model.sdf
ファイルに<static>true</static>
を追加してください。すると、以下のようなソースコードになるはずです。
コピーはしないでください。手書きで追加していくことが、今回のチュートリアルです。
1
2
3
4
5
6
<?xml version='1.0'?>
<sdf version= '1.4' >
<model name= "my_robot" >
<static> true</static>
</model>
</sdf>
長方形のロボット本体のモデルを追加するために、~/.gazebo/models/my_robot/model.sdf
を以下のように編集してください。すると以下のようなソースコードになるはずです。
コピーはしないでください。手書きで追加していくことが、今回のチュートリアルです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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>
これで、大きさが0.4 x 0.2 x 0.1 [m]
の箱
を作ることが出来ました。衝突要素は衝突判定エンジンに使用されるような形状で定義されています。外観要素はレンダリングエンジンに使用されるような形状で定義されています。ほとんどのケースでは、衝突要素と外観要素は同じです。外観要素と衝突要素が異なる場合というのは、外観要素が複雑なメッシュを使用しており、外観要素より、衝突要素のほうがシンプルになる様な場合です。そのような場合には、パフォーマンスの向上を図るために行います。
Gazeboを起動し、作成したモデルを確認しましょう。GUIに表示されるinsertmodelgui というボタンからInsert Model というボタンを押して作成したモデルをインポートしましょう。以下のコマンドで、Gazeboを起動します。:
うまく行けば、写真のように白い箱が見えるでしょう。また、地面から1[m]
浮かんでいるはずです。
今度は、ロボットにキャスターを追加しましょう。物理エンジンにおいて、ジョイントを用いたタイヤを使ってキャスターにするより、摩擦なしの球を使うほうが、モデルを単純化できるため、キャスターは摩擦なしの球にします。それでは、model.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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?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>
<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>
</link>
</model>
</sdf>
ロボットの後方にキャスターが追加されることを確認してください。先ほどの手順と同じようにしてGazeboにモデルをスポーンさせてください。(Gazeboを再起動する必要はありません。というのも、コードを変更するたびに、Gazeboはモデルをリロードするためです。)
うまく行けば、以下のようになります。
続いて、左タイヤを追加しましょう。model.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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?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>
<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>
</link>
<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>
</model>
</sdf>
先ほどと同じように、Gazeboで作成したモデルを確認し、追加したタイヤが正しく付いていることを確認しましょう。ちなみに、さっきまでのモデルは削除しました。(モデルを右クリックし、Delete をクリックすれば、削除できます)
左タイヤをコピーして右タイヤを作り、リンクの姿勢にタイヤを合わせましょう。以下のようにmodel.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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?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>
<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>
</link>
<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>
</model>
</sdf>
これで、2つの車輪を持った台車を作ることが出来ました。先ほどと同じように、Gazeboで確認してみましょう。以下のようになっているはずです。
<static>
をfalse
にし、左右のタイヤのヒンジを追加しましょう。以下のようにmodel.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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?xml version='1.0'?>
<sdf version= '1.4' >
<model name= "my_robot" >
<static> false</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>
<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>
</link>
<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>
<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>
</model>
</sdf>
2つのジョイントをy
方向<xyz>0 1 0</xyz>
に回るようにし、台車に接続します。
Gazeboを起動し、今作成したモデルを挿入してください。画面右側に写っている白い長方形(カラム)をクリックし、左側にドラッグしてください。
すると、それぞれのジョイントの様々なコントロールを含むウィンドウが出現するでしょう。(コントロールしたいモデルが選択されていることを確認してください。)
Force タブの下にあるコントロールから、それぞれのジョイントの力を約0.1[N・m]
に増加させてください。すると、ロボットが動き始めるはずです。(下動画を参考にしてください)
VIDEO
おめでとうございまぁす!これで基本的なロボットモデルが作れました!
自分で試してみましょう
新しいロボットをどんどん作りましょう !