最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

robotics.OccupancyGrid クラス

パッケージ: robotics

確率値を使用した占有グリッドの作成

説明

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

占有グリッドは、パス計画などのロボット工学アルゴリズムで使用します (robotics.PRM を参照)。また、衝突のないパスの検出、衝突回避、位置推定の計算などを行うためのアプリケーションのマッピングにも使用します (robotics.MonteCarloLocalization を参照)。特定の用途に合わせて占有グリッドを修正できます。

OccupancyGrid オブジェクトはワールド座標とグリッド座標をサポートします。ワールド座標の原点はオブジェクトの GridLocationInWorld プロパティによって定義されます。このプロパティは、グリッドの左下隅を定義します。グリッド位置の数とサイズは、Resolution プロパティによって定義されます。インデックス (1,1) をもつ最初のグリッド位置は、グリッドの左上隅で開始します。

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

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

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

構築

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

map = robotics.OccupancyGrid(width,height,resolution) は、指定したグリッド分解能 (1 メートルあたりのセル数) で占有グリッドを作成します。

map = robotics.OccupancyGrid(rows,cols,resolution,"grid") は、指定した行数と列数、および分解能 (1 メートルあたりのセル数) で占有グリッドを作成します。

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

map = robotics.OccupancyGrid(p,resolution) は、指定した行列、および分解能 (1 メートルあたりのセル数) で占有グリッドを作成します。

入力引数

すべて展開する

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

データ型: double

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

データ型: double

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

データ型: double

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

データ型: double

プロパティ

すべて展開する

セルを障害物なしと見なすしきい値。スカラーとして指定します。このしきい値未満の確率値は、障害物なしと見なされます。このプロパティは、robotics.PRM を使用している場合のパス計画のフリー位置も定義します。

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

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

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

グリッド内の行と列の数。[rows cols] ベクトルとして格納されます。

グリッド分解能。スカラー (1 メートルあたりのセル数) として格納されます。この値は読み取り専用です。

x 座標のワールド範囲の最小値と最大値。[min max] ベクトルとして格納されます。この値は読み取り専用です。

y 座標のワールド範囲の最小値と最大値。[min max] ベクトルとして格納されます。この値は読み取り専用です。

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

メソッド

checkOccupancyCheck locations for free, occupied, or unknown values
copyCreate copy of occupancy grid
getOccupancyGet occupancy of a location
grid2worldConvert grid indices to world coordinates
inflateInflate each occupied grid location
insertRayInsert ray from laser scan observation
occupancyMatrixConvert occupancy grid to double matrix
rayIntersectionCompute map intersection points of rays
raycastCompute cell indices along a ray
setOccupancySet occupancy of a location
showShow grid values in a figure
updateOccupancyIntegrate probability observation at a location
world2gridConvert world coordinates to grid indices

すべて折りたたむ

レーザー スキャンから距離と角度の読み取り値を取得し、これらの読み取り値を占有グリッドに挿入します。

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

map = robotics.OccupancyGrid(10,10,20);

レーザー スキャンを占有グリッドに挿入します。ロボットの距離と角度の姿勢と、レーザー スキャンの最大距離を指定します。

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

insertRay(map,pose,ranges,angles,maxrange);

マップを表示して、レーザー スキャン挿入の結果を確認します。ロボットのすぐ前の場所の占有状態を確認します。

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

    0.7000

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

insertRay(map,pose,ranges,angles,maxrange);
show(map)
getOccupancy(map,[8 5])
ans =

    0.8448

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

imread を使用してイメージをインポートします。イメージをトリミングして、関連領域を残します。

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

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

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

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

map = robotics.OccupancyGrid(imageOccupancy,20);
show(map)

制限

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

拡張機能

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

R2016b で導入