主要内容

rigidBodyTree

リ構造のロボットを作成

説明

rigidBodyTreeは,剛体とジョ。このクラスを使用して,matlab®でロボットマニピュレ,タ,モデルを構築します。统一的机器人描述格式(URDF)を使用して指定されたロボットモデルがある場合,importrobotを使用してロボットモデルを▪▪ンポ▪▪トします。

剛体リモデルは,rigidBodyオブジェクトとしての剛体から構成されます。各剛体には,その剛体が親ボディを基準とした可動域を定義するrigidBodyJointオブジェクトが関連付けられています。setFixedTransformを使用して,ジョ▪▪▪ントの座標系と隣接ボディの1▪▪▪の座標系の固定変換を定義します。RigidBodyTreeクラスのメソッドを使用して,モデルに対して剛体を追加,置換,または削除できます

ロボットダ@ @ナミクスの計算も可能です。ロボットモデルの各rigidBodyにいて,质量CenterOfMassおよび惯性の各プロパティを指定します。順ダイナミクスと逆ダイナミクスを外力ありまたはなしで計算して,与えられたロボットのジョイント運動とジョイント入力に対するダイナミクスの量を計算できます。ダ电子邮箱ナミクス関連の関数を使用するには,DataFormatプロパティを“行”または“列”に設定します。

また,特定の剛体ツリーモデルに対して,ロボティクスの逆運動学アルゴリズムを使用して目標となるエンドエフェクタ位置のジョイント角度を計算するために,ロボットモデルを使用することもできます。inverseKinematicsまたはgeneralizedInverseKinematicsを使用するときには,剛体リモデルを指定します。

显示メソッドは,ボディメッシュの可視化をサポ,トします。メッシュは.stlファ电子邮箱ルとして指定され,addVisualを使用して個々の剛体に追加できます。また,関数importrobotは,ご使用のurdfロボットモデルで指定されているすべてのアクセス可能な.stlファ@ @ルを既定で読み込みます。

作成

説明

机器人= rigidBodyTreeは,リ構造のロボットオブジェクトを作成します。addBodyを使用してそれに剛体を追加します。

机器人= rigidBodyTree(“MaxNumBodies”,N,“DataFormat DataFormat)は,コ,ド生成時に,ロボットで許可されるボディ数の上限を指定します。また,DataFormatプロパティを,名前と値のペアとして指定しなければなりません。

プロパティ

すべて展開する

このプロパティは読み取り専用です。

ロボットモデル内のボディ数(ベ,スを含まない)。整数として返されます。

このプロパティは読み取り専用です。

ロボットモデル内の剛体のリスト。ハンドルのcell配列として返されます。このリストを使用して、モデル内の特定のRigidBodyオブジェクトにアクセスします。また,getBodyを呼び出して,名前によってボディを取得することもできます。

このプロパティは読み取り専用です。

剛体の名前。文字ベクトルのcell配列として返されます。

ロボットのベ,ス名。字符串スカラ,または文字ベクトルとして返されます。

ロボットにかかる重力加速度。[x y z]ベクトルとして,メ,トル毎秒毎秒単位で指定します。各要素は,ロボットの基地座標系の,その方向への加速度に対応します。

運動学およびダ▪▪ナミクス関数の入出力デ▪▪タ形式。“结构”“行”,または“列”として指定します。ダ电子邮箱ナミクス関数を使用するには,“行”または“列”を使用しなければなりません。

オブジェクト関数

addBody ロボットへのボディの追加
addSubtree ロボットにサブリを追加
centerOfMass 重心の位置とヤコビアン
checkCollision 检查机器人是否发生碰撞
复制 ロボットモデルをコピ
externalForce 构成相对于基底的外力矩阵
forwardDynamics 给定关节力矩和状态的关节加速度
geometricJacobian ロボットコンフィギュレ,ションの幾何学的ヤコビアン
gravityTorque 重力を補正するジョ@ @ントトルク
getBody 通过名称获取机器人身体手柄
getTransform ボディ座標系間の変換を取得
homeConfiguration ロボットのホ,ムコンフィギュレ,ションの取得
inverseDynamics 给定运动所需的关节力矩
massMatrix ジョ@ @ント空間の質量行列
randomConfiguration ロボットのランダムなコンフィギュレ,ションを生成
removeBody 从机器人上移除身体
replaceBody 更换机器人本体
replaceJoint 更换身体上的关节
显示 ロボットモデルを图に表示
showdetails ロボットモデルの詳細を表示
子树 从机器人模型创建子树
velocityProduct 抵消速度力的关节力矩
writeAsFunction 创建rigidBodyTree代码生成函数

