generalizedInverseKinematics

创建multiconstraint反向运动学求解

描述

generalizedInverseKinematics系统对象™使用一组运动约束来计算关节配置用于通过指定的刚体树模型rigidBodyTree目的。该generalizedInverseKinematics对象使用非线性求解器来满足约束条件或达到最佳近似。

指定约束类型,ConstraintInputs,调用该对象之前。要调用对象,调用后更改约束输入发布(极化液

指定约束输入作为约束对象和呼叫generalizedInverseKinematics与这些对象传递给它。要建立约束对象,请使用下列对象:

如果你唯一的限制是末端执行器的位置和方向,可以考虑使用逆运动学作为求解代替。

对于封闭形式的解析反向运动学解决方案,请参阅金宝搏官方网站analyticalInverseKinematics

为了解决广义逆运动学约束:

  1. 创建generalizedInverseKinematics对象并设置其属性。

  2. 调用带参数的对象,就好像它是一个功能。

要了解更多有关系统对象的方式工作,请参阅什么是系统对象?

创建

描述

极化液= generalizedInverseKinematics返回一个未指定刚体树模型广义逆运动求解。指定rigidBodyTree模型和ConstraintInputs使用该解算器前财产。

极化液= generalizedInverseKinematics(”RigidBodyTree'rigidbodytree'ConstraintInputs”,inputTypes)返回的一般化逆求解器与刚性体树模型与所指定的预期约束输入运动学。

极化液= generalizedInverseKinematics(名称,值返回的一般化逆运动学解算器与每个指定的属性名称设置为指定值由一个或多个名称,值对参数。名称必须出现内单引号(“”)。您可以按照任何顺序指定多个名称 - 值对参数名1,值1,...,NameN,值N

属性

展开全部

除非另有说明,性质nontunable,这意味着调用对象后,你不能改变它们的值。对象锁,当你打电话给他们,和发布功能解锁他们。

如果属性可调,你可以在任何时候改变它的值。

有关更改属性值的更多信息,请参阅使用系统对象的系统设计在MATLAB

此属性是只读的。

约束输入,指定为标量数字。此属性的值是在指定的约束类型的数量ConstraintInputs属性。

约束输入的类型,指定为字符向量的单元阵列。可能的约束输入类型及其相关的约束对象是:

使用约束对象指定所需的参数,并通过这些对象类型为对象,当你调用它。例如:

创建广义逆运动求解对象。指定RigidBodyTreeConstraintInputs属性。

GIK = generalizedInverseKinematics(...'RigidBodyTree',rigidbodytree,'ConstraintInputs'{'位置'“瞄准”});

建立相应的约束对象。

positionTgt = constraintPositionTarget('left_palm');aimConst = constraintAiming('right_palm');

通过约束的对象为求解对象与最初的猜测。

configSol = GIK(initialGuess,positionTgt,aimConst);

刚体树模型,指定为rigidBodyTree目的。使用Solver之前定义此属性。如果您修改刚体树模型,重新分配刚体树这个属性。例如:

创建IK解算器,并指定刚体树。

GIK = generalizedInverseKinematics(...'RigidBodyTree',rigidbodytree,'ConstraintInputs'{'位置'“瞄准”});

修改刚体树模型。

addBody(rigidbodytree,刚体('body1''基础'

重新分配刚体树IK解算器。如果求解器或功能修改刚体树模型,使用前调用发布允许属性改变。

gik.RigidBodyTree = rigidbodytree;

算法求解逆运动学,指定为'BFGSGradientProjection'要么'LevenbergMarquardt'。对于各算法的详细信息,请参阅反向运动学算法

与指定的算法相关联的参数,指定为结构。在结构中的字段是特定的算法。看到规划求解参数

用法

描述

[configSolsolInfo] = GIK(initialguessconstraintObj,...,constraintObjN发现一个共同的配置,configSol的基础上,初始猜测和逗号分隔的约束描述对象列表。约束描述的数量取决于ConstraintInputs属性。

输入参数

展开全部

机器人构造的初始猜测,指定为结构阵列或向量。的价值initialguess取决于DATAFORMAT在指定的对象的属性RigidBodyTree属性指定的极化液

使用此初始猜测引导求解器到目标机器人配置。然而,该解决方案不能保证到接近初始猜测。

由定义的约束的描述ConstraintInputs财产极化液,指定为一个或多个这些约束对象:

输出参数

展开全部

机器人配置方案,返回为结构阵列或向量,依赖于DATAFORMAT在指定的对象的属性RigidBodyTree属性指定的极化液

结构阵列包含以下字段:

  • JointName- 在指定的关节的名称特征向量RigidBodyTree机器人模型

  • JointPosition- 相应关节的位置

的矢量输出是将在被给予关节位置阵列JointPosition对于一个结构输出。

这种接头结构是所计算的解决方案,实现了公差溶液内的目标末端执行器的姿势。

注意

为转动关节,如果关节限制超过一个范围的2 * PI,其中关节位置包裹时,则返回的关节位置最接近于关节的下界之一。

解决方案信息,返回包含这些字段的结构:

  • 迭代- 求解器运行的迭代次数。

  • NumRandomRestarts- 因为解算器陷在当地最低随机重启的次数。

  • ConstraintViolation- 关于约束,返回作为一个结构数组信息。阵列中的每个结构具有下列字段:

    • 类型:相应的约束输入的类型,如在指定的ConstraintInputs属性。

    • 违反:约束违规相应的约束类型的载体。0表明满足约束条件。

  • ExitFlag- 代码,让在求解执行更多的细节,是什么原因导致它返回。对于每种类型解算器的出口标志,看退出标志

  • 状态- 字符向量描述溶液是否是由每个约束所限定的公差范围内('成功')。如果解决方案是宽容,外面最佳的解决方案,该解决者能找到给出('可以提供的最好的')。

对象函数

使用对象函数,指定系统对象作为第一个输入参数。例如,为了释放一个名为System对象的系统资源OBJ,使用此语法:

释放(OBJ)

展开全部

系统对象算法
发布 释放资源,并允许更改系统对象属性值和输入特性
重启 复位的内部状态系统对象

例子

全部收缩

创建一个广义逆运动学解算器,其保持在特定的位置和朝向点机器人基座一个机械臂。创建约束对象必要的约束参数传递到解算器。

负载预定义库卡LBR机器人模型,它被指定为一个rigidBodyTree目的。

加载exampleRobots.matLBR

创建系统对象™解决广义逆运动学。

GIK = generalizedInverseKinematics;

配置系统对象使用KUKA机器人LBR。

gik.RigidBodyTree = LBR;

告诉解算器,以期待PositionTarget对象和constraintAimingconstraintPositionTarget对象作为约束输入。

gik.ConstraintInputs = {'位置'“瞄准”};

创建两个约束对象。

  1. 身体的命名由来TOOL0位于[0.0 0.5 0.5]相对于机器人的基部框架。

  2. ž命名的身体 - 轴TOOL0朝向机器人的基础坐标系的原点的点。

posTgt = constraintPositionTarget('TOOL0');posTgt.TargetPosition = [0.0 0.5 0.5]。aimCon = constraintAiming('TOOL0');aimCon.TargetPoint = [0.0 0.0 0.0]。

查找配置是满足约束条件。你必须通过约束的对象为它们被指定的顺序系统对象ConstraintInputs属性。指定在机器人结构的初始猜测。

Q0 = homeConfiguration(LBR);%,持续求解初始猜测[Q,solutionInfo] = GIK(Q0,posTgt,aimCon);

通过可视化求解器返回的配置。

显示(LBR,Q);标题([“解算器状态:”solutionInfo.Status])轴([ -  0.75 0.75 -0.75 0.75 -0.5 1])

绘制从目标位置到基部的原点的线段。的由来TOOL0与段的一个端部,且其帧一致ž轴与所述段对齐。

保持plot3([0.0 0.0],[0.5 0.0],[0.5 0.0],'--O')保持

兼容性注意事项

展开全部

在未来的版本中行为改变

扩展功能

介绍了在R2017a