Main Content

occupancyMap

2 次元占有マップの作成

R2019b 以降

説明

occupancyMap は、2 次元占有グリッド マップ オブジェクトを作成します。占有グリッドの各セルは、セルの占有確率を表す値をもちます。1 に近い値は、セルに障害物の含まれる確率が高いことを表します。0 に近い値は、セルが占有されておらず障害物のない確率が高いことを表します。

占有マップは、パス計画などのナビゲーション アルゴリズムで使用されます (plannerRRT を参照)。また、衝突のないパスの検出、衝突回避、位置推定の計算を行う地図作成アプリケーションでも使用されます (monteCarloLocalization を参照)。特定の用途に合わせて占有マップを修正できます。

occupancyMap オブジェクトは、ローカル座標、ワールド座標およびグリッド インデックスをサポートします。インデックス (1,1) をもつ最初のグリッド位置は、グリッドの左上隅で開始します。

occupancyMap クラスを使用して、実世界のさまざまな障害物を表す確率値をもつ 2 次元の環境マップを作成します。セルの正確な確率値を指定するか、レーザー スキャナーなどのセンサーからの観測値を含めることができます。

各グリッド セルの占有状態を推定するために、バイナリ ベイズ フィルターを使用して確率値が格納されます。対数オッズ表現が使用され、値が int16 として格納されます。これにより、マップのストレージ サイズが削減され、リアルタイム アプリケーションが可能になります。

作成

説明

map = occupancyMap(width,height) は、幅 width、高さ height (メートル単位) のワールド空間を表す 2 次元占有マップ オブジェクトを作成します。既定のグリッド分解能は 1 メートルあたり 1 セルです。

map = occupancyMap(width,height,resolution) は、指定されたグリッド分解能 (1 メートルあたりのセル数) で占有マップを作成します。resolution は、Resolutionプロパティを設定します。

map = occupancyMap(rows,cols,resolution,'grid') は、指定された行数と列数、および分解能 (1 メートルあたりのセル数) で占有マップを作成します。rowscols の値は、GridSizeプロパティを設定します。

map = occupancyMap(p) は、行列 p の値から占有マップを作成します。グリッド サイズは行列のサイズと一致し、各セルの確率値は行列の位置から解釈されます。

map = occupancyMap(p,resolution) は、指定した行列と分解能 (1 メートルあたりのセル数) から占有マップを作成します。

map = occupancyMap(sourcemap) は、別の occupancyMap オブジェクトの値を使用してオブジェクトを作成します。

map = occupancyMap(sourcemap,resolution) は、別の occupancyMap オブジェクトの値を使用してオブジェクトを作成しますが、指定された分解能をもつように行列をリサンプリングします。

入力引数

すべて展開する

マップの幅。スカラー (メートル単位) として指定します。

マップの高さ。スカラー (メートル単位) として指定します。

グリッド分解能。スカラー (1 メートルあたりのセル数) として指定します。

グリッド内の行数。正のスカラー整数として指定します。

グリッド内の列数。正のスカラー整数として指定します。

入力占有グリッド。0 から 1 の確率値の行列として指定します。グリッドのサイズは行列のサイズに一致します。各行列要素は、グリッド セル位置が占有される確率に対応します。1 に近い値は、セルに障害物が含まれる確かさが高いことを表します。0 に近い値は、セルが占有されておらず障害物がない確かさを表します。

占有マップ オブジェクト。occupancyMap オブジェクトとして指定します。

プロパティ

すべて展開する

下回るとセルを障害物なしと見なすしきい値。0 以上 1 以下のスカラーとして指定します。このしきい値未満の確率値をもつセルは障害物なしと見なされます。このプロパティは、plannerRRT のようなオブジェクトを使用する場合にパス計画のフリー位置も定義します。

データ型: double

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

データ型: double

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

データ型: double

この プロパティ は読み取り専用です。

グリッド内の行と列の数。行数と列数をこの順序で表す 1 行 2 列の実数値ベクトルとして格納されます。

データ型: double

この プロパティ は読み取り専用です。

グリッド分解能。グリッド位置の数とサイズを表すスカラー (1 メートルあたりのセル数単位) として格納されます。

データ型: double

この プロパティ は読み取り専用です。

ローカル座標系での x 座標の最小値と最大値。[min max] 形式の 2 要素の横ベクトルとして格納されます。ローカル座標系は LocalOriginInWorld プロパティによって定義されます。

データ型: double

この プロパティ は読み取り専用です。

ローカル座標系での y 座標の最小値と最大値。[min max] 形式の 2 要素の横ベクトルとして格納されます。ローカル座標系は LocalOriginInWorld プロパティによって定義されます。

データ型: double

