最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

robotics.InverseKinematics

逆運動学ソルバーの作成

説明

robotics.InverseKinematics System object™ は、指定した剛体ツリー モデルに基づく目的のエンドエフェクタ姿勢のジョイント コンフィギュレーションを計算するための逆運動学 (IK) ソルバーを作成します。robotics.RigidBodyTree クラスを使用して、ロボットの剛体ツリー モデルを作成します。このモデルは、ソルバーが強制するすべてのジョイント拘束を定義します。求解が可能な場合、ロボット モデルで指定されているジョイント制限に従います。

照準拘束、位置の範囲、方向ターゲットなど、エンドエフェクタ姿勢以外の拘束をさらに指定するには、robotics.GeneralizedInverseKinematics の使用を検討してください。このクラスにより、複数拘束の IK の解を計算できます。

目的のエンドエフェクタ姿勢に対するジョイント コンフィギュレーションを計算するには、以下を実行します。

  1. robotics.InverseKinematics オブジェクトを作成して、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とは (MATLAB)を参照してください。

作成

構文

ik = robotics.InverseKinematics
ik = robotics.InverseKinematics(Name,Value)

説明

ik = robotics.InverseKinematics は、逆運動学ソルバーを作成します。このソルバーを使用するには、RigidBodyTree プロパティで剛体ツリーモデルを指定します。

ik = robotics.InverseKinematics(Name,Value) は、1 つ以上の Name,Value のペアの引数によって追加オプションが指定される逆運動学ソルバーを作成します。Name はプロパティ名で、Value は対応する値です。Name は一重引用符 ('') で囲まれていなければなりません。名前と値のペアの引数を複数、任意の順序で、Name1,Value1,...,NameN,ValueN のように指定できます。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトを呼び出した後にプロパティ値を変更することはできません。オブジェクトは呼び出し時にロックされ、関数 release でロック解除されます。

プロパティが "調整可能" な場合は、いつでも値を変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計 (MATLAB)を参照してください。

剛体ツリー モデル。RigidBodyTree オブジェクトとして指定します。剛体ツリー モデルを変更したら、その剛体ツリーをこのプロパティに再割り当てします。次に例を示します。

IK ソルバーを作成し、剛体ツリーを指定します。

ik = robotics.InverseKinematics('RigidBodyTree',rigidbodytree)

剛体ツリー モデルを変更します。

addBody(rigidbodytree,robotics.RigidBody('body1'), 'base')

剛体ツリーを IK ソルバーに再割り当てします。剛体ツリー モデルを変更する前にソルバーまたは関数 step が呼び出された場合、release を使用して、プロパティの変更を許可します。

ik.RigidBodyTree = rigidbodytree;

逆運動学の求解アルゴリズム。'BFGSGradientProjection' または 'LevenbergMarquardt' として指定します。各アルゴリズムの詳細については、逆運動学のアルゴリズムを参照してください。

指定したアルゴリズムに関連付けられたパラメーター。構造体として指定します。構造体のフィールドはアルゴリズムに固有です。ソルバー パラメーターを参照してください。

使用法

構文

[configSol,solInfo] = ik(endeffector,pose,weights,initialguess)

説明

[configSol,solInfo] = ik(endeffector,pose,weights,initialguess) は、指定したエンドエフェクタ姿勢を達成するジョイント コンフィギュレーションを探します。コンフィギュレーションの初期推定と、pose の 6 成分に対する許容誤差の重みの目標値を指定します。アルゴリズムの実行に関連する解の情報 solInfo が、ジョイント コンフィギュレーションの解 configSol とともに返されます。

入力引数

すべて展開する

エンドエフェクタ名。文字ベクトルとして指定します。エンドエフェクタは、robotics.InverseKinematics System object 内に指定される RigidBodyTree オブジェクト上のボディでなければなりません。

エンドエフェクタの姿勢。4 行 4 列の同次変換として指定します。この変換は、endeffector プロパティで指定される、剛体の位置と向きの目標値を定義します。

姿勢の許容誤差の重み。6 要素ベクトルとして指定します。最初の 3 要素は、目標とする姿勢に対する向きの誤差の重みに対応します。最後の 3 要素は、目標とする姿勢に対する xyz 位置の誤差の重みに対応します。

ロボット コンフィギュレーションの初期推定。構造体配列またはベクトルとして指定します。この初期推定を使用して、目標とするロボット コンフィギュレーションにソルバーを誘導するのに役立てます。解がこの初期推定に近いことは保証されていません。

ベクトル形式を使用するには、RigidBodyTree プロパティで割り当てられているオブジェクトの DataFormat プロパティを 'row' または 'column' に設定します。

出力引数

すべて展開する

ロボット コンフィギュレーション。構造体配列として返されます。この構造体配列には次のフィールドが含まれます。

  • JointNameRigidBodyTree ロボット モデルで指定されたジョイント名の文字ベクトル

  • JointPosition — 対応するジョイントの位置

