主要内容

刚性小组细胞

创建树木结构机器人

描述

刚性小组细胞是刚体与关节的连通性的表示。使用该类在MATLAB中建立机器人操纵器模型®.如果使用使用统一机器人描述格式(URDF)指定的机器人模型,请使用ImportRobot.导入机器人模型。

刚体由刚体组成的刚体刚体对象。每个刚体都有一个rigidBodyJoint与之关联的对象定义它如何相对于其父主体移动。用setFixedTransform为了在关节框架和其中一个相邻体的框架之间定义固定变换。您可以使用该方法从模型添加,替换或删除刚体RigidBodyTree班级。

机器人动力学计算也是可能的。指定大量的Centerofmass., 和惯性每个属性刚体在机器人模型中。您可以使用外部力量计算向前和逆动态,并计算机器人联合运动和联合输入的计算动态量。要使用与动态相关的功能,请设置dataformat.财产“排”或者“柱子”

对于给定的刚体树模型,您还可以使用机器人模型来计算使用机器人逆运动学算法的所需末端效应位置的关节角度。使用时指定刚体树模型inverseKinematics或者GeneralizedInverseWinematics.

表演方法支持身体网万博1manbetx格的可视化。网格被指定为.stl.文件和可以添加到个别刚体使用删除.此外,默认情况下,ImportRobot.功能加载所有可访问.stl.URDF机器人模型中指定的文件。

创建

描述

例子

机器人=刚性小组细胞创建一个树形结构的机器人对象。添加刚体到它使用addBody

机器人=刚性小组(“Maxnumbodies”,N,“DataFormat”,DataFormat)在生成代码时指定机器人中允许的体数的上限。您还必须指定dataformat.属性作为名称-值对。

特性

展开全部

此属性是只读的。

机器人模型(不包括基数)的机构数量作为整数返回。

此属性是只读的。

机器人模型中的刚体列表,作为手柄阵列返回。使用此列表以访问特定刚体模型中的对象。你也可以拨打通过它的名字来获得一个身体。

此属性是只读的。

刚体的名称,作为字符向量的单元格阵列返回。

机器人基的名称,作为字符串标量或字符向量返回。

机器人经历的引力加速,指定为一个[x y z]每秒平方米的矢量。每个元件对应于沿这种方向的基本机器人帧的加速度。

运动学和动力学函数的输入/输出数据格式,指定为“结构”“排”,或“柱子”.要使用动态函数,必须使用“排”或者“柱子”

对象功能

addBody 给机器人添加身体
addsubtree. 给机器人添加子树
Centerofmass. 群众位置和雅各比亚的中心
核对机构 检查机器人是否有碰撞
复制 复制机器人模型
外部压力 相对于基础构成外力矩阵
forghtdynamics. 关节加速度给定关节力矩和状态
几何jacobian 机器人构型的几何雅可比矩阵
GravityTorque 弥补重力的联合扭矩
按名称获取机器人身体句柄
getTransform 获得变换之间的身体框架
homeconfiguration. 获取机器人的主页配置
inverseDynamics 给定运动所需的关节力矩
Massmatrix. 关节空间质量矩阵
随机配置 生成机器人的随机配置
删除 从机器人中删除身体
替换 更换机器人的身体
替换时 替换身体的关节
表演 显示图中的机器人模型
显示详细资料 显示机器人模型的详细信息
子树 从机器人模型创建子树
速度产品 取消速度诱导力的联合扭矩
撰写 创造刚性小组细胞代码生成功能

例子

全部收缩

将刚体和相应的关节添加到刚体树中。每个rIgidBody.对象包含A.rigidBodyJoint对象,必须添加到rIgidbodytree使用addBody

创建刚体树。

rbtree =刚性小组特;

创建一个具有唯一名称的刚体。

Body1 =刚体('B1');

创建一个转动关节。默认情况下,rIgidBody.物体带有一个固定的关节。通过分配一个新的关节来替换关节rigidBodyJoint对象到body1.joint.财产。

jnt1 = rigidbodejoint('JNT1''旋转');body1.joint = jnt1;

