Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

事前定義されているロボット モデルの読み込み

一般的なロボット モデルに迅速にアクセスするには、関数 loadrobot を使用します。この関数により、Universal Robots™ UR10 協働ロボット、Boston Dynamics™ Atlas ヒューマノイド、KINOVA™ Gen 3 マニピュレーターなどの市販のロボット モデルが読み込まれます。ジョイント コンフィギュレーションを生成してロボット モデルを操作する方法を探索します。

独自の Universal Robot Description Format (URDF) をインポートする場合は、関数importrobotを参照してください。

関数loadrobotに string としてロボット モデル タイプを指定します。Tab キーを使用した補完機能を利用して、入力として示されたモデルのリストから選択します。

ジョイント コンフィギュレーションの列ベクトルを使用するには、データ形式を "column" として指定します。

ur10 = loadrobot("universalUR10");
atlas = loadrobot("atlas");
gen3 = loadrobot("kinovaGen3","DataFormat","column");

関数 loadrobot は、各ロボット モデルの運動学的特性およびダイナミクスを表すrigidBodyTreeオブジェクトを返します。一部のモデルでは、ボディのダイナミクスや慣性プロパティが読み込まれない場合があります。Bodies プロパティまたは関数 getBody を使用して個別の剛体を検査します。

disp(gen3);
  rigidBodyTree with properties:

     NumBodies: 8
        Bodies: {[1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]}
          Base: [1x1 rigidBody]
     BodyNames: {'Shoulder_Link'  'HalfArm1_Link'  'HalfArm2_Link'  'ForeArm_Link'  'Wrist1_Link'  'Wrist2_Link'  'Bracelet_Link'  'EndEffector_Link'}
      BaseName: 'base_link'
       Gravity: [0 0 0]
    DataFormat: 'column'

show を呼び出して、ホーム コンフィギュレーションでロボット モデルを可視化します。gen3 オブジェクトを他のモデルに置き換えて可視化します。

show(gen3);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

show(atlas);

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.

show(ur10);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 28 objects of type patch, line. These objects represent world, base_link, base, shoulder_link, upper_arm_link, forearm_link, wrist_1_link, wrist_2_link, wrist_3_link, ee_link, tool0, base_link_mesh, shoulder_link_mesh, upper_arm_link_mesh, forearm_link_mesh, wrist_1_link_mesh, wrist_2_link_mesh, wrist_3_link_mesh.

ジョイント コンフィギュレーションの生成

KINOVA Gen3 ロボットのランダムなコンフィギュレーションを生成します。関数 randomConfiguration は、モデルの制限内でランダムなジョイント位置を出力します。モデルの動作が期待どおりかを確認するには、一連の 4 つのコンフィギュレーションを可視化します。

for i = 1:4
    subplot(2,2,i)
    config = randomConfiguration(gen3);
    show(gen3,config);
end

Figure contains 4 axes objects. Axes object 1 with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh. Axes object 2 with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh. Axes object 3 with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh. Axes object 4 with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

ロボット モデルの操作

ロボットを移動して動作を検証するには、対話型剛体ツリー GUI を読み込みます。モデルでは、ターゲット エンドエフェクタ位置を設定し、手動でジョイントを移動し、各種要素を選択できます。

interactiveGUI = interactiveRigidBodyTree(gen3);

Figure Interactive Visualization contains an axes object. The axes object with xlabel X, ylabel Y contains 35 objects of type patch, line, surface.

センター ディスクをクリックしてドラッグすることで、ターゲット エンドエフェクタ位置を自由に移動できます。この GUI は逆運動学を使用して各ボディのジョイント位置を求めます。線形に移動するには軸を使用し、軸を中心に回転させるには円を使用します。

rigidBodyをクリックすると、固有のパラメーターが表示されます。

右クリックして別のターゲット マーカー ボディを設定します。ターゲット ボディを変更すると、逆運動学ソルバーのエンドエフェクタが更新されます。

ジョイントを手動で制御するには、右クリックしてマーカー制御法を切り替えます。

選択したボディ上の回転ジョイントの回転を制御するには、黄色の円をクリックしてドラッグします。

ジョイント コンフィギュレーションの保存

関数 addConfiguration を使用して、設定した特定のコンフィギュレーションを保存します。これにより、StoredConfigurations プロパティに現在のジョイント位置が保存されます。この例では、ランダムなコンフィギュレーションを設定してから保存します。

interactiveGUI.Configuration = randomConfiguration(gen3);

Figure Interactive Visualization contains an axes object. The axes object with xlabel X, ylabel Y contains 35 objects of type patch, line, surface.

addConfiguration(interactiveGUI)
disp(interactiveGUI.StoredConfigurations)
   -0.4218
   -1.6647
    1.3419
   -2.0818
    1.8179
   -0.4140
   -1.4517

次のステップ

これで MATLAB® でモデルが作成されたので、さまざまな操作を実行できます。

  • 逆運動学を使用して、目的のエンドエフェクタ位置に基づくジョイント コンフィギュレーションを取得します。モデル パラメーター以外の追加のロボット拘束を指定します。これには照準拘束、直交座標の範囲、姿勢ターゲットなどがあります。

  • 台形速度プロファイル、B スプライン、または多項式軌跡を使用して、ウェイポイントなどのパラメーターに基づき、軌跡の生成を生成します。

  • ロボット モデルと Rapidly Exploring Random Tree (RRT) パス プランナーを利用してマニピュレーター プランニングを行います。

  • 環境内の障害物との衝突検出をチェックし、ロボットの動作が安全かつ効果的であることを確認します。