主要内容

constraintRevoluteJoint

转动身体之间的关节约束

描述

constraintRevoluteJoint对象描述了后继体和前继体之间的闭环旋转关节约束rigidBodyTree。满足约束条件时Z-主体中间帧的轴线对齐,它们的帧原点重合。满足条件时,该约束允许沿Z-中间帧的坐标轴。

创建

描述

例子

revConst= constraintRevoluteJoint (successorbody,predecessorbody)返回一个旋转关节约束对象,revConst,它表示指定的后续主体之间的约束successorbody和前任的身体predecessorbody的关节。的successorbody前任参数设置SuccessorBodyPredecessorBody属性,分别。

revConst= constraintRevoluteJoint (___,名称=值)除前面语法中的所有输入参数外,还使用一个名称-值对参数指定属性。

属性

全部展开

后续主体帧的名称,指定为字符串标量或字符向量。类使用此约束时generalizedInverseKinematics逆运动学(IK)求解器,名称必须匹配某体中指定的RigidBodyTreegeneralizedInverseKinematics对象。

前身主体帧的名称,指定为字符串标量或字符向量。类使用此约束时generalizedInverseKinematics逆运动学(IK)求解器,名称必须匹配某体中指定的RigidBodyTreegeneralizedInverseKinematics对象。

关节约束相对于后续主体框架的固定变换,指定为4 × 4矩阵。

例子:[1 0 0 1;0 1 0 1;0 0 1 1;0 0 0 1]

关节约束相对于前体框架的固定变换,指定为4 × 4矩阵。

例子:[1 0 0 1;0 1 0 1;0 0 1 1;0 0 0 1]

关节约束的弧度位置公差,指定为非负标量。

关节约束的位置极限,以弧度为单位,指定为形式中的双元行向量(最小最大)

例子:(-1.5708 - 1.5708)

关节约束的弧度方向公差,指定为非负标量。

约束的权值,指定为三元向量。向量的元素对应于的权重PositionTolerance,OrientationTolerance,JointPositionLimits属性,分别。属性中指定的所有约束的权值一起使用这些权值generalizedInverseKinematics求解器,并可用于指定约束违反对求解器的相对重要性。

例子:[0 1 4]

例子

全部折叠

为一个简单的刚体树创建一个转动关节、移动关节和固定关节约束。

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

rbt = exampleHelperFourBarLinkageTree;显示(rbt碰撞=“上”);View ([0 0 pi]) xlim([-1 4])

{

转动关节约束

为了演示一个转动关节约束,通过连接最后一个连杆的末端来创建一个四杆机构,link3,和第一个链接,link0

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

gikSolverWithRevoluteJointConstraint = generalizedInverseKinematics (RigidBodyTree = rbt,ConstraintInputs = {“转动”,“jointbounds”});

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

gikSolverWithRevoluteJointConstraint.SolverParameters.AllowRandomRestart = false;θ=π/ 2 +π/ 4;

通过设置修复第一个关节θ作为最小和最大的界限。

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

创建一个旋转的联合约束,将继任者和前任机构设置为最后一个环节link3第一个链接link0,分别。指定创建中间帧的前转换和后转换1米远,在X-轴,来自各自的身体。一旦定义,这些中间帧移动,使它们的帧原点重合Z相互重合一致。

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

提供(θ0 0)作为求解器的初始猜测,以及约束条件。

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

可视化机器人,看到机器人作为一个四连杆机构。如果第一个关节旋转,求解器试图保持转动关节约束的中间帧重合,作为一个关节,从而产生四杆运动。

图(Name =“转动关节约束”)显示(rbt qConst碰撞=“上”)
ans = Axes (Primary)具有属性: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'显示所有属性
视图([0 0π])

{“字符串”:“图旋转关节约束包含一个轴对象。坐标轴对象包含11个类型为patch, line的对象。这些对象代表link0, link1, link2, link3, link1_coll_mesh, link2_coll_mesh, link3_coll_mesh, link0_coll_mesh.

移动关节约束

使用移动关节约束来创建一个曲柄滑块。用一个移动关节约束和一个关节边界约束创建一个新的求解器。

gikSolverWithPrismaticJointConstraint = generalizedInverseKinematics (RigidBodyTree = rbt,ConstraintInputs = {“移动”,“jointbounds”});gikSolverWithPrismaticJointConstraint.SolverParameters.AllowRandomRestart = false;

创建移动关节约束与link3link0分别为后继体和前身体,并设置了前身transfrom,使前身中间框架为1米远的上X设在和旋转π/ 2Y-轴来自前身的主体框架。

cPris = constraintPrismaticJoint (“link3”,“link0”, destinortransform =trvec2tform([1 0 0])*eul2tform([0 pi/2 0]));

提供(θ0 0)作为解算器的初始猜测以及约束条件。

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

可视化机器人,看到机器人作为一个滑柄。如果第一个关节旋转,求解器试图保持移动关节约束的中间帧一致,充当关节并导致曲柄滑块运动。

图(Name =“移动关节约束”)显示(rbt qConst碰撞=“上”)
ans = Axes (Primary)具有属性: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'显示所有属性
视图([0 0π])

{

固定关节约束

为了演示一个固定的关节约束,创建一个三角形的链接,当第一个关节移动时保留。用固定关节约束创建一个新的求解器。

gikSolverWithFixedJointConstraint = generalizedInverseKinematics (RigidBodyTree = rbt,ConstraintInputs = {“固定”});

创建固定关节约束与link3link0分别为后继体和前身体,并设置后继变换使后继体中间框架为1米远的上X-轴来自前身的主体框架。

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

设置固定关节约束的方向约束的权值为0

cFix。Weights = [10 0];[qConst,solInfo] = gikSolverWithFixedJointConstraint([theta 0.1 0],cFix);

可视化机器人,看看固定约束关节是如何作用在机器人框架上的。如果第一个关节旋转,求解器会尝试保持固定关节约束的中间帧重合,充当固定关节。

图(Name =“固定关节约束”)显示(rbt qConst碰撞=“上”)
ans = Axes (Primary)具有属性: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'显示所有属性
视图([0 0π])

{

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

版本历史

介绍了R2022a

Baidu
map