主要内容

基于广义逆运动学的位置Delta机器人

用a建模一个delta机器人rigidBodyTree机器人模型。对广义逆运动学(GIK)进行运动学约束,以保证机器人的正常运动。求解符合定义模型和约束条件的关节构型。

创建三角洲机器人

通常,delta机器人包含闭环运动链。的rigidBodyTree对象不支持闭环链。金宝app为了避免这种情况,机器人被建模为一棵树,delta机器人的手臂保持不连接。调用构建机器人模型的helper函数并输出rigidBodyTree对象

在接下来的步骤中,广义逆运动学求解器将应用约束条件,迫使树的各独立臂一起移动,从而确保机器人以精确的运动学方式行动。

这个机器人相当复杂,所以使用一个助手函数来创建rigidBodyTree对象。

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

图中包含一个轴对象。axis对象包含43个类型为patch, line的对象。这些对象代表base, arm1_body1, arm1_body2, arm1_body3, arm1_body4, arm1_body5, arm1_body6, base_120, arm2_body1, arm2_body2, arm2_body3, arm2_body5, arm2_body6, base_240, arm3_body1, arm3_body2, arm3_body3, arm3_body4, arm3_body5, arm3_body6, endeeffector。

如图所示,机器人由三个手臂组成,但它们仍然需要连接,以匹配经典的delta机器人构型。

创建逆运动学约束

创建一个generalizedInverseKinematics对象,并指定机器人模型。根据性能限制最大交互次数。

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

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

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

使用这个交互对象,末端执行器可以被拖来拖去,以显示机器人是如何移动的。目前,这种行为并不是理想的普通三角机器人。

存储当前轴。

甘氨胆酸ax =;

在GIK求解器中添加约束条件,以确保手臂是连接的。将两个没有末端执行器的手臂连接到包括末端执行器的主手臂的第6体。

确保手臂2的身体6保持相对于手臂1的身体6的姿势poseTgt1 = 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));%确保手臂3的身体6保持相对于手臂1的身体6的姿势poseTgt2 = 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);

图形交互可视化包含一个轴对象。轴对象包含53个类型为patch, line, surface的对象。这个对象表示base。

当末端执行器移动时,约束条件得到了满足,手臂保持连接。

编程求解广义逆运动学

交互式可视化对于验证求解器约束非常有用,但是为了直接编程使用,需要创建一个可以调用的独立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);

图中包含一个轴对象。axis对象包含43个类型为patch, line的对象。这些对象代表base, arm1_body1, arm1_body2, arm1_body3, arm1_body4, arm1_body5, arm1_body6, base_120, arm2_body1, arm2_body2, arm2_body3, arm2_body5, arm2_body6, base_240, arm3_body1, arm3_body2, arm3_body3, arm3_body4, arm3_body5, arm3_body6, endeeffector。