Isaac SimでROSで使用するための2Dマップを作成する
2D(2次元)マップとは
ROSのnavigationなどでは2次元マップを使用して自己位置認識を行います。これは通常、動作させる環境であらかじめロボットを動作させ、そこで得られたLidarデータを使用してgmappingなどで作成します(シミュレーション環境においても同様)。
この手順には以下の問題があります。
- 手間がかかる
- gmappingはいわゆるSLAMなので地図にズレが生じることがある
"Isaac Sim"ではシミュレーション環境の2次元マップを作成する機能が実装されています。シミュレーション環境のあるZ座標について水平面で切ったときのマップを簡単に作成できます。
公式解説
作成してみる
サンプルの"full_warehouse"環境を使用します。
Create -> Isaac -> Environments -> Full Warehouse
Map作成機能を開きます。
Isaac Utils -> Occupancy Map
"Origin"は基準の座標を指定します。ここでは(200,0,120)を設定します。右のウィンドウからfull_warehouseのPrimを選択して"Positioning"の"BOUND SELECTION"ボタンを押すと範囲が自動で設定されます。 おそらく選択しているオブジェクトを内包するXY空間を自動で設定していると思われます。最後に"Upper Bound"のZ座標を"300"に設定します。
上記を設定した例
"Occupancy Map"の"CALUCULATION"ボタンを押したあと"VISUALIZE MAP"を押すと2Dマップ化された画像が表示された"Visualization"ウィンドウが表示されます。
フォークリフトの一部が地図に写っている
"Origin"のZ座標を変更すると地図に通路上の障害物が表示されます。"Upper Bound"と"Lower Bound"のZ座標の範囲設定についてはよくわかりません。ただ、この範囲を狭くすると壁が薄くなったりするので、範囲空間内に対して障害物の割合でそこに何かがあるかを判定しているものと思われます。基本的には"Origin"のZ座標を基準に地図を作成して、壁などの連続的なオブジェクトに対してはこの"Upper Bound"と"Lower Bound"のZ範囲で補完するという感じでしょうか。
これはOriginのZ座標を10.0にした例
ROSで使用する場合は".png"(画像ファイル)と".yaml"が必要ですが、yamlは"Coodinate Type"を"ROS Occupancy Map Parameter File(YAML)"に設定すると下のウィンドウにテキストとして表示されますので、ファイルにペーストして保存します。
yamlは自分でコピペする
Discussion