主要内容

rigidBodyTree

创建树形结构的机器人

描述

rigidBodyTree表示刚体连接的关节。使用这个类来构建机器人机械手模型在MATLAB®。如果你有一个机器人模型使用统一指定机器人描述格式(URDF)使用importrobot导入你的机器人模型。

一个刚体树模型由刚体rigidBody对象。每个刚体都有rigidBodyJoint与之关联的对象定义相对于其父母身体如何移动。使用setFixedTransform定义固定坐标系之间的变换联合和帧相邻的尸体。您可以添加、替换或删除刚体模型的使用方法RigidBodyTree类。

机器人动力学计算也是可行的。指定质量,CenterOfMass,惯性属性为每个rigidBody在机器人模型。你可以计算和逆动力学有或没有外部力量和数量计算动力学机器人关节运动和关节的输入。使用dynamics-related功能,设置DataFormat财产“行”“列”

对于一个给定的刚体树模型,您还可以使用机器人模型来计算所需的关节角末端执行器位置使用机器人的逆运动学算法。当使用刚体指定您的树模型inverseKinematicsgeneralizedInverseKinematics

显示支持体网格的可金宝app视化方法。网格被指定为.stl文件,可以添加到个人使用刚体addVisual。另外,在默认情况下,importrobot函数加载所有的访问.stl文件中指定URDF机器人模型。

创建

描述

例子

机器人= rigidBodyTree创建一个树状结构的机器人对象。添加刚体addBody

机器人= rigidBodyTree (“MaxNumBodies”, N,“DataFormat DataFormat)指定一个上限的身体允许机器人在生成代码。您还必须指定DataFormat房地产作为一个名称-值对。

属性

全部展开

这个属性是只读的。

机器人的身体模型(不包括基础),作为一个整数返回。

这个属性是只读的。

返回的刚体在机器人模型中,列表的单元阵列处理。使用该列表来访问特定的RigidBody对象模型中。你也可以叫getBody身体通过它的名称。

这个属性是只读的。

刚体的名字,作为特征向量的单元阵列返回。

机器人基地,作为字符串返回标量或特征向量。

重力加速度的机器人,作为指定[x y z]向量在米每秒的平方。每个元素对应的加速度机器人基础坐标系的方向。

输入/输出数据格式的运动学和动力学函数,指定为“结构”,“行”,或“列”。使用动态功能,您必须使用“行”“列”

对象的功能

addBody 增加身体的机器人
addSubtree 子树添加到机器人
centerOfMass 质心位置和雅可比矩阵
checkCollision 检查机器是否在碰撞
复制 复制的机器人模型
externalForce 相对于基地组成外力矩阵
forwardDynamics 关节加速度给关节力矩和状态
geometricJacobian 为机器人雅可比矩阵几何配置
gravityTorque 关节力矩补偿重力
getBody 让机器人的身体处理的名字
getTransform 让身体坐标系之间的变换
homeConfiguration 回家的配置机器人
inverseDynamics 针对给定的运动要求关节力矩
massMatrix 关节空间质量矩阵
randomConfiguration 生成随机配置的机器人
removeBody 把身体从机器人
replaceBody 机器人代替身体
replaceJoint 取代联合对身体
显示 在图显示机器人模型
showdetails 显示机器人模型的细节
子树 从机器人模型创建子树
velocityProduct 关节力矩,取消velocity-induced部队
writeAsFunction 创建rigidBodyTree代码生成函数

例子

全部折叠

添加一个刚体和相应的联合一个刚体树。每一个rigidBody对象包含一个rigidBodyJoint对象,必须添加到rigidBodyTree使用addBody

创建一个刚体树。

rbtree = rigidBodyTree;

用一个惟一名称创建一个刚体。

body1 = rigidBody (“b1”);

创建一个转动关节。默认情况下,rigidBody对象有一个固定的关节。分配一个新的取代联合rigidBodyJoint对象的body1.Joint财产。

jnt1 = rigidBodyJoint (“jnt1”,“转动”);body1.Joint=jnt1;

刚体添加到树中。指定你的身体的名字附加刚体。因为这是第一次的身体,用树的基本名称。

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

使用showdetails在树上确认刚体和关节正常添加。

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

,使用迪纳维特-哈坦伯格(DH)参数Puma560机器人®建造一个机器人。每个刚体添加一次,与child-to-parent变换联合指定的对象。

DH参数定义机器人的几何关系每个刚体是如何连接到它的父。为了方便,设置的参数Puma560机器人在一个矩阵[1]。彪马的机器人是一个串行链机械手。DH参数中的相对于前一行矩阵,对应于前面的接头附件。

dhparams =[0π/ 2 0 0;0.4318 0 0 0 0.0203 0.15005 -π/ 2 0;0.4318π/ 2 0;0 -π/ 2 0 0;0 0 0 0);

创建一个刚体树对象构建机器人。

机器人= rigidBodyTree;

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

  1. 创建一个rigidBody对象,并给它一个独特的名字。

  2. 创建一个rigidBodyJoint对象,并给它一个独特的名字。

  3. 使用setFixedTransform指定肢体使用DH参数转换。DH参数的最后一个元素,θ将被忽略,因为角是依赖于关节的位置。

  4. 调用addBody把第一个身体关节机器人的基础构架。

