rigidBodyJoint

创建一个联合

描述

rigidBodyJoint对象定义了刚体相对于连接点如何移动。在树状结构机器人中,一个关节总是属于一个特定的刚体,每个刚体都有一个关节。

rigidBodyJoint对象可以描述各种类型的关节。当建立刚体树结构时rigidBodyTree,你必须分配联合物体对刚体使用rigidBody类。

支持的不同接头类型有:金宝app

  • 固定固定关节,防止两个物体之间的相对运动。

  • 转动单自由度(DOF)关节,绕给定轴旋转。也叫销钉或铰链接头。

  • 棱镜-单自由度关节,沿给定轴滑动。也叫滑动关节。

每个关节类型都有不同的属性和不同的尺寸,这取决于其定义的几何形状。

创建

描述

jointObj= rigidBodyJoint (jname使用指定的名称创建固定连接。

例子

jointObj= rigidBodyJoint (jnamejtype使用指定的名称创建指定类型的连接。

输入参数

全部展开

联合名称,指定为字符串标量或字符向量。关节名称必须是唯一的,才能从刚体树中访问它。

例子:“elbow_right”

数据类型:字符|字符串

联合类型,指定为字符串标量或字符向量。在创建关节时,关节类型预定义某些属性。

支持的不同接头类型有:金宝app

  • 固定固定关节,防止两个物体之间的相对运动。

  • 转动单自由度(DOF)关节,绕给定轴旋转。也叫销钉或铰链接头。

  • 棱镜-单自由度关节,沿给定轴滑动。也叫滑动关节。

例子:

数据类型:字符|字符串

属性

全部展开

此属性是只读的。

连接类型,作为字符串标量或字符向量返回。在创建关节时,关节类型预定义某些属性。

支持的不同接头类型有:金宝app

  • 固定固定关节,防止两个物体之间的相对运动。

  • 转动单自由度(DOF)关节,绕给定轴旋转。也叫销钉或铰链接头。

  • 棱镜-单自由度关节,沿给定轴滑动。也叫滑动关节。

如果将包含该关节的刚体添加到机器人模型中,则必须通过更换关节使用来改变关节类型replaceJoint

例子:

数据类型:字符|字符串

联合名称,作为字符串标量或字符向量返回。关节名称必须是唯一的,才能从刚体树中访问它。如果将包含该关节的刚体添加到机器人模型中,则必须通过替换关节使用来更改关节名称replaceJoint

例子:“elbow_right”

数据类型:字符|字符串

关节的位置限制,指定为的向量(最小最大)值。根据关节的类型,这些值有不同的定义。

  • 固定- - - - - -(南南)(默认)。固定关节没有关节限制。物体之间是固定的。

  • 转动- - - - - -(π-π)(默认)。极限以弧度定义绕轴的旋转角度。

  • 棱镜- - - - - -(-0.5 - 0.5)(默认)。极限以米为单位定义沿轴的线性运动。

例子:

关节的主位置,指定为依赖于关节类型的标量。主位置必须落在设定的范围内PositionLimits.此属性由homeConfiguration为整个刚体树生成预定义的主配置。

根据关节类型的不同,home position有不同的定义。

  • 固定- - - - - -0(默认)。一个固定的关节没有相关的家庭位置。

  • 转动- - - - - -0(默认)。一个转动关节有一个由围绕关节轴的旋转角度(以弧度为单位)定义的初始位置。

  • 棱镜- - - - - -0(默认)。移动关节有一个由沿着关节轴的直线运动定义的位置,以米为单位。

例子:

关节的运动轴,指定为一个三元单位矢量。在局部坐标系中,矢量可以是三维空间中的任意方向。

根据关节类型的不同,关节轴有不同的定义。

  • 固定-固定关节没有相应的运动轴。

  • 转动转动关节在垂直于关节轴的平面上旋转物体。

  • 棱镜—移动关节使物体沿关节轴方向作线性运动。

例子:

此属性是只读的。

固定变换从关节到父框架,返回为一个4 × 4齐次变换矩阵。转换将关节前任框架中的点的坐标转换为父体框架。

例子:

此属性是只读的。

固定转换从子体到关节框架,返回为一个4 × 4齐次变换矩阵。转换将子体框架中的点的坐标转换为关节后续框架。

例子:

对象的功能

复制 创建关节的副本
setFixedTransform 集合关节的固定变换特性

例子

全部折叠

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

创建刚体树。

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)参数来构建机器人。每个刚体每次添加一个,由关节对象指定子到父的转换。

DH参数定义了机器人的几何形状与每个刚体如何连接到它的父体有关。为方便起见,在矩阵中设置Puma560机器人的参数。Puma机器人是一种链式机械手。DH参数相对于矩阵中的前一行,对应于前一个关节连接。

Dhparams = [0 pi/2 0 0;0.4318 00 0 0.0203 -pi/2 0.15005 0;0 pi/2 0.4318 0;0 -pi/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”);界面。联合= 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®命令窗口中的所有主体。显示用给定的配置显示机器人(默认为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])轴

对现有的文件进行更改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。孩子{1}
childBody = rigidBody with properties: Name: 'L4' Joint: [1x1 rigidBodyJoint] Mass: 1 CenterOfMass:[0 0 0]惯性:[1 1 1 0 0 0]Parent: [1x1 rigidBody] Children: {[1x1 rigidBody]} visual: {} Collisions: {}
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”
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)--------------------

兼容性的考虑

全部展开

未来版本中的行为改变

参考文献

约翰·J·克雷格机器人学导论:力学与控制.阅读,MA: Addison-Wesley, 1989。

[2]西西里岛舞蹈,布鲁诺。机器人技术:建模,规划和控制。伦敦:施普林格,2009年。

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

介绍了R2016b