mc_rtcにおける環境データの作成

本ガイドでは、mc_rtcその他のJRL/LIRMMソフトウェアに対応した環境を作成する方法について説明します。

本ガイド内のスクリーンショットは、Blender 2.78から取り込んだものですが、最近のバージョンのBlenderでも内容は同じです。

作業を始める前の準備

必要なソフトウェア

  1. Blender
  2. robot_script

BlenderをUbuntuシステムにインストールする場合、Blenderの機能をフル活用できるように、Thomas SchiexのPPA を使用することを推奨します。特に、リポジトリ版のBlenderでは、COLLADA形式ファイル(.daeファイル)のインポートはサポートされていません。

robot_scriptは、Blenderスクリプトとシェルスクリプトの集まりです。本ガイドでは、これを使用して、完全に機能するmc_rtc環境をBlenderファイルから作成します。

Blenderのアドオンをインストールする

  1. mkdir -p $HOME/.config/blender/$(blender -v|awk '{print $2}')/scripts/addons
  2. robot_scriptをコピーしてrobot_scriptフォルダーに移動します。
  3. cp -r blender_addons/io_qconvex/ $HOME/.config/blender/$(blender -v|awk '{print $2}')/scripts/addons
  4. Blenderを起動します。
  5. 以下の図のように、 “Import-Export: qconvex cloud format(インポートとエクスポート: qconvex点群形式)”チェックボックスをオンにし、アドオンを有効にします。

blender_addon_activation

手順1で、アドオンを格納する空のフォルダーが作成され、手順3で、アドオンがそのフォルダーにコピーされます。

環境モデルを取得する

ここでは、3次元環境のモデリングについて詳しく説明します。このページの残りの部分では、こちらで用意されているモデルを使用して作業します。このモデルをBlenderで開くと、”ground”(地面)という名前の大きな平面が表示され、その中央に”pole”(柱)という名前の円筒が垂直に立っているのが見えます。

blender_model_start

スケールに関する注記

モデルのメッシュに単一変数のスケールが設定されていることを確認してください。これを設定するには、シーン内の各オブジェクトにスケールパラメーターを適用します。

  1. シーン内のオブジェクトを選択します(ショートカット: A)
  2. [Apply(適用)]をクリックします(ショートカット: Ctrl + A)
  3. スケールを選択します。

平面を作成する

このセクションでは、2つの面を作成します。まず、面を作成する基本について説明し、次に、向きに関する重要な問題について説明します。

地面を作成する

はじめに、地面に相当する面を作成します。

  1. “ground”オブジェクトを選択します(地面のメッシュ上で右クリック)。
  2. Edit(編集)モードに切り替えます(ショートカット: Tab)。
  3. 上面を選択します(面選択ツールをクリックし、上面を右クリック)。
  4. 選択した面をコピーします(ショートカット: Shift + D)。さらに、Escを押して、選択した面を元の位置に戻します。
  5. 選択した面を”ground”オブジェクトから切り離します(ショートカット: P。さらに、[Selection(選択)]を選択)。
  6. “ground.001”(地面.001)という名前の新しいオブジェクトが作成されます。このオブジェクトの名前を”Ground”(地面)に変更します。
  7. “Ground”オブジェクトの原点をこの形状内に設定します。
  8. “Ground”オブジェクトを選択してから、”ground”オブジェクトを選択します(シーンの階層内で”Ground”をクリックしてから、Shiftを押しながら”ground”をクリック)。
  9. “ground”を”Ground”の親として設定します(ショートカット: Ctrl + P。さらに、[Keep transform(変換を維持)]を選択)。
  10. 値が何も設定されていない”surface”(表面)という名前のカスタムプロパティを、”Ground”オブジェクトに追加します。

お疲れ様でした。これで、最初の面が作成されました。

この手順については、こちらの動画を参照してください。

命名規則に関する注記

mc_rtc内のほとんどの環境では、以下の命名規則に基づいて名前が付けられています。ユーザーが名前を付ける場合もこの規則に従うことを推奨します。

  1. ボディの名前は小文字で表す(例: “ground”、”stair_step_1”)
  2. 面の名前はキャメルケース(各構成語の先頭を大文字にする記法)で表す(例: “Ground”、”StairStep1”)
  3. 衝突メッシュは小文字で表し、末尾に”_hull”を付ける(例: “ground_hull”、”stair_step_1_hull”)