このジョイント コンフィギュレーションは、目標とするエンドエフェクタ姿勢を解の許容誤差の範囲内で達成する、計算された解です。

ベクトル形式を使用するには、RigidBodyTree プロパティで割り当てられているオブジェクトの DataFormat プロパティを 'row' または 'column' に設定します。

解法情報。構造体として返されます。解法情報構造体には次のフィールドが含まれます。

  • Iterations — アルゴリズムによって実行される反復回数。

  • NumRandomRestarts — アルゴリズムが局所的最小値で行き詰ったことを原因とするランダム リスタートの回数。

  • PoseErrorNorm — 解と目的のエンドエフェクタ姿勢との比較による、姿勢誤差の大きさ。

  • ExitFlag — アルゴリズムの実行と、アルゴリズムが戻った原因に関する詳細を提供するコード。各アルゴリズム タイプの終了フラグについては、終了フラグを参照してください。

  • Status — 解が許容誤差以内に収まっているか ('success')、またはアルゴリズムが見つけられる最適解に達したか ('best available') を記述する文字ベクトル。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、以下の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて展開する

目標とするエンドエフェクタ位置を達成するための、ロボット モデルのジョイント位置を生成します。InverseKinematics System object は、逆運動学アルゴリズムを使用して有効なジョイント位置を求めます。

ロボットの例を読み込みます。puma1 ロボットは、6 つの回転ジョイントをもつ 6 軸ロボット アームの RigidBodyTree モデルです。

load exampleRobots.mat
showdetails(puma1)
--------------------
Robot: (6 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1           L1         jnt1     revolute             base(0)   L2(2)  
   2           L2         jnt2     revolute               L1(1)   L3(3)  
   3           L3         jnt3     revolute               L2(2)   L4(4)  
   4           L4         jnt4     revolute               L3(3)   L5(5)  
   5           L5         jnt5     revolute               L4(4)   L6(6)  
   6           L6         jnt6     revolute               L5(5)   
--------------------

ランダムなコンフィギュレーションを生成します。そのランダムなコンフィギュレーションのエンドエフェクタ (L6) からベースへの変換を取得します。この変換をエンドエフェクタの目標姿勢として使用します。このコンフィギュレーションを表示します。

randConfig = puma1.randomConfiguration;
tform = getTransform(puma1,randConfig,'L6','base');

show(puma1,randConfig);

puma1 モデルの InverseKinematics オブジェクトを作成します。姿勢のさまざまな成分の重みを指定します。向きの角度については、位置のコンポーネントよりも小さな重みを使用します。ロボットのホーム コンフィギュレーションを初期推定として使用します。

ik = robotics.InverseKinematics('RigidBodyTree',puma1);
weights = [0.25 0.25 0.25 1 1 1];
initialguess = puma1.homeConfiguration;

ik オブジェクトを使用してジョイント位置を計算します。

[configSoln,solnInfo] = ik('L6',tform,weights,initialguess);

新しく生成された解のコンフィギュレーションを表示します。この解は、同じエンドエフェクタ位置を達成する、わずかに異なるジョイント コンフィギュレーションです。ik オブジェクトを複数回呼び出すと、同様のジョイント コンフィギュレーション、あるいはまったく異なるジョイント コンフィギュレーションが返されることがあります。

show(puma1,configSoln);

参照

[1] Badreddine, Hassan, Stefan Vandewalle, and Johan Meyers. "Sequential Quadratic Programming (SQP) for Optimal Control in Direct Numerical Simulation of Turbulent Flow." Journal of Computational Physics. 256 (2014): 1–16. doi:10.1016/j.jcp.2013.08.044.

[2] Bertsekas, Dimitri P. Nonlinear Programming. Belmont, MA: Athena Scientific, 1999.

[3] Goldfarb, Donald. "Extension of Davidon’s Variable Metric Method to Maximization Under Linear Inequality and Equality Constraints." SIAM Journal on Applied Mathematics. Vol. 17, No. 4 (1969): 739–64. doi:10.1137/0117067.

[4] Nocedal, Jorge, and Stephen Wright. Numerical Optimization. New York, NY: Springer, 2006.

[5] Sugihara, Tomomichi. "Solvability-Unconcerned Inverse Kinematics by the Levenberg–Marquardt Method." IEEE Transactions on Robotics Vol. 27, No. 5 (2011): 984–91. doi:10.1109/tro.2011.2148230.

[6] Zhao, Jianmin, and Norman I. Badler. "Inverse Kinematics Positioning Using Nonlinear Programming for Highly Articulated Figures." ACM Transactions on Graphics Vol. 13, No. 4 (1994): 313–36. doi:10.1145/195826.195827.

拡張機能

R2016b で導入