すべて折りたたむ

剛体および対応するジョントを剛体リに追加します。それぞれのrigidBodyオブジェクトはrigidBodyJointオブジェクトを含み,addBodyを使用してrigidBodyTreeに追加しなければなりません。

剛体リを作成します。

rbtree = rigidBodyTree;

固有の名前をも剛体を作成します。

body1 = rigidBody(“b1”);

回転ジョ@ @ントを作成します。既定で,rigidBodyオブジェクトには固定ジョ@ @ントが付属します。界面。联合プロパティに新しいrigidBodyJointオブジェクトを割り当てることにより,ジョ。

jnt1 = rigidBodyJoint(“jnt1”“转动”);界面。联合=jnt1;

剛体をリに追加します。剛体を接続するボディ名を指定します。最初のボディなので,リのベス名を使用します。

basename = rbtree.BaseName;basename addBody (rbtree界面)

リに対してshowdetailsを使用して,剛体とジョ。

showdetails (rbtree)
-------------------- 机器人:身体(1)Idx的身体名称联合名称联合类型父母名字(Idx)孩子的名字(s ) --- --------- ---------- ---------- ---------------- ---------------- 1 b1 jnt1转动基(0 ) --------------------

Puma560®ロボットのDenavit-Hartenberg (DH)パラメーターを使用して,ロボットを構築します。各剛体は1ず。

DHパラメーターは,各剛体がどのように親に接続されているかを基準として,ロボットのジオメトリを定義します。わかりやすくするために,Puma560ロボットのパラメ,タ,を行列[1]で設定します。彪马ロボットは連続チェ,ンのマニピュレ,タ,です。Dhパラメタは,前のジョント接続に対応する行列内の前の行との相対値です。

Dhparams = [0 pi/2 0 0;0.4318 00 0 0.0203 -pi/2 0.15005 0;0 /2 0.4318 0;0 - /2 0 0;0 0 0 0];

剛体リオブジェクトを作成して,ロボットを構築します。

robot = rigidBodyTree;

最初の剛体を作成し,ロボットに追加します。剛体を追加するには次を行います。

  1. rigidBodyオブジェクトを作成し,一意の名前を付けます。

  2. rigidBodyJointオブジェクトを作成し,一意の名前を付けます。

  3. setFixedTransformを使用して,ボディからボディへの変換をdhパラメ,タ,を使用して指定します。Dhパラメ,タ,の最後の要素であるθは無視されます。これは,角度がジョイント位置に依存するためです。

  4. addBodyを呼び出して,最初のボディのジョaaplントをロボットのbase座標系に接続します。