この プロパティ は読み取り専用です。

x 座標のワールド範囲の最小値と最大値。最小値と最大値をこの順序で表す 1 行 2 列のベクトルとして格納されます。

データ型: double

この プロパティ は読み取り専用です。

y 座標のワールド範囲の最小値と最大値。最小値と最大値をこの順序で表す 1 行 2 列のベクトルとして格納されます。

データ型: double

グリッドの左下隅のワールド座標 [x,y]。1 行 2 列のベクトルとして指定します。

データ型: double

ワールド座標でのローカル座標系の原点の位置。2 要素ベクトル [xLocal yLocal] として指定します。ビークルの移動に伴ってローカル座標系を移動するには関数 move を使用します。

データ型: double

ローカル座標でのグリッドの左下隅の位置。2 要素ベクトル [xLocal yLocal] として指定します。

データ型: double

マップの外の領域を含む、マップ位置が指定されていない場合の既定値。0 以上 1 以下のスカラーとして指定します。

データ型: double

オブジェクト関数

checkOccupancyCheck if locations are free or occupied
copyCreate copy of 2-D occupancy map
getOccupancyGet occupancy probability of locations
grid2localグリッド インデックスをローカル座標に変換
grid2worldグリッド インデックスをワールド座標に変換
inflateInflate each occupied location
insertRayInsert ray from laser scan observation
local2gridローカル座標をグリッド インデックスに変換
local2worldローカル座標をワールド座標に変換
moveMove map in world frame
occupancyMatrix占有マップを行列に変換
raycastCompute cell indices along a ray
rayIntersectionFind intersection points of rays and occupied map cells
setOccupancy位置の占有確率を設定
showDisplay 2-D occupancy map
syncWithSync map with overlapping map
updateOccupancyUpdate occupancy probability at locations
world2gridワールド座標をグリッド インデックスに変換
world2localワールド座標をローカル座標に変換

すべて折りたたむ

空の占有グリッド マップを作成します。

map = occupancyMap(10,10,20);

ビークルの姿勢、距離、角度およびレーザー スキャンの最大距離を指定します。

pose = [5,5,0];
ranges = 3*ones(100,1);
angles = linspace(-pi/2,pi/2,100);
maxrange = 20;

指定された距離と角度を使用して lidarScan オブジェクトを作成します。

scan = lidarScan(ranges,angles);

レーザー スキャン データを占有マップに挿入します。

insertRay(map,pose,scan,maxrange);

マップを表示して、レーザー スキャン挿入の結果を確認します。

show(map)

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

ビークルのすぐ前の位置の占有状態を確認します。

getOccupancy(map,[8 5])
ans = 0.7000

2 番目の読み取り値を追加し、占有値の更新を表示します。追加の読み取りによって、読み取り値の信頼度が上がります。フリー値と占有値の区別がより明確になります。

insertRay(map,pose,scan,maxrange);
show(map)

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

getOccupancy(map,[8 5])
ans = 0.8448

ROS マップを含む Portable Graymap (PGM) ファイルを、MATLAB で使用するために occupancyMap に変換します。

imread を使用してイメージをインポートします。イメージを playpen 領域に合わせてトリミングします。

image = imread('playpen_map.pgm');
imageCropped = image(750:1250,750:1250);
imshow(imageCropped)

Figure contains an axes object. The axes object contains an object of type image.

PGM 値は 0 から 255 までの uint8 として表されます。トリミングされたイメージを double に変換し、各セルを 255 で除算することで、これらの値を正規化します。このイメージは障害物を 0 に近い値として表示します。占有値 (1 が占有スペースを表す) を得るには、1 から正規化されたイメージを減算します。

imageNorm = double(imageCropped)/255;
imageOccupancy = 1 - imageNorm;

調整されたマップ イメージを使用して、occupancyMap オブジェクトを作成します。インポートされたマップの分解能は 1 メートルあたり 20 セルです。

map = occupancyMap(imageOccupancy,20);
show(map)

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

制限

占有値は、制限された分解能 ±0.001 をもちます。値は対数オッズ表現を使用する int16 として格納されます。このデータ型では分解能が制限されますが、MATLAB® で大規模マップを格納するときにメモリを節約できます。setOccupancygetOccupancy の順に呼び出すと、戻り値が設定値と等しくない場合があります。詳細については、占有グリッドの対数オッズ表現の節を参照してください。

メモリ サイズによる制限がある場合は、代わりに binaryOccupancyMap の使用を検討してください。バイナリ占有マップは、バイナリ値でより少ないメモリを使用しますが、それでも Navigation Toolbox™ のアルゴリズムとその他のアプリケーションで機能します。

拡張機能

バージョン履歴

R2019b で導入