主要内容

一步一步地建造一个机器人

本示例逐步演示了构建机器人的过程,向您展示了不同的机器人组件以及如何调用函数来构建它。代码部分已显示,但维度和转换的实际值取决于您的机器人。

  1. 创建一个刚体对象。

    body1 = rigidBody(“界面”);

    用椭圆表示的刚体物体

  2. 创建一个关节并将其分配给刚体。定义关节的home position属性,HomePosition.使用齐次变换设置关节到父变换,tform.使用trvec2tform函数将平移向量转换为齐次变换。ChildToJointTransform被设置为单位矩阵。

    jnt1 = rigidBodyJoint(“jnt1”“转动”);jnt1。HomePosition = pi/4;Tform = trvec2tform([0.25, 0.25, 0]);%用户自定义setFixedTransform (jnt1 tform);界面。关节= jnt1;

    刚体对象表示为一个椭圆,带有一个刚体框架和一个箭头,表示刚体框架与前一框架之间的转换

  3. 创建一个刚体树。该树初始化为一个基本坐标框架,以附加主体。

    robot = rigidBodyTree;

    机器人的工作空间和带有刚体对象的基础框架的位置表示为一个椭圆,其中有一个体框架,并有一个箭头表示在工作空间外的体框架与前一框架之间的转换

  4. 将第一个主体添加到树中。指定将它附加到树的底部。前面定义的固定转换是从基本(父)到第一个主体。

    addBody(机器人,界面,“基地”

    将机器人的工作空间和带有刚体对象的基础框架的位置表示为一个椭圆,框架附着在新刚体树的基础上。

  5. 创建第二个身体。定义该体的属性,并将其附加到第一个刚体上。定义相对于前一个主体框架的转换。

    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

    刚体树体与附加体,表示为椭圆,添加到第一体的末端。

  6. 添加其他身体。将体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

    之前的刚性树体加上另外两个体,两者都附着在第二个体上

  7. 如果你需要控制一个特定的末端执行器,定义它为带有固定关节的刚体。对于这个机器人,添加一个末端执行器body4这样你就可以得到它的变换。

    bodyEndEffector = rigidBody(“endeffector”);Tform5 = trvec2tform([0.5, 0,0]);%用户自定义setFixedTransform (bodyEndEffector.Joint tform5);addBody (bodyEndEffector的机器人“body4”);
  8. 现在已经创建了机器人,接下来可以生成机器人配置。使用给定的配置,您还可以在两个主体框架之间使用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

    完成了从末端执行器到基座的刚体树的转换

    请注意

    此转换特定于本示例中指定的维度。机器人的值根据您定义的转换而变化。

  9. 可以从现有的机器人或其他机器人模型中创建子树子树.指定要用作新子树的基的主体名称。您可以通过添加、更改或删除主体来修改该子树。

    newArm =子树(机器人,“body2”);removeBody (newArm“body3”);removeBody (newArm“endeffector”

    附加的两体机器人作为子树创建,但独立于另一个机器人

  10. 您还可以将这些子树添加到机器人。添加子树类似于添加主体。指定的主体名称作为附件的基础,子树上的所有转换都相对于该主体框架。在添加子树之前,必须确保所有主体和关节的名称都是唯一的。创建主体和关节的副本,重命名它们,并将它们替换到子树中。调用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);

    子刚体树连接到第一刚体树的第一刚体

  11. 最后,你可以使用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) --------------------

另请参阅

|

相关的话题