GroundSide面を作成する

2番目の面として、地面のいずれかの側面に対応する面を作成します。これは実用的な意味はありませんが、この手順を通じて、向きの重要性と向きの変更方法について説明します。まず、前述の手順を再度実行しますが、今度は、地面メッシュの側面を使用して”GroundSide”面を作成します。

環境を作成したとき、この側面が期待した方向を向いていないことに気付くと思います。これは、オブジェクトのローカルフレームが正しくないためです。Z軸(Blenderでは青で表示)を面の法線と一致させる必要があります。

  1. “GroundSide”オブジェクトを選択します。
  2. グローバルフレームではなくローカルフレームの表示が有効になっていることを確認します。
  3. Y軸周りにオブジェクトを90°回転させます(ショートカット: R。さらに、Yを押してY軸をロックし、キーボードのテンキーで”90”と入力してEnterを押す)。
  4. Edit(編集)モードに切り替えます(ショートカット: Tab)。
  5. メッシュ内のすべての点を選択します(ショートカット: A)
  6. Y軸周りにオブジェクトを-90°回転させます。

お疲れ様でした。これで、向きに関する問題が解決されました。

この手順については、こちらの動画 を参照してください。

平面の作成に関する注意事項

平面の作成に関する注意事項

自分が設計した面と他の面との間に接触面を作成すると、自分が設計した面上の点に接触力が発生します。これは、面に含まれる点の数が多いほど、より多くの変数が問題に追加されることを意味します。そのため、面をできるだけシンプルに設計するように(すなわち、単一の四角形で構成するように)してください。特に、ロボットの表面を設計する際は、この点に注意してください。

また、面を構成する点は、同一平面上になければなりません。そうでない場合、環境を正しく生成できません。

円筒面を作成する

このセクションでは、単一の円筒面を作成します。この場合も、平面の場合と同じく向きの問題が発生します。ここでは、Z軸を円筒の円筒軸とし、X軸を円筒の極軸とします。

  1. “pole”オブジェクトを選択します。
  2. オブジェクトの原点にカーソルをスナップさせます(ショートカット: Shift + S。さらに、カーソルを選択します)。
  3. 十字(Plain Axes)オブジェクトを選択し、名前を”Pole”(柱)に変更します。
  4. “pole”を”Pole”の親として設定します。
  5. “cylindrical”という値が設定された”surface”という名前のカスタムプロパティを追加します。
  6. 円筒の半径が設定された”radius”(半径)という名前のカスタムプロパティを追加します。
  7. 円筒の長さが設定された”width”(幅)という名前のカスタムプロパティを追加します。

お疲れ様でした。これで、最初の円筒面が作成されました。

この手順については、こちらの動画を参照してください。

デフォルトでは、Blenderのカスタムプロパティの値は[0, 1]の範囲に制限されています。円筒の”width”プロパティを正しく設定しないと問題が発生する可能性があるため、このプロパティを設定する際は注意してください。

衝突メッシュを追加する

衝突メッシュを追加するには、新しいメッシュを追加し、”hull”という名前の空のプロパティを追加します。

モデル内の各ボディについては、生成スクリプトによって凸メッシュが作成されるため、それらについてはメッシュを作成する必要はありません。

次の手順に移る前に、こちらからチュートリアルの結果を入手できます。

環境を作成する

robot_scriptフォルダーに移動し、以下のようにdo_all.shスクリプトを実行します。

./do_all.sh my_file.blend /path/to/ros/package env_name package_name

mc_env_descriptionパッケージに環境を追加する場合は、package_name(パッケージ名)を省略しても構いません。

環境をテストする

表面の可視化に関するチュートリアルを参照してください。

よくある問題

面の位置が正しくない

Blenderプロジェクト内で、面オブジェクトの原点が意図したとおりに設定されているか確認してください。

面の向きが正しくない

Blenderプロジェクト内で、面の法線が正しい方向を向いているか確認してください。オブジェクトのローカルフレームが表示されているか確認してください。

ロボットに面を追加する

ロボットに面を追加するには、環境作成時と同じ手順を実行します。ただし、この場合は面を追加したいロボットのボディが環境モデルとなります。さらに、一時ディレクトリ内に「環境」を作成し、生成されたRSDFファイルを元のロボット記述フォルダーで使用します。