使用广义逆运动学位置三角洲机器人
δ机器人使用模型rigidBodyTree
机器人模型。指定运动学约束广义逆运动学(GIK),以确保适当的行为的机器人。解联合配置遵守定义模型和约束。
创建三角洲机器人
通常情况下,三角洲机器人控制闭环运动链。的rigidBodyTree
对象不支持闭环链。金宝app为了避免这种情况,机器人被建模为一个树,三角洲的手臂机器人保持独立。调用的helper函数构建机器人模型和输出rigidBodyTree对象
。
在后续步骤中,广义逆运动学解算器施加约束,力将树的单独的胳膊一起移动,从而确保了机器人运动学上地准确地表现。
机器人是相当复杂的,所以一个helper函数用于创建rigidBodyTree对象。
机器人= exampleHelperDeltaRobot;显示(机器人);
如图所示,该机器人由三个武器,但他们仍然需要连接到匹配的经典三角洲机器人配置。
创建逆运动学约束
创建一个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));
这些约束应用于机器人,电话addConstraint
到vizTree
对象。
addConstraint (viztree poseTgt1);addConstraint (viztree poseTgt2);
现在移动终端执行器时,约束是尊重和手臂保持联系。
通过编程解决广义逆运动学
交互式可视化有助于验证求解约束,但直接编程使用,创建一个单独的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);