Main Content

massMatrix

ジョイント空間の質量行列

説明

H = massMatrix(robot) は、ロボットのホーム コンフィギュレーションにおける、ジョイント空間の質量行列を返します。

H = massMatrix(robot,configuration) は、指定したロボット コンフィギュレーションの質量行列を返します。

すべて折りたたむ

Robotics System Toolbox™ loadrobotから Boston Dynamics Atlas® ヒューマノイド ロボットのモデルを読み込みます。rigidBodyTree オブジェクトとして返されます。データ形式が "row" に設定されていることを確認します。すべてのダイナミクス計算について、データ形式は "row" または "column" でなければなりません。

atlas = loadrobot("atlas", DataFormat="row", Gravity=[0 0 -9.81]);

atlas のランダムなコンフィギュレーションを生成します。

q = randomConfiguration(atlas);

コンフィギュレーション q における質量行列を取得します。

H = massMatrix(atlas,q)
H = 30×30

    5.9158   -1.2431    0.6367    0.4879   -0.5435    0.1373    0.1765   -0.0007   -0.0072   -0.0003   -0.0001    0.9609    0.3663   -0.0521   -0.3232   -0.0269    0.0011    0.0001         0         0         0         0         0         0         0         0         0         0         0         0
   -1.2431   20.9002    0.5109   -0.5926    0.8585    0.1457   -0.0027   -0.0003    0.0018   -0.0002   -0.0018   -0.0413    0.2023    0.0525    0.1088    0.0236    0.0108   -0.0005         0         0         0         0         0         0         0         0         0         0         0         0
    0.6367    0.5109   19.4204    0.2148    0.6959   -0.3081   -0.2676    0.0004    0.0074    0.0004    0.0000    0.0330    0.9184    0.0043   -0.3224   -0.0142    0.0250    0.0002         0         0         0         0         0         0         0         0         0         0         0         0
    0.4879   -0.5926    0.2148    0.2945   -0.0589    0.0975    0.0317   -0.0013    0.0032   -0.0003         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0
   -0.5435    0.8585    0.6959   -0.0589    0.5987   -0.0512    0.0887    0.0014   -0.0112    0.0002         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0
    0.1373    0.1457   -0.3081    0.0975   -0.0512    0.2033   -0.0008   -0.0010    0.0090   -0.0004         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0
    0.1765   -0.0027   -0.2676    0.0317    0.0887   -0.0008    0.3040    0.0009   -0.0276   -0.0000         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0
   -0.0007   -0.0003    0.0004   -0.0013    0.0014   -0.0010    0.0009    0.0038   -0.0000    0.0005         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0
   -0.0072    0.0018    0.0074    0.0032   -0.0112    0.0090   -0.0276   -0.0000    0.0070   -0.0000         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0
   -0.0003   -0.0002    0.0004   -0.0003    0.0002   -0.0004   -0.0000    0.0005   -0.0000    0.0005         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0         0
      ⋮

show(atlas,q);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 169 objects of type patch, line. These objects represent pelvis, ltorso, mtorso, utorso, l_clav, l_scap, l_uarm, l_larm, l_ufarm, l_lfarm, l_hand, l_hand_force_torque, l_situational_awareness_camera_link, l_situational_awareness_camera_optical_frame, head, center_bottom_led_frame, center_top_led_frame, left_camera_frame, left_camera_optical_frame, left_led_frame, pre_spindle, pre_spindle_cal_x, pre_spindle_cal_y, pre_spindle_cal_z, pre_spindle_cal_roll, pre_spindle_cal_pitch, pre_spindle_cal_yaw, post_spindle, post_spindle_cal_x, post_spindle_cal_y, post_spindle_cal_z, post_spindle_cal_roll, post_spindle_cal_pitch, hokuyo_link, head_hokuyo_frame, right_camera_frame, right_camera_optical_frame, right_led_frame, r_clav, r_scap, r_uarm, r_larm, r_ufarm, r_lfarm, r_hand, r_hand_force_torque, r_situational_awareness_camera_link, r_situational_awareness_camera_optical_frame, l_uglut, l_lglut, l_uleg, l_lleg, l_talus, l_foot, r_uglut, r_lglut, r_uleg, r_lleg, r_talus, r_foot, ltorso_mesh, mtorso_mesh, utorso_mesh, l_clav_mesh, l_scap_mesh, l_uarm_mesh, l_larm_mesh, l_ufarm_mesh, l_lfarm_mesh, l_hand_force_torque_mesh, l_situational_awareness_camera_link_mesh, head_mesh, hokuyo_link_mesh, r_clav_mesh, r_scap_mesh, r_uarm_mesh, r_larm_mesh, r_ufarm_mesh, r_lfarm_mesh, r_hand_force_torque_mesh, r_situational_awareness_camera_link_mesh, l_uglut_mesh, l_lglut_mesh, l_uleg_mesh, l_lleg_mesh, l_talus_mesh, l_foot_mesh, r_uglut_mesh, r_lglut_mesh, r_uleg_mesh, r_lleg_mesh, r_talus_mesh, r_foot_mesh, pelvis_mesh.