body1 = rigidBody (“界面”);jnt1 = rigidBodyJoint (“jnt1”,“转动”);setFixedTransform (jnt1 dhparams (1:)“dh”);body1.Joint=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界面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. Armstrong-Helouvry. “A Search for Consensus among Model Parameters Reported for the PUMA 560 Robot.”学报1994年IEEE机器人与自动化国际会议上,IEEE计算机。Soc。出版社,1994,页1608 - 13所示。DOI.org (Crossref),doi: 10.1109 / ROBOT.1994.351360。

对现有的进行更改rigidBodyTree对象。你可以替换关节,身体和刚体树中的子树。

负载机器人作为例子rigidBodyTree对象。

负载exampleRobots.mat

视图Puma机器人使用的细节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.Children {1}
childBody = rigidBody属性:名称:L4的联合:[1 x1 rigidBodyJoint]质量:1 CenterOfMass:[0 0 0]惯性:父:[1 1 1 0 0 0][1 x1 rigidBody]孩子:{[1 x1 rigidBody]}视觉效果:{}碰撞:{}
body3Copy = (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。身体是包含在子树中删除。

子树= removeBody (puma1,“L4”)
子树= rigidBodyTree属性:NumBodies: 3身体:{[1 x1 rigidBody] [1 x1 rigidBody] [1 x1 rigidBody]}基础:[1 x1 rigidBody] BodyNames: {L4的L5的‘社会’}::“L3”重力:[0 0 0]DataFormat:“结构”

删除修改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

创建一个刚体树模型。创建两个刚体连接到它。

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

指定要附着在身体关节。设置固定的变换body2界面。这种变换是1米x方向。

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

指定的两具尸体动力学属性。身体添加到机器人模型。对于这个示例,基本价值观杆(界面)附带一个球面质量(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飞机。

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

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含6块类型的对象。一个或多个行显示的值只使用这些对象标记代表基地,body2界面。

第二身体的质量变化。注意重心的变化。

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

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含7块类型的对象。一个或多个行显示的值只使用这些对象标记代表基地,body2界面。

计算结果为给定的机器人关节加速度配置与应用外部力量和部队由于重力。扳手适用于一个特定的身体重力被指定为整个机器人。

加载一个预定义的库卡LBR机器人模型,它被指定为一个RigidBodyTree对象。

负载exampleRobots.matlbr

设置数据格式“行”。对于所有动力学计算,数据格式必须“行”“列”

lbr。DataFormat =“行”;

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

lbr。Gravity = [0 0 -9.81];

得到配置lbr机器人。

q = homeConfiguration (lbr);

指定扳手向量表示机器人的外部力量。使用externalForce矩阵函数生成的外部力量。指定的机器人模型,经历了扳手的终端执行器,扳手向量,和当前的机器人配置。扳手是相对于“tool0”车身骨架,它要求您指定的机器人配置,

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

计算重力合成关节加速度与外力应用于末端执行器“tool0”lbr在国内配置。关节速度和关节力矩是假定为零(输入一个空向量[])。

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

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

加载一个预定义的库卡LBR机器人模型,它被指定为一个RigidBodyTree对象。

负载exampleRobots.matlbr

设置数据格式“行”。对于所有动力学计算,数据格式必须“行”“列”

lbr。DataFormat =“行”;

设置重力财产给特定的重力加速度。

lbr。Gravity = [0 0 -9.81];

生成一个随机配置lbr

q = randomConfiguration (lbr);

计算所需的关节力矩lbr静态认为配置。

τ= inverseDynamics (lbr q);

使用externalForce函数来生成力矩阵应用于刚体树模型。力矩阵是一个连续6向量,每个关节的机器人应用six-element扳手。使用externalForce功能和指定终端执行器正确分配扳手的正确行矩阵。您可以添加多个力矩阵应用多个部队一个机器人。

计算关节力矩,对抗这些外部力量,使用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);

计算所需的关节力矩平衡外部力量。结合的力量,加上力矩阵在一起。关节速度和加速度都假定为零(输入[])。

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

可以导入机器人.stl相关文件统一机器人描述格式(URDF)文件来描述机器人的视觉几何图形。每个刚体指定单个视觉几何。的importrobot函数解析URDF文件得到机器人模型和视觉几何图形。函数假设视觉机器人的几何和碰撞几何是相同的,分配相应的视觉几何图形碰撞几何图形的身体。

使用显示函数显示机器人的视觉和碰撞几何模型图。然后您可以通过单击组件与模型交互检查他们,右键单击toggle可见性。

导入一个机器人模型作为URDF文件。的.stl在这个URDF指定文件位置必须正确。添加其他.stl文件单独的刚体,明白了addVisual

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

想象机器人与视觉相关的模型。单击或帧检查身体。右键单击身体切换为每个视觉几何可见度。

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

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含29块类型的对象,线。这些对象代表世界,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。

可视化的机器人碰撞几何形状有关。单击或帧检查身体。右键单击身体切换为每个碰撞几何可见度。

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

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含29块类型的对象,线。这些对象代表世界,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]西西里岛舞蹈,布鲁诺,洛伦佐Sciavicco,路易吉的同时,朱塞佩•Oriolo。机器人:造型、计划和控制。伦敦:施普林格,2009年。

扩展功能

版本历史

介绍了R2016b

全部展开