メインコンテンツ

addCollision

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

説明

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

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

この構文では、剛体座標系を基準に tform*collisionObj.Pose の相対姿勢で衝突ジオメトリが接続されます。

addCollision(___,Name=Value) は、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。名前と値のペアの引数は、他のすべての入力引数の後で指定します。

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 with xlabel X, ylabel Y 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, FaceColor=[0 0 1], FaceAlpha=1)
    end
end

show(robot,Collisions="on",Visuals="off");

Figure contains an axes object. The axes object with xlabel X, ylabel Y 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,SkippedSelfCollisions="parent");
    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, xlabel X, ylabel Y 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]

  • "capsule"[radius length]

  • "sphere"radius

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

データ型: char | string

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

  • "box"[x y z]

  • "cylinder"[radius length]

  • "capsule"[radius length]

  • "sphere"radius

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

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

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

ボディ座標系を基準とした衝突ジオメトリの変換。座標系の名前、または 4 行 4 列の同次変換行列として指定します。collisionObj 入力を使用して衝突オブジェクトを指定する場合、この関数は剛体座標系を基準に tform*collisionObj.Pose の相対姿勢で衝突ジオメトリを接続します。

データ型: single | double

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: addCollision(body1, "sphere", 0.1, pose, 'FaceColor', [0 0 1], 'FaceAlpha', 1)

剛体に接続された衝突オブジェクトの色の設定。RGB 値の 1 行 3 列の行列として指定します。

データ型: row vector

剛体に接続された衝突オブジェクトの透明度の設定。非負のスカラーとして指定します。

データ型: scalar

拡張機能

すべて展開する

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

バージョン履歴

R2020b で導入

すべて展開する