Main Content

jointSpaceMotionModel

ジョイント空間の入力を与えて剛体ツリーの運動をモデル化

R2019b 以降

説明

jointSpaceMotionModel オブジェクトは、rigidBodyTree オブジェクトとして指定されたマニピュレーター ロボットの閉ループのジョイント空間運動をモデル化します。運動モデルの動作は MotionType プロパティで定義されます。

運動方程式の詳細については、Joint-Space Motion Modelを参照してください。

作成

説明

motionModel = jointSpaceMotionModel は、既定の 2 ジョイントのマニピュレーターの運動モデルを作成します。

motionModel = jointSpaceMotionModel("RigidBodyTree",tree) は、指定された rigidBodyTree オブジェクトの運動モデルを作成します。

motionModel = jointSpaceMotionModel(Name,Value) は、名前と値のペアとして指定される追加のプロパティを設定します。複数のプロパティを任意の順序で指定できます。

プロパティ

すべて展開する

剛体ツリー ロボット モデル。マニピュレーターの慣性特性と運動学的特性を定義する rigidBodyTree オブジェクトとして指定します。

誤差ダイナミクスの固有振動数 (Hz)。スカラーまたは n 要素ベクトルとして指定します。ここで、n は RigidBodyTree プロパティの関連付けられた rigidBodyTree オブジェクト内の固定されていないジョイントの数です。

依存関係

このプロパティを使用するには、MotionType プロパティを "ComputedTorqueControl" または "IndependentJointMotion" に設定します。

2 次誤差ダイナミクスの減衰比。実数値のスカラーまたは n 要素ベクトルとして指定します。ここで、n は RigidBodyTree プロパティの関連付けられた rigidBodyTree オブジェクト内の固定されていないジョイントの数です。スカラーを指定する場合、DampingRatio は値 s の n 要素ベクトルになります。ここで、s は指定したスカラーです。

依存関係

このプロパティを使用するには、MotionType プロパティを "ComputedTorqueControl" または "IndependentJointMotion" に設定します。

比例-微分 (PD) 制御の比例ゲイン。スカラーまたは n 行 n 列の行列として指定します。ここで、n は RigidBodyTree プロパティの関連付けられた rigidBodyTree オブジェクト内の固定されていないジョイントの数です。MotionType プロパティを "PDControl" に設定する必要があります。スカラーを指定する場合、Kps*eye(n) になります。ここで、s は指定したスカラーです。

依存関係

このプロパティを使用するには、MotionType プロパティを "PDControl" に設定します。

PD 制御の微分ゲイン。スカラーまたは n 行 n 列の行列として指定します。ここで、n は RigidBodyTree プロパティの rigidBodyTree オブジェクト内の固定されていないジョイントの数です。スカラーを指定する場合、Kps*eye(n) になります。ここで、s は指定したスカラーです。

依存関係

このプロパティを使用するには、MotionType プロパティを "PDControl" に設定します。

運動のタイプ。オブジェクトでモデル化する閉ループのジョイント空間の動作を定義する string スカラーまたは文字ベクトルとして指定します。オプションは、以下のとおりです。

  • "ComputedTorqueControl" — フルボディのダイナミクスを補正し、NaturalFrequency プロパティと DampingRatio プロパティで指定された誤差ダイナミクスを割り当てます。

  • "IndependentJointMotion"NaturalFrequency プロパティと DampingRatio プロパティで指定された誤差ダイナミクスを使用して、各ジョイントを独立した 2 次システムとしてモデル化します。

  • "PDControl" — ジョイントに対して、指定された Kp プロパティと Kd プロパティに基づいて比例-微分制御を使用します。

オブジェクト関数

derivativeTime derivative of manipulator model states
updateErrorDynamicsFromStepUpdate values of NaturalFrequency and DampingRatio properties given desired step response

すべて折りたたむ

この例では、マニピュレーター ロボットの jointSpaceMotionModel オブジェクトを作成してジョイント空間で使用する方法を示します。

ロボットの作成

robot = loadrobot("kinovaGen3","DataFormat","column","Gravity",[0 0 -9.81]);

シミュレーションの設定

時間範囲を 0.01 秒のタイムステップ サイズで 1 秒に設定します。初期状態をロボットの速度ゼロのホーム コンフィギュレーションに設定します。

tspan = 0:0.01:1;
initialState = [homeConfiguration(robot); zeros(7,1)];

基準状態をターゲット位置、ゼロ速度、ゼロ加速度で定義します。

targetState = [pi/4; pi/3; pi/2; -pi/3; pi/4; -pi/4; 3*pi/4; zeros(7,1); zeros(7,1)];

運動モデルの作成

5% のオーバーシュートをもつ適度な速さのステップ応答で定義される計算トルク制御と誤差ダイナミクスを使用してシステムをモデル化します。

motionModel = jointSpaceMotionModel("RigidBodyTree",robot);
updateErrorDynamicsFromStep(motionModel,.3,.05);

ロボットのシミュレーション

モデルの導関数をode45ソルバーへの入力として使用して 1 秒間の動作をシミュレートします。

[t,robotState] = ode45(@(t,state)derivative(motionModel,state,targetState),tspan,initialState);

応答のプロット

すべてのジョイントについて、ターゲットの状態まで作動する位置をプロットします。開始位置からターゲット位置までの変位が大きいジョイントの方が、変位が小さいものよりも速いレートでターゲットまで作動します。これによってオーバーシュートが発生しますが、すべてのジョイントの整定時間が同じになります。

figure
plot(t,robotState(:,1:motionModel.NumJoints));
hold all;
plot(t,targetState(1:motionModel.NumJoints)*ones(1,length(t)),"--");
title("Joint Position (Solid) vs Reference (Dashed)");
xlabel("Time (s)")
ylabel("Position (rad)");

Figure contains an axes object. The axes object with title Joint Position (Solid) vs Reference (Dashed), xlabel Time (s), ylabel Position (rad) contains 14 objects of type line.

参照

[1] Craig, John J. Introduction to Robotics: Mechanics and Control. Upper Saddle River, NJ: Pearson Education, 2005.

[2] Spong, Mark W., Seth Hutchinson, and Mathukumalli Vidyasagar. Robot Modeling and Control. Hoboken, NJ: Wiley, 2006.

拡張機能

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

バージョン履歴

R2019b で導入

すべて展開する