一步一步地建造一个机器人
本示例逐步演示了构建机器人的过程,向您展示了不同的机器人组件以及如何调用函数来构建它。代码部分已显示,但维度和转换的实际值取决于您的机器人。
创建一个刚体对象。
body1 = rigidBody(“界面”);
创建一个关节并将其分配给刚体。定义关节的home position属性,
HomePosition
.使用齐次变换设置关节到父变换,tform
.使用trvec2tform
函数将平移向量转换为齐次变换。ChildToJointTransform
被设置为单位矩阵。jnt1 = rigidBodyJoint(“jnt1”,“转动”);jnt1。HomePosition = pi/4;Tform = trvec2tform([0.25, 0.25, 0]);%用户自定义setFixedTransform (jnt1 tform);界面。关节= jnt1;
创建一个刚体树。该树初始化为一个基本坐标框架,以附加主体。
robot = rigidBodyTree;
将第一个主体添加到树中。指定将它附加到树的底部。前面定义的固定转换是从基本(父)到第一个主体。
addBody(机器人,界面,“基地”)
创建第二个身体。定义该体的属性,并将其附加到第一个刚体上。定义相对于前一个主体框架的转换。
body2 = rigidBody(“body2”);jnt2 = rigidBodyJoint(“jnt2”,“转动”);jnt2。HomePosition = pi/6;%用户自定义Tform2 = trvec2tform([1,0,0]);%用户自定义setFixedTransform (jnt2 tform2);body2。Joint = jnt2;addBody (body2的机器人“界面”);将body2添加到body1
添加其他身体。将体3和体4连接到体2上。
body3 = rigidBody(“body3”);body4 = rigidBody(“body4”);jnt3 = rigidBodyJoint(“jnt3”,“转动”);jnt4 = rigidBodyJoint(“jnt4”,“转动”);tform3 = trvec2tform ((0.6, -0.1, 0)) * eul2tform([-π/ 2,0,0]);%用户自定义Tform4 = trvec2tform([1,0,0]);%用户自定义setFixedTransform (jnt3 tform3);setFixedTransform (jnt4 tform4);jnt3。HomePosition = pi/4;%用户自定义body3。关节= jnt3 body4。关节= jnt4 addBody(机器人,body3,“body2”);将body3添加到body2addBody (body4的机器人“body2”);将body4添加到body2
如果你需要控制一个特定的末端执行器,定义它为带有固定关节的刚体。对于这个机器人,添加一个末端执行器
body4
这样你就可以得到它的变换。bodyEndEffector = rigidBody(“endeffector”);Tform5 = trvec2tform([0.5, 0,0]);%用户自定义setFixedTransform (bodyEndEffector.Joint tform5);addBody (bodyEndEffector的机器人“body4”);
现在已经创建了机器人,接下来可以生成机器人配置。使用给定的配置,您还可以在两个主体框架之间使用
getTransform
.得到一个从末端执行器到基座的变换。tform = getTransform(robot,config)“endeffector”,“基地”)
config = 1×2 struct数组字段:JointName JointPosition tform = -0.5484 0.8362 00 -0.8362 -0.5484 0000 1.0000 0000 0 1.0000
请注意
此转换特定于本示例中指定的维度。机器人的值根据您定义的转换而变化。
可以从现有的机器人或其他机器人模型中创建子树
子树
.指定要用作新子树的基的主体名称。您可以通过添加、更改或删除主体来修改该子树。newArm =子树(机器人,“body2”);removeBody (newArm“body3”);removeBody (newArm“endeffector”)
您还可以将这些子树添加到机器人。添加子树类似于添加主体。指定的主体名称作为附件的基础,子树上的所有转换都相对于该主体框架。在添加子树之前,必须确保所有主体和关节的名称都是唯一的。创建主体和关节的副本,重命名它们,并将它们替换到子树中。调用
addSubtree
将子树附加到指定的主体。newBody1 = copy(getBody(newArm,“body2”));newBody2 = copy(getBody(newArm,“body4”));newBody1。Name =“newBody1”;newBody2。Name =“newBody2”;newBody1。关节= rigidBodyJoint(“newJnt1”,“转动”);newBody2。关节= rigidBodyJoint(“newJnt2”,“转动”);tformTree = trvec2tform([0.2, 0,0]);%用户自定义setFixedTransform (newBody1.Joint tformTree);replaceBody (newArm“body2”, newBody1);replaceBody (newArm“body4”, newBody2);addSubtree(机器人,“界面”, newArm);
最后,你可以使用
showdetails
看看你造的机器人。检查接头类型是否正确。showdetails(机器人)
Idx身体名称联合名称联合类型父名(Idx)子名(s) ------------ -------------------- ---------------- ---------------- 1 body1 jnt1转动基础(0)body2(2) newBody1(6) 2 body2 jnt2转动body1(1) body3(3) body4(4) 3 body3 jnt3转动body2(2) 4 body4 jnt4转动body2(2) endeffector(5) 5 endeffector endeffector_jnt固定body4(4) 6 newBody1 newJnt1转动body1(1) newBody2(7) 7 newBody2 newJnt2转动newBody1(6) --------------------
另请参阅
rigidBodyTree
|inverseKinematics