入力引数

すべて折りたたむ

ロボット モデル。rigidBodyTree オブジェクトとして指定します。関数 massMatrix を使用するには、DataFormat プロパティを 'row' または 'column' に設定します。

ロボット コンフィギュレーション。ロボット モデル内の固定されていないすべてのジョイント位置を含むベクトルとして指定します。コンフィギュレーションは、homeConfiguration(robot)randomConfiguration(robot) を使用するか、独自のジョイント位置を指定することによって生成できます。configuration のベクトル形式を使用するには、robotDataFormat プロパティを 'row' または 'column' に設定します。

出力引数

すべて折りたたむ

ロボットの質量行列。n 行 n 列のサイズをもつ正定値の対称行列として返されます。ここで、n はロボットの速度の自由度です。

詳細

すべて折りたたむ

ダイナミクス プロパティ

ロボット ダイナミクスを操作するときは、rigidBody オブジェクトの以下のプロパティを使用してマニピュレーター ロボットの個々のボディの情報を指定します。

  • Mass — キログラム単位の剛体の質量。

  • CenterOfMass — 剛体の重心位置。[x y z] の形式のベクトルとして指定します。このベクトルは、ボディ座標系を基準とした剛体の重心位置をメートル単位で記述します。オブジェクト関数 centerOfMass は、ロボットの重心を計算する際にこれらの剛体プロパティ値を使用します。

  • Inertia — 剛体の慣性。[Ixx Iyy Izz Iyz Ixz Ixy] の形式のベクトルとして指定します。ベクトルは、キログラム平方メートル単位でボディ座標系を基準としています。慣性テンソルは、次の形式の正定値行列です。

    A 3-by-3 matrix. The first row contains Ixx, Ixy, and Ixz. The second contains Ixy, Iyy, and Iyz. The third contains Ixz, Iyz, and Izz.

    Inertia ベクトルの最初の 3 要素は、慣性テンソルの対角要素である慣性モーメントです。最後の 3 要素は、慣性テンソルの非対角要素である慣性乗積です。

マニピュレーター ロボット モデル全体に関連する情報については、以下の rigidBodyTree オブジェクト プロパティを指定します。

  • Gravity — ロボットにかかる重力加速度。[x y z] ベクトルとして指定します (m/s2)。既定では重力加速度はありません。

  • DataFormat — 運動学およびダイナミクス関数の入出力データ形式。"struct""row"、または "column" として指定します。

ダイナミクス方程式

マニピュレーターの剛体ダイナミクスは次の方程式で制御されます。

ddt[qq˙]=[q˙M(q)1(C(q,q˙)q˙G(q)J(q)TFExt+τ)]

次のようにも記述されます。

M(q)q¨=C(q,q˙)q˙G(q)J(q)TFExt+τ

ここで、次のようになります。

  • M(q) — 現在のロボット コンフィギュレーションに基づくジョイント空間の質量行列。この行列はオブジェクト関数 massMatrix を使用して計算します。

  • C(q,q˙) — コリオリ項。q˙ で乗算され、速度積を計算します。オブジェクト関数 velocityProduct を使用して速度積を計算します。

  • G(q) — 指定した重力 Gravity の位置を維持するためにすべてのジョイントに必要な重力トルクおよび力。重力トルクはオブジェクト関数 gravityTorque を使用して計算します。

  • J(q) — 指定したジョイント コンフィギュレーションの幾何学的ヤコビアン。幾何学的ヤコビアンはオブジェクト関数 geometricJacobian を使用して計算します。

  • FExt — 剛体にかかる外力の行列。外力はオブジェクト関数 externalForce を使用して生成します。

  • τ — 各ジョイントにベクトルとして直接かかるジョイントのトルクと力。

  • q,q˙,q¨ — それぞれ個々のベクトルとしての、ジョイント コンフィギュレーション、ジョイント速度、ジョイント加速度。回転ジョイントの場合は、ラジアン単位 (rad/s と rad/s2) で値をそれぞれ指定します。直進ジョイントの場合は、メートル単位 (m/s と m/s2) で指定します。

ダイナミクスを直接計算するには、オブジェクト関数 forwardDynamics を使用します。この関数は、上記の入力の指定した組み合わせに対してジョイント加速度を計算します。

特定の動きの組み合わせを得るには、オブジェクト関数 inverseDynamics を使用します。この関数は、指定したコンフィギュレーション、速度、加速度、外力を得るために必要なジョイント トルクを計算します。

拡張機能

バージョン履歴

R2017a で導入

すべて展開する