主要内容

使用广义逆运动学位置三角洲机器人

δ机器人使用模型rigidBodyTree机器人模型。指定运动学约束广义逆运动学(GIK),以确保适当的行为的机器人。解联合配置遵守定义模型和约束。

创建三角洲机器人

通常情况下,三角洲机器人控制闭环运动链。的rigidBodyTree对象不支持闭环链。金宝app为了避免这种情况,机器人被建模为一个树,三角洲的手臂机器人保持独立。调用的helper函数构建机器人模型和输出rigidBodyTree对象

在后续步骤中,广义逆运动学解算器施加约束,力将树的单独的胳膊一起移动,从而确保了机器人运动学上地准确地表现。

机器人是相当复杂的,所以一个helper函数用于创建rigidBodyTree对象。

机器人= exampleHelperDeltaRobot;显示(机器人);

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含43块类型的对象,线。这些对象是基础,arm1_body1、arm1_body2 arm1_body3, arm1_body4, arm1_body5, arm1_body6, base_120, arm2_body1, arm2_body2, arm2_body3, arm2_body4, arm2_body5, arm2_body6, base_240, arm3_body1, arm3_body2, arm3_body3, arm3_body4, arm3_body5, arm3_body6 endEffector。

如图所示,该机器人由三个武器,但他们仍然需要连接到匹配的经典三角洲机器人配置。

创建逆运动学约束

创建一个generalizedInverseKinematics对象,并指定机器人模型。基于性能限制交流过程的最大数量。

gik1 = generalizedInverseKinematics (“RigidBodyTree”,机器人);gik1.SolverParameters。MaxIterations = 20;

创建一个interactiveRigidBodyTree对象可视化机器人模型并提供交互式标记移动身体。这种交互性有助于验证运动学约束。指定gik1解算器使用名称-值对。指定一个姿势权向量,只有关注的xyz-安置而不是方向。

viztree = interactiveRigidBodyTree(机器人,“IKSolver”gik1,“SolverPoseWeights”[0,1]);

使用这个互动对象,末端执行器可以被拖来展示机器人的动作。目前,这种行为不是为正常三角洲机器人所需的。

存储当前轴。

甘氨胆酸ax =;

GIK添加约束解算器,以确保手臂相连。两臂没有终端执行器附加到6号的主臂包括终端执行器。

%确保身体6臂2保持身体姿势相对于6臂1poseTgt1 = constraintPoseTarget (“arm2_body6”);poseTgt1。ReferenceBody =“arm1_body6”;poseTgt1。TargetTransform = trvec2tform ([-√(3) 0.2 * 0.5 * 0.5 * 0.2, 0]) * eul2tform([2π/ 3,0,0));%确保身体6臂3保持身体姿势相对于6臂1poseTgt2 = constraintPoseTarget (“arm3_body6”);poseTgt2。ReferenceBody =“arm1_body6”;poseTgt2。TargetTransform = trvec2tform ([-√(3) 0.2 * 0.5 * -0.5 * 0.2, 0]) * eul2tform([2π/ 3,0,0));

这些约束应用于机器人,电话addConstraintvizTree对象。

addConstraint (viztree poseTgt1);addConstraint (viztree poseTgt2);

图交互式可视化包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含53个对象类型的补丁,线,面。

现在移动终端执行器时,约束是尊重和手臂保持联系。

通过编程解决广义逆运动学

交互式可视化有助于验证求解约束,但直接编程使用,创建一个单独的GIK解算器,可以调用。这个解算器可以复制的IKSolver财产的interactiveRigidBodyTree独立对象,或创建。

gik2 = generalizedInverseKinematics (“RigidBodyTree”,机器人);gik2.SolverParameters。MaxIterations = 20;

GIK解算器,需要一个额外的约束来定义终端执行器的位置,通常由交互式控制标记。更新TargetTransform解决不同期望的末端执行器的位置。

poseTgt3 = constraintPoseTarget (“endEffector”);poseTgt3。ReferenceBody =“基地”;poseTgt3。TargetTransform = trvec2tform ([0, 0, 1]);

指定所有的约束解算器所使用的类型。

gik2。ConstraintInputs = {“姿势”,“姿势”,“姿势”};

调用gik2解算器指定的姿势目标约束对象。给一个初始猜测的机器人的配置。显示解决方案。

%提供一个初始猜解算器q0 = homeConfiguration(机器人);%解给poseTgt3目标构成[q, solutionInfo] = gik2 (q0, poseTgt1, poseTgt2, poseTgt3);%可视化结果图;显示(机器人,q);

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含43块类型的对象,线。这些对象是基础,arm1_body1、arm1_body2 arm1_body3, arm1_body4, arm1_body5, arm1_body6, base_120, arm2_body1, arm2_body2, arm2_body3, arm2_body4, arm2_body5, arm2_body6, base_240, arm3_body1, arm3_body2, arm3_body3, arm3_body4, arm3_body5, arm3_body6 endEffector。