body1 = rigidBody(“界面”);jnt1 = rigidBodyJoint(“jnt1”“转动”);setFixedTransform (jnt1 dhparams (1:)“dh”);界面。联合=jnt1; addBody(robot,body1,“基地”

その他の剛体を作成し,ロボットに追加します。addBodyを呼び出して接続するときには,前述のボディ名を指定します。各固定変換は,前のジョ。

body2 = rigidBody(“body2”);jnt2 = rigidBodyJoint(“jnt2”“转动”);body3 = rigidBody(“body3”);jnt3 = rigidBodyJoint(“jnt3”“转动”);body4 = rigidBody(“body4”);jnt4 = rigidBodyJoint(“jnt4”“转动”);body5 = rigidBody(“body5”);jnt5 = rigidBodyJoint(“jnt5”“转动”);body6 = rigidBody(“body6”);jnt6 = rigidBodyJoint(“jnt6”“转动”);: setFixedTransform (jnt2 dhparams (2),“dh”);: setFixedTransform (jnt3 dhparams (3),“dh”);: setFixedTransform (jnt4 dhparams (4),“dh”);: setFixedTransform (jnt5 dhparams (5),“dh”);: setFixedTransform (jnt6 dhparams (6),“dh”);body2。联合=jnt2; body3.Joint = jnt3; body4.Joint = jnt4; body5.Joint = jnt5; body6.Joint = jnt6; addBody(robot,body2,“界面”) addBody (body3的机器人“body2”) addBody (body4的机器人“body3”) addBody (body5的机器人“body4”) addBody (body6的机器人“body5”

関数showdetailsまたは関数显示を使用して,ロボットが正しく構築されていることを確認します。showdetailsは,すべてのボディをmatlab®コマンドウィンドウにリストします。显示は,指定されたコンフィギュレ,ション(既定はホ,ム)でロボットを表示します。の呼び出しは,軸の範囲を変更し,軸ラベルを非表示にします。

showdetails(机器人)
-------------------- 机器人:身体(6)Idx身体名称联合名称联合类型父母名字(Idx)孩子的名字(s ) --- --------- ---------- ---------- ---------------- ---------------- 1 body1 jnt1转动基地(0)body2 (2) 2 body2 jnt2转动界面(1)body3 (3) 3 body3 jnt3转动body2 (2) body4 (4) 4 body4 jnt4转动body3 (3) body5 (5) 5 body5 jnt5转动body4 (4) body6 (6) 6 body6 jnt6转动body5 (5 ) --------------------
显示(机器人);轴([-0.5,0.5,-0.5,0.5,-0.5,0.5])轴

参考文献

[1]科克,P. I.和B.阿姆斯特朗-埃洛夫里。“PUMA 560机器人模型参数的一致性搜索”1994年IEEE机器人与自动化国际会议论文集, IEEE计算。Soc。出版社,1994,第1608-13页。DOI.org (Crossref), doi: 10.1109 / ROBOT.1994.351360。

既存のrigidBodyTreeオブジェクトに変更を加えます。剛体リのジョント,ボディ,およびサブリを置換できます。

例のロボットをrigidBodyTreeオブジェクトとして読み込みます。

负载exampleRobots.mat

showdetailsを使用して,彪马ロボットの詳細を表示します。

showdetails (puma1)
-------------------- 机器人:身体(6)Idx身体名称联合名称联合类型父母名字(Idx)孩子的名字(s ) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1转动基地(0)L2 (2) 2 L2 jnt2转动L1 (1) L3 (3) 3 L3 jnt3转动L2 (2) L4 (4) 4, jnt4转动L3(3)一两百(5)5 L5 jnt5转动L4(4) 16种(6)6 16种jnt6转动L5 (5 ) --------------------

プロパティを検査する特定のボディを取得します。L3ボディの唯一の子はL4ボディです。特定のボディをコピ,することもできます。

body3 = getBody(puma1,“L3”);childBody = body3。孩子{1}
名称:'L4'关节:[1x1 rigidBodyJoint]质量:1 CenterOfMass:[0 0 0]惯性:[1 1 1 0 0 0]父:[1x1 rigidBody]子:{[1x1 rigidBody]}视觉效果:{}碰撞:{}
body3Copy = copy(body3);

L3ボディのジョ@ @ントを置き換えます。下流のボディジオメトリへの影響を確実に防ぐために,新しい联合オブジェクトを作成し,replaceJointを使用しなければなりません。必要に応じて,既定の単位行列を使用する代わりに,setFixedTransformを呼び出してボディ間の変換を定義します。

newJoint = rigidBodyJoint(“移动”);replaceJoint (puma1“L3”, newJoint);showdetails (puma1)
-------------------- 机器人:身体(6)Idx身体名称联合名称联合类型父母名字(Idx)孩子的名字(s ) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1转动基地(0)L2 (2) 2 L2 jnt2转动L1 (1) L3 3 L3棱镜(3)固定L2 (2) L4 (4) 4, jnt4转动L3(3)一两百(5)5 L5 jnt5转动L4(4) 16种(6)6 16种jnt6转动L5 (5 ) --------------------

removeBodyを使用してボディ全体を削除し,結果のサブリを取得します。削除されたボディはサブリに含まれます。

subtree = removeBody(puma1,“L4”
subtree = rigidBodyTree with properties: NumBodies: 3 Bodies: {[1x1 rigidBody] [1x1 rigidBody] [1x1 rigidBody]} Base: [1x1 rigidBody] BodyNames: {'L4' 'L5' 'L6'} BaseName: 'L3' Gravity: [0 0 0] DataFormat: 'struct'

変更したL3ボディを削除します。コピ,された元のL3ボディをL2ボディに追加し,次に返されたサブリも追加します。ロボットモデルはそのままにします。showdetailsで詳細な比較を確認します。

removeBody (puma1“L3”);addBody (puma1 body3Copy,“外语”) addSubtree (puma1“L3”子树)showdetails (puma1)
-------------------- 机器人:身体(6)Idx身体名称联合名称联合类型父母名字(Idx)孩子的名字(s ) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1转动基地(0)L2 (2) 2 L2 jnt2转动L1 (1) L3 (3) 3 L3 jnt3转动L2 (2) L4 (4) 4, jnt4转动L3(3)一两百(5)5 L5 jnt5转动L4(4) 16种(6)6 16种jnt6转动L5 (5 ) --------------------

ダ超市超市ナミクス関数を使用してジョ超市超市ントトルクとジョ超市超市ント加速度を計算するには,rigidBodyTreeオブジェクトとrigidBodyにダ@ @ナミクスプロパティを指定します。

剛体リモデルを作成します。接続する2の剛体を作成します。

机器人= rigidBodyTree(“DataFormat”“行”);body1 = rigidBody(“界面”);body2 = rigidBody(“body2”);

ボディに接続するジョ@ @ントを指定します。body2から界面への固定変換を設定します。変換はx方向に1 mです。

joint1 = rigidBodyJoint(“joint1”“转动”);joint2 = rigidBodyJoint(“joint2”);setFixedTransform(joint2,trvec2tform([1 0 0]))Joint = joint1;body2。联合=joint2;

2。ボディをロボットモデルに追加します。この例では、ロッド(界面)と,接続された球体(body2)の基本値が与えられています。

界面。质量=2;界面。CenterOfMass = [0.5 0 0]; body1.Inertia = [0.001 0.67 0.67 0 0 0]; body2.Mass = 1; body2.CenterOfMass = [0 0 0]; body2.Inertia = 0.0001*[4 4 4 0 0 0]; addBody(robot,body1,“基地”);addBody (body2的机器人“界面”);

ロボット全体の重心位置を計算します。位置をロボットにプロットします。ビュをxy平面に移動します。

comPos = centerOfMass(机器人);显示(机器人);持有精神精神情节((1),(2),”或“)视图(2)

图中包含一个轴对象。axis对象包含patch、line类型的6个对象。这些对象代表基数body1 body2。

2番目のボディの質量を変更します。重心の変化に注目してください。

body2。质量=20; replaceBody(robot,“body2”,body2) comPos2 = centerOfMass(机器人);情节(comPos2 (1) comPos2 (2),“* g”)举行

图中包含一个轴对象。axis对象包含patch、line类型的7个对象。这些对象代表基数body1 body2。

与えられたロボットコンフィギュレーションに外力と重力がかかった結果のジョイント加速度を計算します。ロボット全体に対して重力が指定されている状態で,レンチが特定のボディに適用されています。

事前定義された库卡LBRロボットモデルを読み込みます。これは,RigidBodyTreeオブジェクトとして指定されています。

负载exampleRobots.matlbr

デ,タ形式を“行”に設定します。すべてのダ▪▪ナミクス計算に▪▪いて,デ▪▪タ形式は“行”または“列”でなければなりません。

lbr。DataFormat =“行”

重力を設定します。既定では,重力はゼロと仮定されます。

lbr。Gravity = [0 0 -9.81];

lbrロボットのホ,ムコンフィギュレ,ションを取得します。

q = homeConfiguration(lbr);

ロボットにかかる外力を表すレンチベクトルを指定します。関数externalForceを使用して外力行列を生成します。ロボットモデル、レンチがかかるエンドエフェクタ、レンチ ベクトル、および現在のロボット コンフィギュレーションを指定します。扳手“tool0”ボディ座標系を基準に指定されるため,ロボットコンフィギュレ,ションを指定する必要があります。

扳手= [0 0 0.5 0 0 0.3];fext = externalForce(lbr,“tool0”,扳手,q);

lbrがホ,ムコンフィギュレ,ションにあるときにエンドエフェクタ“tool0”に外力を適用した状態で,重力による結果のジョ。ジョ▪▪ント速度とジョ▪▪ントトルクはゼロと仮定されます(空のベクトル[]として入力)。

qddot = forwardDynamics(lbr,q,[],[],fext);

関数inverseDynamicsを使用して,特定のロボットコンフィギュレーションを静的に保持するために必要なジョイントトルクを計算します。また,その他の構文を使用して,ジョ。

事前定義された库卡LBRロボットモデルを読み込みます。これは,RigidBodyTreeオブジェクトとして指定されています。

负载exampleRobots.matlbr

デ,タ形式を“行”に設定します。すべてのダ▪▪ナミクス計算に▪▪いて,デ▪▪タ形式は“行”または“列”でなければなりません。

lbr。DataFormat =“行”

重力プロパティを設定して,特定の重力加速度を指定します。

lbr。Gravity = [0 0 -9.81];

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

q = randomConfiguration(lbr);

lbrが静的にそのコンフィギュレションを保持するために必要なジョントトルクを計算します。

tau = inverseDynamics(lbr,q);

関数externalForceを使用して,剛体リモデルに適用する力行列を生成します。力行列は,ロボットのジョ化学键ントごとに6要素のレンチを適用するための1化学键の行がある,行6列のベクトルです。関数externalForceを使用し,エンドエフェクタを指定して,レンチを行列の正しい行に適切に割り当てます。複数の力行列を一緒に追加して,複数の力を1のロボットに適用できます。

これらの外力に対抗するジョesc escントトルクを計算するには,関数inverseDynamicsを使用します。

事前定義された库卡LBRロボットモデルを読み込みます。これは,RigidBodyTreeオブジェクトとして指定されています。

负载exampleRobots.matlbr

デ,タ形式を“行”に設定します。すべてのダ▪▪ナミクス計算に▪▪いて,デ▪▪タ形式は“行”または“列”でなければなりません。

lbr。DataFormat =“行”

重力プロパティを設定して,特定の重力加速度を指定します。

lbr。Gravity = [0 0 -9.81];

lbrのホ,ムコンフィギュレ,ションを取得します。

q = homeConfiguration(lbr);

link1に外力を設定します。入力レンチベクトルは,基地座標系で表現されます。

fext1 = externalForce(lbr,“link_1”,[0 0 0.0 0.1 0 0]);

エンドエフェクタtool0に外力を設定します。入力レンチベクトルは,tool0座標系で表現されます。

fext2 = externalForce(lbr,“tool0”,[0 0 0.0 0.1 0 0],q);

外力と釣り合うために必要なジョ@ @ントトルクを計算します。力を合わせるには,力行列を足し合わせます。ジョ▪▪ント速度とジョ▪▪ント加速度はゼロと仮定されます([]として入力)。

tau = inverseDynamics(lbr,q,[],[],fext1+fext2);

ロボットのビジュアルジオメトリを記述するために,统一机器人描述格式(URDF)ファイルと関連付けられた.stlファ▪▪ルをも▪▪ロボットを▪▪ンポ▪▪トできます。各剛体には,個別のビジュアルジオメトリが指定されています。関数importrobotは,urdfファルを解析してロボットモデルとビジュアルジオメトリを取得します。関数は、ロボットのビジュアル ジオメトリと衝突ジオメトリが同じであると想定し、対応するボディの衝突ジオメトリとしてビジュアル ジオメトリを割り当てます。

関数显示を使用して,图内でロボットモデルのビジュアルジオメトリと衝突ジオメトリを表示します。その後,コンポーネントをクリックして検査したり,右クリックして表示状態を切り替えたりして,モデルを操作できます。

ロボットモデルをurdfファ。.stlファaapl . exeルの場所が,このaapl . exe urdf内で正しく指定されていなければなりません。他の.stlファ化学键ルを個別の剛体に追加する方法の詳細に化学键いては,addVisualを参照してください。

机器人= importrobot(“iiwa14.urdf”);

関連付けられたビジュアルモデルを使用してロボットを可視化します。ボディまたは座標系を検査するには,それらをクリックします。各ビジュアルジオメトリの表示状態を切り替えるには,ボディを右クリックします。

表演(机器人,“视觉效果”“上”“碰撞”“关闭”);

图中包含一个轴对象。axis对象包含29个patch、line类型的对象。这些对象代表world、iiwa_link_0、iiwa_link_1、iiwa_link_2、iiwa_link_3、iiwa_link_4、iiwa_link_5、iiwa_link_6、iiwa_link_7、iiwa_link_ee、iiwa_link_ee_kuka、iiwa_link_0_mesh、iiwa_link_1_mesh、iiwa_link_2_mesh、iiwa_link_3_mesh、iiwa_link_4_mesh、iiwa_link_5_mesh、iiwa_link_6_mesh、iiwa_link_7_mesh。

関連付けられた衝突ジオメトリを使用してロボットを可視化します。ボディまたは座標系を検査するには,それらをクリックします。各衝突ジオメトリの表示状態を切り替えるには,ボディを右クリックします。

表演(机器人,“视觉效果”“关闭”“碰撞”“上”);

图中包含一个轴对象。axis对象包含29个patch、line类型的对象。这些对象代表世界,iiwa_link_0、iiwa_link_1 iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_6_coll_mesh iiwa_link_7_coll_mesh。

詳細

すべて展開する

参照

[1]克雷格,约翰J.机器人导论:力学与控制。马萨诸塞州雷丁:Addison-Wesley, 1989年。

[2]西西里亚诺,布鲁诺,洛伦佐·夏维奇科,路易吉·维拉尼和朱塞佩·奥里奥罗。机器人:建模、规划与控制。伦敦:施普林格,2009。

拡張機能

バ,ジョン履歴

R2016bで導入

すべて展開する

将来のリリ,スで動作変更