このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

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 要素ベクトルとして指定します。

メソッド

すべて折りたたむ

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

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

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 で導入