検証日時
02/03/2015 (Tue)
概要
Gazeboのチュートリアル第三弾「Build a World」。
このチュートリアルでは、シミュレーション中の環境をどのように構築するかについて説明します。
今回はその「Population of models」編です。
公式サイトを適当に翻訳しただけですので、あしからず。
レベル
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 |
参考
はじめに
このチュートリアルでは、SDFの<population>
タグを使ってどのようにしてモデルを集合化するかを説明します。集合は個々のモデルによって構成されています。
モデルの集合を追加することは以下のようなパラメータをいちいち定義する問題であるということです。
モデル : 机や缶など
いくつかの集合の一部となる物体
集合を入れておくコンテナの形状と寸法 : 箱、円柱などです。これらのパラメータを知るには、SDFのAPIをご覧ください。
集合のポジションと原点
集合に含まれる物体の配置 : ランダム、グリッド
詳しい説明は、<population>
タグとそのパラメータについてのSDF APIをチェックしてください。
物体の集合を作る
- チュートリアル用のディレクトリを作りましょう。
1 2 |
|
- 作ったディレクトリに、以下のような内容で、
can_population.world
を作成してください。
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 |
|
また、coke_cam modelより、coke_canのモデルを取得し、~/.gazebo/models/
に置いておきましょう。
その後、Gazeboを立ち上げましょう。
1
|
|
すると、ソーダの缶の集合がバラバラに置いてあるのが確認できるでしょう。缶は2 x 2 x 0.01 [m]の大きさの箱に収まるようにしてあります。
より深く理解するために、先ほどのcan_population.world
に他の要素を追加してみましょう。
1 2 3 4 5 6 7 |
|
ここまでで、<population>
タグを使い、どのようにして集合の要素を決定するかがわかりました。すべての集合は、同一でない、個々の名前を持つ必要があり、name
の部分で定義されています。population
タグの中では、<model>
タグを使ってモデルを選択できます。集合のそれぞれの要素は、重複しない名前でシミュレーションに挿入されます。また、その名前というのは、サフィックス_clone_i
(i
は集合の要素の個数で決定されます)によって名付けられます。Gazeboには以下のようなモデルのリストと共に、物体が表示されます。
集合の最も一般的なタイプは、木や岩、建物などの動かない物体で構成されています。<population>
タグはそのような静的なモデルで使用することをおすすめます。また、より詳しい定義が必要で、数が少ない、ロボットの様な動的物体には使用しないことをおすすめします。
1 2 3 4 |
|
上記のコードは物体をどこに設置するのかについて定義しています。今回は、すべての物体は、2 2 0.01の3Dの箱の中にスポーンします。また、原点(0, 0, 0)を(0, 0, 0)にセンタリングしてあります。続いて、<box>
について説明します。<cylinder>
の部分では、半径、長さを定義することができます。<cylinder>
パラメータについて詳しく知りたい場合は、SDF Specificationをチェックしてみてください。<pose>
要素では、集合の場所のフレームを定義しています。
1
|
|
上記部分では、集合に、何個の物体を定義するかを決定します。正の数字であれば何でも良いですが、数を大きくすると、パフォーマンスに大きな影響を及ぼすといういうことを念頭に置いておいてください。
1 2 3 |
|
上記に示す<distribution>
要素では、物体をどのように配置するかを定義します。
Distributionの種類
random : モデルをランダムに配置します。物体同士がぶつかる可能性があることを覚えておいてください。
uniform : 偽似2Dグリッドパターンに沿ってモデルを配置します。
K-Means
を使うことにより、解決に近づき、範囲内に定義された物体の数を定義できます。grid : モデルを2Dのグリッドパターン上に配置します。この配置は行、列, 物体間距離を定義する必要があります。
<model_count>
要素は、この配置では無視されるということを覚えておいてください。シミュレーションに挿入される物体は行と列の数を掛けあわせた数と一致します。linear-x : X軸に沿ってモデルが並びます。
linear-y : Y軸に沿ってモデルが並びます。
linear-z : Z軸に沿ってモデルが並びます。
もっとたくさんの例を確認したいならば、population.worldファイルをGazeboと共に立ち上げてください。
もちろん、その場合には、以下のように入力しましょう。:
1
|
|
以下のキャプチャは、population.world
を実行した様子です。