主要内容

刚性小组细胞

创建树结构机器人

描述

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

刚体树模型由以下刚体组成:rigidBody对象。每个刚体都有一个刚体关节与之关联的对象,该对象定义其如何相对于其父实体移动。使用固定转移定义一个关节的框架和一个相邻物体的框架之间的固定变换。的方法可以从模型中添加、替换或移除刚体刚体树

机器人动力学计算也是可能的。指定大量CenterOfMass,惯性每个的属性rigidBody在机器人模型中。你可以计算有或没有外力的正动力学和逆动力学,并计算给定机器人关节运动和关节输入的动力学量。要使用与动态相关的函数,请设置DataFormat财产“行”“列”

对于给定的刚体树模型,还可以使用机器人模型使用机器人逆运动学算法计算所需的末端执行器位置的关节角度。使用时指定刚体树模型逆线性generalizedInverseKinematics

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

创造

描述

例子

机器人= rigidBodyTree创建树结构的机器人对象。使用向其添加刚体addBody

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

性质

全部展开

此属性是只读的。

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

此属性是只读的。

机器人模型中的刚体列表,作为手柄阵列返回。使用此列表以访问特定RigidBody对象。您还可以调用getBody通过名字来获取尸体。

此属性是只读的。

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

robot base的名称,作为字符串标量或字符向量返回。

机器人所经历的重力加速度,指定为[x y z]向量,单位为米/秒平方。每个元素对应于基本机器人框架在该方向上的加速度。

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

对象的功能

addBody 将身体添加到机器人
添加子树 将子树添加到robot
重心 质心位置和雅可比矩阵
checkCollision 检查机器人是否发生碰撞
复制 复制机器人模型
外力 组成相对于基底的外力矩阵
正向动力学 给定关节力矩和状态的关节加速度
几何学 机器人构型的几何雅可比矩阵
gravityTorque 关节力矩用来补偿重力
getBody 通过名字获得机器人的身体手柄
转化 获取身体帧之间的变换
家庭配置 获得机器人的家庭配置
逆动力学 给定运动所需的关节力矩
massMatrix 关节空间质量矩阵
随机配置 机器人随机构形的生成
removeBody 从机器人上取下身体
替换 更换机器人的身体
replaceJoint 更换机体关节
显示 展示机器人模型图
showdetails 显示机器人模型的详细信息
子树 从机器人模型创建子树
速度积 抵消速度引起的力的关节力矩
writeAsFunction 创造刚性小组细胞代码生成函数

例子

全部折叠

将刚体和相应的关节添加到刚体树实体对象包含一个刚体关节对象,且必须加到r中igidBodyTree使用addBody

创建刚体树。

rbtree=刚体树;

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

body1 = rigidBody (“b1”);

创建旋转关节。默认情况下,r实体对象带有固定关节。通过指定新关节替换关节刚体关节对象的车身1.接头财产。

jnt1 = rigidBodyJoint (“jnt1”“革命的”);body1.joint = jnt1;

将刚体添加到树中。指定要将刚体附着到的实体名称。由于这是第一个实体,请使用树的基本名称。

basename=rbtree.basename;addBody(rbtree,body1,basename)

使用showdetails在树上确认刚体和连接是否正确添加。

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

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

DH参数定义了与每个刚体如何连接到其父刚体相关的机器人几何体。为方便起见,请在矩阵中设置Puma560机器人的参数[1]Puma机器人是一个串联链式机械手。DH参数与矩阵中的前一行相关,对应于前一个关节附件。

dhparams=[0 pi/20 0;0.4318 0 0.0203-pi/20.15005 0;0 pi/20.4318 0;0-pi/20 0;0 0 0];

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

机器人= rigidBodyTree;

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

  1. 创建一个rigidBody对象并为其指定唯一的名称。

  2. 创建一个刚体关节对象并为其指定唯一的名称。

  3. 使用固定转移使用DH参数指定身体到身体的转换。DH参数的最后一个元素,θ,将被忽略,因为角度取决于关节位置。

  4. 呼叫addBody将身体的第一个关节连接到机器人的基本框架上。

