【MATLAB示例】constraintFixedJoint

机器人与自主系统——机器人系统工具箱——逆运动学

constraintFixedJoint

描述

constraintFixedJoint 对象描述了在同一个 rigidBodyTree 上继承体与前置体之间的闭环固定关节约束。该约束在没有相对方向且帧的原点重合时满足。这种约束在满足时不允许中间帧之间有相对运动。

创建

语法
fixedConst = constraintFixedJoint(successorbody,predecessorbody)
fixedConst = constraintFixedJoint(___,Name=Value)
示例
fixedConst = constraintFixedJoint(successorbody,predecessorbody)

返回一个表示继承体 successorbody 和前置体 predecessorbody 之间约束的固定约束对象 fixedConstsuccessorbodypredecessorbody 参数分别设置 SuccessorBodyPredecessorBody 属性。

fixedConst = constraintFixedJoint(___,Name=Value) 使用一个或多个名称-值对参数,除了之前语法中的所有输入参数外,还可以指定属性。

属性

  • SuccessorBody — 关节的继承体名称
    字符串标量 | 字符向量
    关节继承体帧的名称,指定为字符串标量或字符向量。当与 generalizedInverseKinematics 逆运动学 (IK) 解算器一起使用此约束时,该名称必须与 generalizedInverseKinematics 对象的 RigidBodyTree 中指定的一个身体匹配。

  • PredecessorBody — 关节的前置体名称
    字符串标量 | 字符向量
    关节前置体帧的名称,指定为字符串标量或字符向量。当与 generalizedInverseKinematics 逆运动学 (IK) 解算器一起使用此约束时,该名称必须与 generalizedInverseKinematics 对象的 RigidBodyTree 中指定的一个身体匹配。

  • SuccessorTransform — 相对于继承体帧的关节约束的固定变换
    eye(4)(默认) | 4x4 矩阵

  • PredecessorTransform — 相对于前置体帧的关节约束的固定变换
    eye(4)(默认) | 4x4 矩阵

  • PositionTolerance — 关节约束的位置容差
    0(默认) | 非负标量

  • OrientationTolerance — 关节约束的方向容差
    0(默认) | 非负标量

  • Weights — 约束的权重
    [1 1](默认) | 两元素向量
    约束的权重,指定为一个两元素向量。向量的元素分别对应于 PositionToleranceOrientationTolerance 属性的权重。这些权重与 generalizedInverseKinematics 解算器中指定的所有约束的权重一起使用,以适当地平衡每个约束。

