rigidBodyJoint
创建关节
描述
的rigidBodyJoint
对象定义刚体相对于附着点的移动方式。在树状结构机器人中,一个关节总是属于一个特定的刚体,每个刚体有一个关节。
的rigidBodyJoint
对象可以描述各种类型的关节。在构建刚体树结构时使用rigidBodyTree
,你必须分配联合
对象到刚体的rigidBody
类。
所支持的不同节点类型有:金宝app
固定
-固定关节,防止两个物体之间的相对运动。转动
-围绕给定轴旋转的单自由度(DOF)关节。也称为销或铰接头。棱镜
-沿给定轴滑动的单自由度关节。也叫滑动接头。
根据其定义的几何形状,每种关节类型具有不同尺寸的不同属性。
创建
描述
输入参数
jname
- - - - - -共同的名字
字符串标量|特征向量
联合名称,指定为字符串标量或字符向量。关节名称必须是唯一的,以便从刚体树中访问它。
例子:“elbow_right”
数据类型:字符
|字符串
jtype
- - - - - -联合类型
“固定”
(默认)|字符串标量|特征向量
联合类型,指定为字符串标量或字符向量。在创建关节时,关节类型预先定义了某些属性。
所支持的不同节点类型有:金宝app
固定
-固定关节,防止两个物体之间的相对运动。转动
-围绕给定轴旋转的单自由度(DOF)关节。也称为销或铰接头。棱镜
-沿给定轴滑动的单自由度关节。也叫滑动接头。
例子:“移动”
数据类型:字符
|字符串
属性
类型
- - - - - -联合类型
“固定”
(默认)|字符串标量|特征向量
该属性是只读的。
联合类型,作为字符串标量或字符向量返回。在创建关节时,关节类型预先定义了某些属性。
所支持的不同节点类型有:金宝app
固定
-固定关节,防止两个物体之间的相对运动。转动
-围绕给定轴旋转的单自由度(DOF)关节。也称为销或铰接头。棱镜
-沿给定轴滑动的单自由度关节。也叫滑动接头。
如果将包含该关节的刚体添加到机器人模型中,则必须通过使用替换关节来改变关节类型replaceJoint
.
例子:“移动”
数据类型:字符
|字符串
名字
- - - - - -共同的名字
字符串标量|特征向量
联合名称,作为字符串标量或字符向量返回。关节名称必须是唯一的,以便从刚体树中访问它。如果将包含该关节的刚体添加到机器人模型中,则必须通过使用替换关节来更改关节名称replaceJoint
.
例子:“elbow_right”
数据类型:字符
|字符串
PositionLimits
- - - - - -关节位置限制
向量
关节的位置极限,用向量表示(最小最大)
值。根据关节的类型,这些值有不同的定义。
固定
- - - - - -(南南)
(默认)。固定关节没有关节极限。身体彼此之间保持固定。转动
- - - - - -(π-π)
(默认)。极限以弧度来定义绕轴旋转的角度。棱镜
- - - - - -(-0.5 - 0.5)
(默认)。极限以米为单位定义沿轴的直线运动。
例子:(-π/ 2,π/ 2)
HomePosition
- - - - - -关节起始位置
标量
关节的主位置,以依赖于关节类型的标量指定。主位置必须落在由PositionLimits
.此属性由homeConfiguration
为整个刚体树生成预定义的主配置。
根据关节类型的不同,主位置有不同的定义。
固定
- - - - - -0
(默认)。固定关节没有相关的起始位置。转动
- - - - - -0
(默认)。一个旋转关节有一个由绕关节轴旋转的角度(以弧度为单位)定义的起始位置。棱镜
- - - - - -0
(默认)。移动关节的起始位置由沿关节轴的直线运动定义,单位为米。
例子:π/ 2
弧度转动
联合
JointAxis
- - - - - -关节的运动轴
[南
南
南
](默认)|三元单位矢量
关节的运动轴,指定为三元素单位矢量。矢量可以是三维空间中任意方向的局部坐标。
根据不同的关节类型,关节轴有不同的定义。
固定
-固定关节没有相关的运动轴。转动
-旋转关节使身体在垂直于关节轴的平面上旋转。棱镜
-移动关节沿关节轴方向作直线运动。
例子:[1 0 0]
在周围运动x-轴表示a转动
联合
JointToParentTransform
- - - - - -固定从关节到父框架的转换
(4)
(默认)|4 × 4齐次变换矩阵
该属性是只读的。
从关节到父坐标系的固定变换,作为4 × 4齐次变换矩阵返回。变换将联合前导框架中点的坐标转换为父主体框架。
例子:(4)
ChildToJointTransform
- - - - - -固定了从子主体到关节框架的转换
(4)
(默认)|4 × 4齐次变换矩阵
该属性是只读的。
固定从子体到关节框架的变换,返回为4 × 4齐次变换矩阵。变换将子主体框架中点的坐标转换为联合后继框架。
例子:(4)
对象的功能
复制 |
创建关节的副本 |
setFixedTransform |
设置关节的固定变换属性 |
例子
将刚体和关节附加到刚体树
向刚体树中添加刚体和相应的关节。每个rigidBody
对象包含rigidBodyJoint
对象,必须添加到rigidBodyTree
使用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 ) --------------------
利用Denavit-Hartenberg参数构建机械手机器人
使用Puma560®机器人的Denavit-Hartenberg (DH)参数构建机器人。每个刚体一次添加一个,由关节对象指定子到父的转换。
DH参数定义了机器人的几何形状,与每个刚体如何附着在它的母体上有关。为方便起见,在矩阵中设置Puma560机器人的参数[1].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 - /2 0 0;0 0 0 0];
创建一个刚体树对象来构建机器人。
robot = rigidBodyTree;
创建第一个刚体并将其添加到机器人中。加刚体:添加刚体:
创建一个
rigidBody
对象,并给它一个唯一的名称。创建一个
rigidBodyJoint
对象,并给它一个唯一的名称。使用
setFixedTransform
使用DH参数指定body-to-body转换。DH参数的最后一个元素,θ
,被忽略,因为角度依赖于关节位置。调用
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])轴从
参考文献
[1]科克,p.i和b.s armstronghelouvery。“PUMA 560机器人模型参数的一致性研究”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。孩子{1}
childBody = rigidBody与属性:Name: '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 ) --------------------
参考文献
约翰·J·克雷格。机器人导论:力学与控制.阅读,麻萨诸塞州:Addison-Wesley, 1989。
西西里亚诺,布鲁诺。机器人:建模,规划和控制。伦敦:b施普林格,2009。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
版本历史
在R2016b中引入R2019b:rigidBodyJoint
改名为
未来版本中的行为更改
的rigidBodyJoint
对象从机器人技术。联合
.使用rigidBodyJoint
对于所有的对象创建。
MATLAB命令
您点击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。