剛体ツリー ロボット モデル
剛体ツリー モデルは、ロボットの構造の表現です。マニピュレーターなどのロボットや、その他の運動学ツリーの表現に使用できます。これらのモデルを作成するには、rigidBodyTree
オブジェクトを使用します。
剛体ツリーは、ジョイント (rigidBodyJoint
) を介して接続される剛体 (rigidBody
) で構成されます。それぞれの剛体には、その剛体がツリー上の親に対してどのように動くかを定義するジョイントがあります。各ジョイントに固定変換 (setFixedTransform
) を設定して、あるボディから次のボディへの変換を指定します。
剛体ツリー モデルに対して、ボディの追加、置換、または削除ができます。また、特定のボディのジョイントを置換することもできます。rigidBodyTree
オブジェクトは関係を維持し、rigidBody
オブジェクトのプロパティを更新してこの関係を反映します。getTransform
を使用して、異なるボディ座標系間の変換を取得することもできます。
剛体ツリーの成分
ベース
すべての剛体ツリーにはベースがあります。ベースはワールド座標系を定義します。また、剛体における最初の接続点です。ベースは変更できません。ただし、Name
プロパティは例外です。変更するには、剛体ツリーの BaseName
プロパティを変更します。
剛体
剛体は剛体ツリー モデルの基本構成であり、rigidBody
を使用して作成されます。剛体はリンクと呼ばれることもあり、変形できない固体を表します。単一の剛体にある任意の 2 点の距離は常に一定です。
複数のボディをもつ剛体ツリーに追加された剛体には、親ボディまたは子ボディが関連付けられます (Parent
または Children
プロパティ)。親は、この剛体の接続先となるボディで、ロボットのベースにすることができます。子は、このボディに対して剛体ツリーのベースから下流の方向に接続されているすべてのボディです。
それぞれの剛体には座標系が関連付けられ、rigidBodyJoint
オブジェクトが含まれています。
ジョイント
各剛体には 1 つのジョイントがあります。ジョイントは、その剛体の運動を親に対して相対的に定義します。これは、ロボット モデルで 2 つの剛体を接続する接続点です。複数のジョイントまたは異なる運動軸をもつ単一の物理的ボディを表すには、複数の rigidBody
オブジェクトを使用します。
rigidBodyJoint
オブジェクトは、固定、回転および直進の各ジョイントをサポートします。
これらのジョイントは、タイプによって以下の運動を許可します。
'fixed'
— 運動なし。ボディは親に剛結合されています。'revolute'
— 回転運動のみ。ボディはジョイントの周りを、親に対して相対的に回転します。位置範囲によって、運動軸の周りの最小角度位置と最大角度位置をラジアン単位で定義します。'prismatic'
— 並進運動のみ。ボディは運動軸に沿って、親に対して線形的に動きます。
各ジョイントには、JointAxis
プロパティによって定義される運動軸があります。ジョイント軸は、回転軸 (回転ジョイント) または並進軸 (直進ジョイント) のいずれかを定義する、3 次元の単位ベクトルです。HomePosition
プロパティはその特定のジョイントのホーム位置を定義します。ホーム位置は位置範囲内の点です。homeConfiguration
を使用すると、ロボットのホーム コンフィギュレーションに戻ります。ホーム コンフィギュレーションは、モデルにあるすべてのジョイントのホーム位置の集合です。
また、ジョイントには、親と子のボディ座標系の間の固定変換を定義するプロパティもあります。これらのプロパティは、setFixedTransform
メソッドを使用してのみ設定できます。変換パラメーターを入力するメソッドに応じて、JointToParentTransform
または ChildToJointTransform
プロパティがこのメソッドを使用して設定されます。その他のプロパティは単位行列に設定されます。次の図は、各プロパティが表す内容を示しています。
JointToParentTransform
は、子ボディのジョイントの位置を、親ボディの座標系と関連付けて定義します。JointToParentTransform
が単位行列の場合、親ボディの座標系とジョイントの座標系は一致します。ChildToJointTransform
は、子ボディのジョイントの位置を、子ボディの座標系と関連付けて定義します。ChildToJointTransform
が単位行列の場合、子ボディの座標系とジョイントの座標系は一致します。
メモ
実際のジョイント位置は、この Joint
オブジェクトの一部ではありません。ロボット モデルには状態がありません。親ジョイントと子ジョイントの座標系の間に中間変換があります。これは、ジョイント位置を運動軸に沿って定義します。この変換は、ロボット コンフィギュレーションで定義されます。ロボット コンフィギュレーションを参照してください。
ロボット コンフィギュレーション
ロボットの組み立てを完了し、異なるボディ間の変換を定義したら、ロボット コンフィギュレーションを作成できます。コンフィギュレーションは、ロボットのすべてのジョイント位置を、ジョイント名によって定義します。
homeConfiguration
を使用して各ジョイントの HomePosition
プロパティを取得し、ホーム コンフィギュレーションを作成します。
ロボット コンフィギュレーションは、構造体の配列として与えられます。
config = homeConfiguration(robot)
config = 1×6 struct array with fields: JointName JointPosition
config(1)
ans = struct with fields: JointName: 'jnt1' JointPosition: 0
また、randomConfiguration
を使用すると、すべてのジョイント制限に従うランダムなコンフィギュレーションを生成できます。
show
を使用して Figure 内にロボットをプロットするときには、ロボット コンフィギュレーションを使用します。また、getTransform
を使用すると、特定のコンフィギュレーションをもつ 2 つのボディの座標系間における変換を取得できます。
指定されたエンドエフェクタ姿勢をもつロボット コンフィギュレーションを取得するには、inverseKinematics
を使用します。このアルゴリズムは、指定した剛体の特定の姿勢を達成するために必要なジョイント角度の解を求めます。
参考
rigidBodyTree
| inverseKinematics