示例

  • 创建闭环关节约束
    为简单的刚体树创建一个旋转、平移和固定关节约束。

    使用 exampleHelperFourBarLinkageTree 辅助函数创建一个简单的机器人模型,以演示闭环约束。

    rbt = exampleHelperFourBarLinkageTree;
    show(rbt,Collisions="on");
    view([0 0 pi])
    xlim([-1 4])
    

    旋转关节约束

    为演示旋转关节约束,通过连接最后一个连杆 link3 和第一个连杆 link0 来创建一个四杆联动。

    创建一个具有旋转关节约束和关节边界约束的广义逆运动学解算器。

    gikSolverWithRevoluteJointConstraint = generalizedInverseKinematics(RigidBodyTree=rbt, ...
        ConstraintInputs={'revolute','jointbounds'});
    

    为确保可重复的 IK 解决方案,禁用随机重启。

    gikSolverWithRevoluteJointConstraint.SolverParameters.AllowRandomRestart = false;
    theta = pi/2+pi/4;
    

    通过将 theta 设为最小和最大边界,固定第一个关节。

    activeJointConstraint = constraintJointBounds(rbt);
    activeJointConstraint.Weights = [1 0 0];
    activeJointConstraint.Bounds(1,:) = [theta theta];
    

    创建一个旋转关节约束,继承体和前置体分别设置为最后一个连杆 link3 和第一个连杆 link0。指定前置体和继承体的变换,使中间帧在 X 轴上分别离它们的身体 1 米远。定义后,当 Z 轴对齐时,这些中间帧移动,使其帧原点重合。

    cRev = constraintRevoluteJoint("link3","link0", ...
        PredecessorTransform=trvec2tform([1 0 0]), ...
        SuccessorTransform=trvec2tform([1 0 0]));
    

    提供 [theta 0 0] 作为解算器的初始猜测以及约束。

    qConst = gikSolverWithRevoluteJointConstraint([theta 0 0],cRev,activeJointConstraint);
    

    可视化机器人以查看机器人作为四杆联动的行为。如果第一个关节旋转,解算器将尝试保持旋转关节约束的中间帧重合,作为一个关节动作,导致四杆运动。

    figure(Name="Revolute Joint Constraint")
    show(rbt,qConst,Collisions="on")
    ans = 
      Axes (Primary) with properties:
    
                 XLim: [-2.5000 2.5000]
                 YLim: [-2.5000 2.5000]
               XScale: 'linear'
               YScale: 'linear'
        GridLineStyle: '-'
             Position: [0.1300 0.1100 0.7750 0.8150]
                Units: 'normalized'
    
      Use GET to show all properties
    
    view([0 0 pi])
    

    平移关节约束

    使用平移关节约束创建一个滑块-曲柄。使用平移关节约束和关节边界约束创建一个新的解算器。

    gikSolverWithPrismaticJointConstraint = generalizedInverseKinematics(RigidBodyTree=rbt, ...
        ConstraintInputs={'prismatic','jointbounds'});
    gikSolverWithPrismaticJointConstraint.SolverParameters.AllowRandomRestart=false;
    

    创建平移关节约束,link3link0 分别为继承体和前置体,并设置前置体变换,使前置体中间帧在 X 轴上离前置体帧 1 米远,并在 Y 轴上旋转 pi/2。

    cPris=constraintPrismaticJoint("link3","link0",PredecessorTransform=trvec2tform([1 0 0])*eul2tform([0 pi/2 0]));
    

    提供 [theta 0 0] 作为解算器的初始猜测以及约束。

    qConst = gikSolverWithPrismaticJointConstraint([theta 0 0],cPris,activeJointConstraint);
    

    可视化机器人以查看机器人作为滑块-曲柄的行为。如果第一个关节旋转,解算器将尝试保持平移关节约束的中间帧重合,作为关节动作,导致滑块-曲柄运动。

  figure(Name="Prismatic Joint Constraint")
  show(rbt,qConst,Collisions="on")
  ans = 
    Axes (Primary) with properties:

               XLim: [-2.5000 2.5000]
               YLim: [-2.5000 2.5000]
             XScale: 'linear'
             YScale: 'linear'
      GridLineStyle: '-'
           Position: [0.1300 0.1100 0.7750 0.8150]
              Units: 'normalized'

    Use GET to show all properties

  view([0 0 pi])

固定关节约束

为演示固定关节约束,使用连杆创建一个三角形,当第一个关节移动时保持三角形的形状。使用固定关节约束创建一个新的解算器。

gikSolverWithFixedJointConstraint = generalizedInverseKinematics(RigidBodyTree=rbt, ...
    ConstraintInputs={'fixed'});

创建固定关节约束,link3link0 分别为继承体和前置体,并设置继承体变换,使前置体中间帧在 X 轴上离前置体帧 1 米远。

cFix = constraintFixedJoint("link3","link1",SuccessorTransform=trvec2tform([1 0 0]));

将固定关节约束的方向约束权重设置为 0。

cFix.Weights = [1 0];
[qConst,solInfo] = gikSolverWithFixedJointConstraint([theta 0.1 0],cFix);

可视化机器人以查看固定关节约束如何作用在机器人框架上。如果第一个关节旋转,解算器将尝试保持固定关节约束的中间帧重合,作为固定关节动作。

figure(Name="Fixed Joint Constraint")
show(rbt,qConst,Collisions="on")
ans = 
  Axes (Primary) with properties:

             XLim: [-2.5000 2.5000]
             YLim: [-2.5000 2.5000]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [0.1300 0.1100 0.7750 0.8150]
            Units: 'normalized'

  Use GET to show all properties

view([0 0 pi])
  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值