Main Content

occupancyMap3D

3 次元占有マップの作成

説明

occupancyMap3D クラスは、3 次元マップとマップ情報を格納します。マップは、八分木データ構造に確率値として格納されます。このクラスは任意の環境に対応し、観測入力に基づいて動的にそのサイズを拡張します。観測値を点群または特定の xyz の位置として追加できます。これらの観測値は確率値を更新します。確率値は位置の占有を表します。八分木データ構造では、データを適切に平衡化してメモリとディスク両方の効率を維持します。

作成

説明

omap = occupancyMap3D は、観測値をもたない既定のプロパティ値を使用した空の 3 次元占有マップを作成します。

omap = occupancyMap3D(res) は、マップの分解能 (セル数/メートル) を指定し、Resolution プロパティを設定します。

omap = occupancyMap3D(res,Name,Value) は、1 つ以上の Name,Value 引数のペアによって指定された追加オプションでオブジェクトを作成します。たとえば、'FreeThreshold',0.25 では、セルを障害物なしと見なすしきい値を 0.25 の確率値として設定します。プロパティ名はそれぞれ引用符で囲みます。

プロパティ

すべて展開する

グリッド分解能 (1 メートルあたりのセル数)。スカラーとして指定します。構築時の分解能を指定します。この値を超える精度の観測を挿入すると丸められ、この分解能で適用されます。

セルを障害物なしとして見なすしきい値。正のスカラーとして指定します。このしきい値未満の確率値は、障害物なしと見なされます。

セルを占有状態として見なすしきい値。正のスカラーとして指定します。このしきい値を上回る確率値は、占有状態と見なされます。

確率値の飽和制限。[min max] ベクトルとして指定します。この飽和値を上回る値または下回る値は、min 値または max 値に設定されます。このプロパティは、複数の観測値を組み込む際に、セルの飽和過剰を軽減します。

オブジェクト関数

checkOccupancyCheck if locations are free or occupied
getOccupancyGet occupancy probability of locations
inflateInflate map
insertPointCloudInsert 3-D points or point cloud observation into map
rayIntersectionFind intersection points of rays and occupied map cells
setOccupancySet occupancy probability of locations
showShow occupancy map
updateOccupancyUpdate occupancy probability at locations

すべて折りたたむ

occupancyMap3D オブジェクトは、センサーの観測値を使用して環境のマップを作成して、障害物を 3 次元空間に格納します。マップを作成し、点群から障害物を特定する点を追加します。次にマップ内の障害物をインフレートして、障害物の周囲の安全な動作空間を確保します。

10 セル数/メートルのマップ解像度で occupancyMap3D オブジェクトを作成します。

map3D = occupancyMap3D(10);

一連の 3 次元の点を姿勢 [x y z qw qx qy qz] からの観測値として定義します。この姿勢はこれらの点を観測するセンサー用で、中心が原点上にあります。複数の観測値を挿入する 2 組の点を定義します。

pose = [ 0 0 0 1 0 0 0];

points = repmat((0:0.25:2)', 1, 3);
points2 = [(0:0.25:2)' (2:-0.25:0)' (0:0.25:2)'];
maxRange = 5;

insertPointCloud を使用して 1 組目の点を挿入します。この関数は、センサーの姿勢と指定された点を使用して、観測値をマップに挿入します。表示されている色は、わかりやすく説明する目的のためにのみ点の高さと関連します。

insertPointCloud(map3D,pose,points,maxRange)
show(map3D)

Figure contains an axes object. The axes object with title Occupancy Map contains an object of type patch.

2 組目の点を挿入します。センサーの姿勢 (原点) とこれらの点の間の光線は、前に挿入した点とオーバーラップします。したがって、センサーと新しい点の間の自由空間が更新されて、自由空間とマークされます。

insertPointCloud(map3D,pose,points2,maxRange)
show(map3D)

Figure contains an axes object. The axes object with title Occupancy Map contains an object of type patch.

マップをインフレートして、障害物の周囲の安全な動作のためにバッファー ゾーンを追加します。ビークル半径と安全距離を定義し、これらの値の合計を使ってマップのインフレーション半径を定義します。

vehicleRadius = 0.2;
safetyRadius = 0.3;
inflationRadius = vehicleRadius + safetyRadius;
inflate(map3D, inflationRadius);

show(map3D)

Figure contains an axes object. The axes object with title Occupancy Map contains an object of type patch.

アルゴリズム

すべて展開する

参照

[1] Hornung, Armin, Kai M. Wurm, Maren Bennewitz, Cyrill Stachniss, and Wolfram Burgard. "OctoMap: an efficient probabilistic 3D mapping framework based on octrees." Autonomous Robots, Vol. 34, No. 3, 2013, pp. 189–206.. doi:10.1007/s10514-012-9321-0.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2019b で導入