Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

checkCollision

2 つのジオメトリが衝突しているかどうかをチェック

説明

collisionStatus = checkCollision(geom1,geom2) は、2 つの凸ジオメトリ geom1 および geom2 間の衝突ステータスを返します。2 つのジオメトリが指定された姿勢で衝突している場合、checkCollision1 に等しくなります。衝突が見つからない場合、collisionStatus0 に等しくなります。

[collisionStatus,sepdist,witnesspts] = checkCollision(geom1,geom2) は、2 つのジオメトリ間に衝突が見つからない場合、各ジオメトリの最小距離と監視点 (それぞれ sepdistwitnesspts) も返します。

すべて折りたたむ

この例では、2 つの衝突ジオメトリの衝突ステータスをチェックする方法を説明します。

ボックス型の衝突ジオメトリを作成します。

bx = collisionBox(1,2,3);

円柱型の衝突ジオメトリを作成します。

cy = collisionCylinder(3,1);

円柱を "x" 軸に沿って 2 平行移動します。

T = trvec2tform([2 0 0]);
cy.Pose = T;

2 つのジオメトリをプロットします。

show(cy)
hold on
show(bx)
xlim([-5 5])
ylim([-5 5])
zlim([-5 5])
hold off

Figure contains an axes object. The axes object contains 2 objects of type patch.

衝突ステータスをチェックします。ステータスがプロットと一貫していることを確認します。

[areIntersecting,dist,witnessPoints] = checkCollision(bx,cy)
areIntersecting = 1
dist = NaN
witnessPoints = 3×2

   NaN   NaN
   NaN   NaN
   NaN   NaN

ボックスを "x" 軸に沿って 3、"z" 軸を下に 4 平行移動します。ボックスと円柱が衝突していないことを確認します。

T = trvec2tform([0 3 -4]);
bx.Pose = T;
[areIntersecting,dist,witnessPoints] = checkCollision(bx,cy)
areIntersecting = 0
dist = 2
witnessPoints = 3×2

    0.4286    0.4286
    2.0000    2.0000
   -2.5000   -0.5000

ボックス、円柱、および 2 つのジオメトリの間の最小距離を表す線分をプロットします。

show(cy)
hold on
show(bx)
wp = witnessPoints;
plot3([wp(1,1) wp(1,2)], [wp(2,1) wp(2,2)], [wp(3,1) wp(3,2)], 'bo-')
xlim([-5 5])
ylim([-5 5])
zlim([-5 5])
hold off

Figure contains an axes object. The axes object contains 3 objects of type patch, line.

入力引数

すべて折りたたむ

衝突ジオメトリ。以下のいずれかとして指定します。

衝突ジオメトリ。以下のいずれかとして指定します。

出力引数

すべて折りたたむ

衝突ステータス。0 または 1 として返されます。2 つのジオメトリが衝突している場合、collisionStatus1 に等しくなります。そうでない場合、値は 0 になります。

データ型: double

2 つの衝突ジオメトリ間の最小距離。実数または NaN として返されます。監視点 (witnesspts) を結ぶ線分によって、2 つのジオメトリ間の最小距離が実現されます。2 つのジオメトリが衝突している場合、sepdistNaN に設定されます。

データ型: double | NaN

各ジオメトリの監視点。3 行 2 列の行列として返されます。各列は、geom1 上と geom2 上の監視点にそれぞれ対応します。2 つの監視点を結ぶ線分の長さは septdist です。2 つのジオメトリが衝突している場合、witnessptsnan(3,2) に設定されます。

データ型: double | NaN

制限

  • 最小距離が 10-5 m 未満になると、衝突チェックの結果は信頼性がなくなります。

参照

[1] E. G. Gilbert, D. W. Johnson, and S. S. Keerthi. A fast procedure for computing the distance between complex objects in three-dimensional space. in IEEE Journal on Robotics and Automation, vol. 4, no. 2, pp. 193-203, April 1988, doi: 10.1109/56.2083.

拡張機能

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

バージョン履歴

R2019b で導入