body1 = rigidBody (“body1”); jnt1=刚体关节(“jnt1”“革命的”);setFixedTransform(jnt1,dhparams(1,:),“dh”);body1.joint = jnt1;addBody(机器人,界面,'根据'

创建和添加其他刚体到机器人。在调用时指定前面的主体名称addBody把它。每个固定变换都是相对于之前的关节坐标系的。

body2 = rigidBody (“body2”); jnt2=刚体关节(“jnt2”“革命的”);body3 =刚体(“body3”); jnt3=刚体关节(“jnt3”“革命的”);body4 = rigidBody (“body4”); jnt4=刚体关节(“jnt4”“革命的”);body5 = rigidBody (“body5”); jnt5=刚性万向节(“jnt5”“革命的”);body6 = rigidBody (“body6”);jnt6=刚性万向节(“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,“body1”)addBody(机器人,body3,“body2”)addBody(机器人,body4,“body3”)addBody(机器人,body5,“body4”) addBody (body6的机器人“body5”

通过使用showdetails显示函数。showdetails列出MATLAB®命令窗口中的所有实体。显示用给定的配置显示机器人(默认为home)。调用修改轴限制并隐藏轴标签。

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])轴

参考

P. I. Corke和B. Armstrong-Helouvry。“PUMA 560机器人模型参数间的一致性搜索”。1994年IEEE机器人技术和自动化国际会议记录,IEEE计算机社会出版社,1994年,第1608-13页。DOI.org (Crossref), doi: 10.1109 / ROBOT.1994.351360。

对现有的文件进行更改刚性小组细胞对象。可以在刚体树中获取替换关节、实体和子树。

将示例机器人加载为刚性小组细胞对象。

负载exampleRobots.mat

使用查看彪马机器人的详细信息showdetails

showdetails (puma1)
--------------------机器人:(6个身体)Idx身体名称关节名称关节类型父名称(Idx)子名称------------------------------------------------------------------------------1 L1 jnt1旋转基础(0)L2(2)2 L2 jnt2旋转L1(1)L3(3)3 L3 jnt3旋转L2(2)L4(4)4 L4 jnt4旋转L3(3)L5(5)5 L5 jnt5旋转L4(4)L6(6)6 L6 jnt6旋转L5(5)--------------------

找个专门的人去检查房子。他的独子L3身体是L4主体。您也可以复制特定主体。

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

更换关节L3主体。您必须创建一个新的联合对象和使用replaceJoint确保下游车身几何不受影响。呼叫固定转移如有必要,可在主体之间定义变换而不是默认标识矩阵。

newJoint = rigidBodyJoint (“移动”); 更换接头(puma1,“L3”, newJoint);showdetails (puma1)
--------------------机器人:(6个身体)Idx身体名称关节名称关节类型父名称(Idx)子名称------------------------------------------------------------------------------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)--------------------

移除整个主体并使用removeBody。移除的主体包含在子树中。

子树= removeBody (puma1,“L4”
子树=具有属性的刚体树:NumBodies:3个实体:{[1x1刚体][1x1刚体][1x1刚体]}基:[1x1刚体]体名:{'L4''L5''L6'}基名:'L3'重力:[0 0]数据格式:'struct'

删除修改L3正文。添加原始副本L3身体L2正文,然后是返回的子树。机器人模型保持不变。看详细的对比showdetails

removeBody (puma1“L3”);加法人(puma1,body3copy,“L2”)添加子树(puma1,“L3”,子树)显示详细信息(puma1)
--------------------机器人:(6个身体)Idx身体名称关节名称关节类型父名称(Idx)子名称------------------------------------------------------------------------------1 L1 jnt1旋转基础(0)L2(2)2 L2 jnt2旋转L1(1)L3(3)3 L3 jnt3旋转L2(2)L4(4)4 L4 jnt4旋转L3(3)L5(5)5 L5 jnt5旋转L4(4)L6(6)6 L6 jnt6旋转L5(5)--------------------

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

创建刚体树模型。创建两个刚体附着在它上面。

机器人= rigidBodyTree (“数据格式”“行”);body1 = rigidBody (“body1”);body2 = rigidBody (“body2”);

指定要附着到实体的关节。设置的固定变换车身2车身1。这个变换是1mx-方向。

joint1 = rigidBodyJoint (“joint1”“革命的”); joint2=刚体关节(“joint2”);setFixedTransform(joint2,trvec2tform([1 0 0])) body1。联合= joint1;body2。联合= joint2;

指定两个实体的动力学特性。将实体添加到机器人模型。在本例中,为杆指定基本值(车身1)带有附加的球形质量(车身2)都给出了。

界面。大量= 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]; addBody(robot,body1,'根据'); addBody(机器人,body2,“body1”);

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

