Main Content

addCollision

衝突ジオメトリを剛体に追加

説明

addCollision(body,type,parameters) は、指定したタイプ type と幾何学的パラメーター parameters の衝突ジオメトリを、指定した剛体 body に追加します。

addCollision(body,collisionObj) は、衝突ジオメトリ オブジェクトを以下のいずれかの衝突オブジェクトとして指定して、剛体 body に追加します。

この構文では、指定した衝突オブジェクトの Pose プロパティを使用して、衝突の頂点を剛体座標系に変換します。

addCollision(___,tform) は、上記構文の入力引数の任意の組み合わせに加え、ボディ座標系を基準とした衝突ジオメトリの変換を指定します。

すべて折りたたむ

ロボット モデルを読み込み、衝突メッシュを変更します。既存の衝突メッシュをクリアし、簡易衝突オブジェクトのプリミティブ型を追加して、特定のコンフィギュレーションが競合しているかどうかを確認します。

ロボット モデルの読み込み

関数 loadrobot を使用して、事前構成済みのロボット モデルをワークスペースに読み込みます。このモデルには、既に各ボディに指定された衝突メッシュがあります。すべての剛体要素を反復し、既存の衝突メッシュをクリアします。既存のメッシュがなくなっていることを確認します。

robot = loadrobot('kukaIiwa7','DataFormat','column');

for i = 1:robot.NumBodies
    clearCollision(robot.Bodies{i})
end

show(robot,'Collisions','on','Visuals','off');

Figure contains an axes object. The axes object contains 21 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.

衝突シリンダーの追加

衝突シリンダーを各ボディに追加する作業を繰り返します。この特定のモデルに対するボディの一部は、オーバーラップしてエンドエフェクタ (ボディ 10) と常に衝突するため、スキップします。

collisionObj = collisionCylinder(0.05,0.25);

for i = 1:robot.NumBodies
    if i > 6 && i < 10
        % Skip these bodies.
    else
        addCollision(robot.Bodies{i},collisionObj)
    end
end

show(robot,'Collisions','on','Visuals','off');

Figure contains an axes object. The axes object contains 28 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_ee_kuka_coll_mesh.

衝突チェック

一連のランダムなコンフィギュレーションを生成します。ロボットが各コンフィギュレーションで競合しているかどうかを確認します。競合している各コンフィギュレーションを可視化します。

figure
rng(0) % Set random seed for repeatability.
for i = 1:20
    config = randomConfiguration(robot);
    isColliding = checkCollision(robot,config);
    if isColliding
        show(robot,config,'Collisions','on','Visuals','off');
        title('Collision Detected')
    else
        % Skip non-collisions.
    end
end

Figure contains an axes object. The axes object with title Collision Detected contains 28 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_ee_kuka_coll_mesh.

入力引数

すべて折りたたむ

剛体。rigidBody オブジェクトとして指定します。

衝突ジオメトリのジオメトリ タイプ。string スカラーとして指定します。指定したタイプによって、parameters 入力の形式が決まります。

  • "box"[x y z]

  • "cylinder"[radius length]

  • "sphere"radius

  • "mesh" — n 行 3 列の頂点の行列、あるいは STL または DAE のファイル名 (string)

データ型: char | string

衝突ジオメトリのパラメーター。数値ベクトル、数値行列、または string スカラーとして指定します。type 入力によって、この値の形式が決まります。

  • "box"[x y z]

  • "cylinder"[radius length]

  • "sphere"radius

  • "mesh" — n 行 3 列の頂点の行列、あるいは STL または DAE のファイル名 (string)

データ型: single | double | char | string

衝突ジオメトリ オブジェクト。collisionBoxcollisionCylindercollisionSphere、または collisionMesh オブジェクトとして指定します。

衝突ジオメトリの変換。4 行 4 列の同次変換として指定します。collisionObj 入力の衝突オブジェクトを指定する場合、この関数は指定した変換を、指定した衝突オブジェクトの Pose プロパティに適用して、衝突の頂点を剛体座標系に変換します。

データ型: single | double

拡張機能

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

バージョン履歴

R2020b で導入