将刚体添加到树中。指定要将刚体附加到的体名。因为这是第一个主体,所以使用树的基本名称。

basename = rbtree.baseName;加法人(RBTree,Body1,BaseName)

显示详细资料在树上确认刚体和关节的添加是否正确。

showdetails(rbtree)
----------------------------------  -   -  ---------- ---------- --------------------------- 1 b1 jnt1旋转基础(0)---------------------

使用Puma560®机器人的Denavit-Hartenberg(DH)参数来构建机器人。一次添加每个刚体,其中一个由关节对象指定的子到父变换。

DH参数定义了机器人的几何形状,与每个刚体如何连接到其父级。为方便起见,在矩阵中设置Puma560机器人的参数[1].Puma机器人是一款串行链条操纵器。DH参数相对于矩阵中的前一行,对应于先前的联合附件。

dhparams = [0 pi / 2 0 0;0.4318 0 0 0 0.0203-PI / 2 0.15005 0;0 PI / 2 0.4318 0;0 -pi / 2 0 0;0 0 0 0];

创建一个刚性的身体树对象以构建机器人。

robot =刚性小组特;

创建第一个刚体并将其添加到机器人中。添加刚体:

  1. 创建一个刚体对象,并给它一个惟一的名称。

  2. 创建一个rigidBodyJoint对象,并给它一个惟一的名称。

  3. setFixedTransform使用DH参数指定身体到体变换。DH参数的最后一个元素,θ.忽略,因为角度依赖于关节位置。

  4. 调用addBody将第一主体接头附接到机器人的基框架。