心神= centerOfMass(机器人);显示(机器人);持有在…上地块(组件(1)、组件(2),”或“)视图(2)

图中包含一个Axis对象。Axis对象包含6个patch、line类型的对象。这些对象表示base、body1和body2。

改变第二个物体的质量。注意重心的变化。

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

图中包含一个轴对象。轴对象包含7个类型的贴片物体,线。这些对象代表基座,BODY1,BODD2。

计算给定机器人配置的合成关节加速度,外加外力和重力产生的力。扳手应用于特定物体,并为整个机器人指定重力。

加载一个预定义的KUKA LBR机器人模型,指定为刚体树对象

负载exampleRobots.matlbr

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

数据格式=“行”

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

lbr.重力=[0-9.81];

获取服务器的主配置lbr机器人。

q=家庭配置(lbr);

指定表示机器人所受外力的扳手向量。使用外力函数生成外力矩阵。指定机器人模型、经历扳手的末端执行器、扳手矢量和当前机器人配置。扳手是相对于“工具0”车身框架,要求您指定机器人配置,

扳手=[0.5 0.3];fext=外力(lbr,“工具0”,扳手,q);

计算由于重力和施加在末端执行器上的外力所产生的关节加速度“工具0”什么时候lbr是在它的基本配置。关节速度和关节力矩假定为零(输入为空向量)[]).

qddot=正向动力学(lbr、q、[]、[]、fext);

使用逆动力学函数用于计算静态保持特定机器人配置所需的关节力矩。您还可以使用其他语法指定关节速度、关节加速度和外力。

加载一个预定义的KUKA LBR机器人模型,指定为刚体树对象

负载exampleRobots.matlbr

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

数据格式=“行”

设定重力属性来给出一个特定的重力加速度。

lbr.重力=[0-9.81];

为生成一个随机配置lbr

q = OrandomConfiguration(LBR);

计算车辆所需的关节扭矩lbr以静态方式保持该配置。

tau=逆动力学(lbr,q);

使用外力函数生成应用于刚体树模型的力矩阵。力矩阵是-6载体,该矢量在机器人上每个接头的一行涂抹六元素扳手。使用外力函数和指定末端执行器适当地分配扳手到矩阵的正确行。你可以把多个力矩阵加在一起,给一个机器人施加多个力。

要计算抵消这些外力的关节扭矩,请使用逆动力学函数。

加载一个预定义的KUKA LBR机器人模型,指定为刚体树对象

负载exampleRobots.matlbr

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

数据格式=“行”

设定重力属性来给出一个特定的重力加速度。

lbr.重力=[0-9.81];

获取的主配置lbr

q=家庭配置(lbr);

施加外力link1。输入扳手向量在基架中表示。

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

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

fext2 = externalForce (lbr,“工具0”,[0 0 0 0 0],q);

计算平衡外力所需的关节力矩。要组合这些力,请将力矩阵相加。假设关节速度和加速度为零(输入为[]).

tau=逆动力学(lbr,q,[],[],fext1+fext2);

你可以导入具有.stl与统一机器人描述格式(URDF)文件关联的文件,用于描述机器人的视觉几何图形。每个刚体都指定了一个单独的视觉几何图形importrobot函数解析URDF文件以获取机器人模型和视觉几何图形。函数假定机器人的视觉几何图形和碰撞几何图形相同,并将视觉几何图形指定为相应实体的碰撞几何图形。

使用显示函数以图形的形式显示机器人模型的视觉和碰撞几何图形。然后,您可以通过单击组件来检查它们,并右键单击以切换可见性来与模型进行交互。

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

机器人= 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。机器人学导论:力学与控制。阅读,MA:Addison-Wesley,1989。

西西里亚诺、布鲁诺、洛伦佐·Sciavicco、路易吉·维拉尼和朱塞佩·奥里奥罗。机器人技术:建模,规划和控制。伦敦:施普林格,2009年。

扩展能力

介绍了R2016b