Body1 =刚体(“界面”);jnt1 = rigidbodejoint('JNT1''旋转');setFixedTransform (jnt1 dhparams (1:)“dh”);body1.joint = jnt1;加法人(机器人,Body1,'根据'

创建并添加其他刚体到机器人。呼叫时指定先前的正文名称addBody附上它。每个固定变换相对于先前的关节坐标帧。

Body2 =刚体(“body2”);jnt2 = rigidbodejoint(“jnt2”'旋转');body3 =刚体('body3');jnt3 = rigidBodyJoint (“jnt3”'旋转');Body4 =刚体('body4');jnt4 = rigidBodyJoint ('JNT4''旋转');Body5 =刚体(“body5”);jnt5 = rigidodejoint('JNT5''旋转');Body6 =刚体(“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.joint = JNT2;Body3.joint = JNT3;body4.joint = jnt4;body5.joint = JNT5;Body6.joint = JNT6;加法人(机器人,Body2,“界面”) addBody (body3的机器人“body2”) addBody (body4的机器人'body3') addBody (body5的机器人'body4')加法人(机器人,Body6,“body5”

验证您的机器人是否使用使用显示详细资料或者表演功能。显示详细资料列出MATLAB®命令窗口中的所有主体。表演使用给定配置(默认为Home)显示机器人。打电话修改轴限制并隐藏轴标签。

showdetails(机器人)
------------------------------------  -   -  ---------- ---------- --------------------------- 1 body1 JNT1旋转底座(0)body2(2)2 body2 JNT2旋转体1(1)Body3(3)3 Body3 JNT3旋转体2(2)Body4(4)4 Body4 JNT4旋转体3(3)BODD5(5)5 body5 JNT5旋转体4(4)主体6(6)6 BODY6 JNT6旋转体5(5)-------------------
显示(机器人);轴([-0.5,0.5,-0.5,0.5,-0.5,0.5])轴离开

参考

[1] Corke,P. I.和B. Armstrong-Helouvry。“为PUMA 560机器人报告的模型参数进行共识。”1994年IEEE机器人和自动化国际会议的诉讼程序,IEEE计算。SOC。新闻,1994,PP。1608-13。doi.org(crossref),DOI:10.1109 / Robot.1994.351360。

对现有的更改刚性小组细胞对象。你可以在刚体树中替换关节,物体和子树。

装载示例机器人刚性小组细胞对象。

加载examplerobotsmat.

查看详细的Puma机器人使用显示详细资料

ShowDetails(Puma1)
------------------------------------  -   -  ---------- ---------- --------------------------- 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) --------------------

获得特定的身体检查属性。唯一的孩子L3身体是L4身体。您也可以复制特定的身体。

body3 = getbody(puma1,“L3”);童人= body3.children {1}
童人=具有属性的刚体:名称:'l4'关节:[1x1刚体联合] mass:1 centerofmass:[0 0 0]惯性:[1 1 0 0 0]父母:[1x1刚体]儿童:{[1x1刚体]}视觉效果:{}碰撞:{}
body3copy = copy(body3);

更换关节L3身体。你必须创造一个新的联合的对象和使用替换时确保下游车身几何不受影响。调用setFixedTransform如有必要,可在主体之间定义变换而不是默认标识矩阵。

newjoint = rigidbodejoint('棱柱');替换(puma1,“L3”,newjoint);ShowDetails(Puma1)
------------------------------------  -   -  ---------- ---------- --------------------------- 1 L1 JNT1旋转碱(0)L2(2)2 L2 JNT2旋转L1(1)L3(3)3 L3棱柱形固定L2(2)L4(4)4 L4 JNT4旋转L3(3)L5(5)5 L5 JNT5旋转L4(4)L6(6)6 L6 JNT6旋转L5(5)---------------------

删除整个主体,并使用删除.被删除的主体包含在子树中。

Subtree =卸下Bodd(Puma1,“L4”
子树=具有属性的刚性小组特:Numbodies:3体:{[1x1刚体] [1x1刚体] [1x1刚体]}基数:[1x1刚体]主体:{'L4'L5'''L6'} BaseName:'L3'重力:[0 0] dataformat:'struct'

删除修改后L3身体。添加原始复制L3身体的L2身体,其次是退回的子树。机器人模型保持不变。通过显示详细资料

搬运(Puma1,“L3”);加法人(puma1,body3copy,'l2')Addsubtree(Puma1,“L3”,子树)Showdetails(Puma1)
------------------------------------  -   -  ---------- ---------- --------------------------- 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) --------------------

若要使用动力学函数计算关节扭矩和加速度,请指定关节的动力学特性刚性小组细胞对象和刚体

创建一个刚体树模型。创建两个刚性尸体以附加到它。

robot =刚性小牛排('datomformat''排');Body1 =刚体(“界面”);Body2 =刚体(“body2”);

指定要连接到主体上的关节。设置固定变换的身体2Body1..这种变换是1米X-方向。

Connect1 = ridbodejoint('联合1''旋转');Connect2 = rigidodejoint(“联合2”);setfixedTransform(Chent2,Trvec2tForm([1 0 0]))Body1.joint = Conntn1;Body2.joint = Connect2;

指定两个物体的动态属性。将身体添加到机器人模型中。对于本例,棒子的基本值(Body1.),附加球形质量(身体2) 给出。

Body1.mass = 2;Body1.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];加法人(机器人,Body1,'根据');加法人(机器人,Body2,“界面”);

计算整个机器人的质量位置。绘制机器人上的位置。将视图移动到XY.飞机。

Compos = Centerofmass(机器人);显示(机器人);抓住情节(Compos(1),Compos(2),'或者')查看(2)

图中包含一个轴。坐标轴包含patch、line类型的6个对象。这些对象代表base, body1, body2。

改变第二个身体的质量。注意质量中心的变化。

Body2.Mass = 20;更换(机器人,“body2”,body2)compos2 = Centerofmass(机器人);绘图(Compos2(1),Compos2(2),'*G') 抓住离开

图中包含一个轴。轴包含7个类型的贴片物体,线。这些对象代表base, body1, body2。

计算一个给定的机器人配置与施加的外力和重力的联合加速度。一个扳手被应用到一个特定的身体与重力被指定为整个机器人。

加载预定义的Kuka LBR机器人模型,该模型被指定为aRigidBodyTree对象。

加载examplerobotsmat.LBR.

设置数据格式为'排'.对于所有动态计算,数据格式必须是'排'或者“列”

lbr。DataFormat ='排';

设置重力。默认情况下,假定重力为零。

lbr。重力= [0 0 -9.81];

的主配置LBR.机器人。

q = homeconfiguration(lbr);

指定表示机器人所经历的外力的扳手向量。使用外部压力函数生成外力矩阵。指定机器人模型,终端执行器经历扳手,扳手向量和当前机器人配置。扳手相对给予'tool0'车身框架,这需要你指定机器人的配置,问:

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

由于重力计算所得到的关节加速度,用外力施加到末端效应器'tool0'什么时候LBR.处于家庭配置。假设关节速度和关节扭矩为零(输入为空向量[])。

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

使用inverseDynamics函数来计算所需的联合扭矩静态保持特定的机器人配置。您还可以使用其他语法指定联合速度,联合加速度和外部力量。

加载预定义的Kuka LBR机器人模型,该模型被指定为aRigidBodyTree对象。

加载examplerobotsmat.LBR.

设置数据格式为'排'.对于所有动态计算,数据格式必须是'排'或者“列”

lbr。DataFormat ='排';

设定重力财产给出特定的引力加速。

lbr。重力= [0 0 -9.81];

生成随机配置LBR.

q = OrandomConfiguration(LBR);

计算所需的关节力矩LBR.静态保持该配置。

tau =反演(LBR,Q);

使用外部压力生成力矩阵的功能适用于刚体树模型。力矩阵是一个m-6载体,该矢量在机器人上每个接头的一行涂抹六元素扳手。使用外部压力函数并指定末端执行器以将扳手正确分配给矩阵的正确行。您可以将多个力矩阵添加在一起以将多个力应用于一个机器人。

为了计算反击这些外力的联合扭矩,使用inverseDynamics功能。

加载预定义的Kuka LBR机器人模型,该模型被指定为aRigidBodyTree对象。

加载examplerobotsmat.LBR.

设置数据格式为'排'.对于所有动态计算,数据格式必须是'排'或者“列”

lbr。DataFormat ='排';

设定重力财产给出特定的引力加速。

lbr。重力= [0 0 -9.81];

获取home配置LBR.

q = homeconfiguration(lbr);

施加外力LINK1..输入扳手矢量在基帧中表示。

fext1 = ExterpentForce(LBR,'link_1',[0 0.0 0.1 0 0]);

在末端执行器上设置外力,工具0..输入扳手向量表达工具0.框架。

fext2 = ExtentSforce(LBR,'tool0',[0 0.0 0.1 0 0],q);

计算平衡外力所需的联合扭矩。要结合力,请将力矩阵添加在一起。假设联合速度和加速度为零(输入为[])。

Tau = Inverseedynamics(LBR,Q,[],[],FEXT1 + FEXT2);

您可以导入具有的机器人.stl.与统一机器人描述格式(URDF)文件相关联的文件以描述机器人的视觉几何。每个刚体都有一个指定的各个视觉几何形状。这ImportRobot.函数解析URDF文件以获取机器人模型和视觉几何。该功能假设机器人的视觉几何和碰撞几何形状是相同的并且将视觉几何分配为克制体体的碰撞几何形状。

使用表演在图中显示机器人模型的视觉和辅助几何形状的功能。然后,您可以通过单击组件来检查模型来检查它们并右键单击以切换可见性。

将机器人模型作为URDF文件导入。这.stl.在此URDF中必须正确指定文件位置。添加其他.stl.文件到各个刚体,看删除

Robot = ImportRobot('IIWA14.URDF');

用相关的视觉模型可视化机器人。点击主体或框架检查它们。右键单击机构以切换每个可视几何的可见性。

展示(机器人,'视觉效果''上''碰撞''离开');

图中包含一个轴。坐标轴包含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_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh。

用相关的碰撞几何形状可视化机器人。点击主体或框架检查它们。右键单击机构以切换每个碰撞几何的可见性。

展示(机器人,'视觉效果''离开''碰撞''上');

图中包含一个轴。坐标轴包含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] Craig,John J.机器人介绍:力学与控制.阅读,MA:Addison-Wesley,1989。

[2] Siciliano,Bruno,Lorenzo Sciavicco,Luigi Villani和Giuseppe Oriolo。机器人:建模,规划和控制。伦敦:斯普林斯,2009年。

扩展能力

介绍在R2016B.