主要内容

inverseKinematics

创建逆运动学求解器

描述

inverseKinematics系统对象™创建一个逆运动学(IK)求解器,根据指定的刚体树模型计算所需的末端执行器位姿的关节配置。方法为机器人创建刚体树模型rigidBodyTree类。该模型定义了求解器强制执行的所有联合约束。如果解决方案可行,则遵守机器人模型中规定的关节极限。

要指定除末端执行器位姿以外的更多约束,包括瞄准约束、位置边界或方向目标,请考虑使用generalizedInverseKinematics.该对象允许您计算多约束IK解。

有关封闭形式的IK分析解,请参见analyticalInverseKinematics

要计算所需末端执行器位姿的关节配置:

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

  2. 调用带有参数的对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

例子

本土知识= inverseKinematics创建逆运动学求解器。中指定刚体树模型以使用该求解器RigidBodyTree财产。

本土知识= inverseKinematics (名称,值使用一个或多个指定的附加选项创建逆运动学求解器名称,值对参数。的名字属性名和价值对应的值。的名字必须出现在单引号内().可以以任意顺序指定多个名值对参数Name1, Value1,…,的家

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放函数解锁它们。

如果属性是可调,您可以随时更改其值。

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

刚体树模型,指定为rigidBodyTree对象。如果你修改你的刚体树模型,重新分配刚体树到这个属性。例如:

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

ik = inverseKinematics(“RigidBodyTree”rigidbodytree)

修改刚体树模型。

addBody (rigidbodytree rigidBody (“界面”),“基地”

将刚体树重新分配给IK求解器。如果解算器或一步函数在修改刚体树模型之前调用,使用释放允许更改属性。

本土知识。RigidBodyTree = RigidBodyTree;

求解逆运动学的算法,具体为“BFGSGradientProjection”“LevenbergMarquardt”.有关每种算法的详细信息,请参见逆运动学算法

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

使用

描述

例子

configSolsolInfo= ik(endeffector构成权重initialguess查找实现指定末端执行器位姿的关节配置。指定配置的初始猜测和您对的六个组件公差的期望权重构成.与算法执行相关的解信息,solInfo,返回联合配置解,configSol

输入参数

全部展开

末端执行器名称,指定为字符向量。末端执行器必须是rigidBodyTree对象中指定的inverseKinematics系统对象。

末端执行器位姿,指定为4 × 4齐次变换。中指定的刚体的所需位置和方向endeffector财产。

位姿公差的权重,指定为六元向量。前三个元素对应于所需姿势的定向误差权重。最后三个元素对应于误差的权重xyz想要的姿势的位置。

机器人配置的初始猜测,指定为结构数组或向量。使用这个初始猜测来帮助引导求解器得到所需的机器人配置。解不能保证接近这个初始猜测。

若要使用矢量形式,请设置DataFormat属性中赋值的对象的RigidBodyTree任何一方的财产“行”“列”

输出参数

全部展开

机器人配置,作为结构数组返回。结构数组包含以下字段:

  • JointName—关节名称的字符向量RigidBodyTree机器人模型

  • JointPosition-相应的关节位置

该关节配置是在解决方案公差范围内实现所需的末端执行器位姿的计算解决方案。

请注意

对于转动关节,如果关节极限超过2 *π,其中发生关节位置缠绕,则返回的关节位置为最接近关节下界的位置。

若要使用矢量形式,请设置DataFormat属性中赋值的对象的RigidBodyTree任何一方的财产“行”“列”

解决方案信息,作为结构返回。解决方案信息结构包含以下字段:

  • 迭代-算法运行的迭代次数。

  • NumRandomRestarts-随机重启的次数,因为算法卡在本地最小值。

  • PoseErrorNorm-与期望的末端执行器位姿相比,解的位姿误差的大小。

  • ExitFlag-给出更多算法执行细节和返回原因的代码。有关每种算法类型的退出标志,请参见出口标志

  • 状态-描述解决方案是否在公差(“成功”)或算法能找到的最佳解(“最好的”).

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放名为obj,使用以下语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 的内部状态重置系统对象

例子

全部折叠

为机器人模型生成关节位置,以实现所需的末端执行器位置。的inverseKinematics系统对象采用逆运动学算法求解有效关节位置。

加载示例机器人。的puma1机器人是一个rigidBodyTree具有六个转动关节的六轴机械臂模型。

负载exampleRobots.matshowdetails (puma1)
-------------------- 机器人:身体(6)Idx身体名称联合名称联合类型父母名字(Idx)孩子的名字(s ) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1转动基地(0)L2 (2) 2 L2 jnt2转动L1 (1) L3 (3) 3 L3 jnt3转动L2 (2) L4 (4) 4, jnt4转动L3(3)一两百(5)5 L5 jnt5转动L4(4) 16种(6)6 16种jnt6转动L5 (5 ) --------------------

生成一个随机配置。获取从末端执行器(L6)到基座的变换,用于该随机配置。使用这个变换作为末端执行器的目标姿态。显示此配置。

randConfig = puma1.randomConfiguration;tform = getTransform(puma1,randConfig,“哈佛”“基地”);显示(puma1 randConfig);

{

创建一个inverseKinematics对象的puma1模型。为姿势的不同组成部分指定权重。对方位角使用比位置分量更低的幅度权重。使用机器人的家庭配置作为初始猜测。

ik = inverseKinematics(“RigidBodyTree”, puma1);Weights = [0.25 0.25 0.25 1 1 1];initialguess = puma1.homeConfiguration;

计算关节位置使用本土知识对象。

[configSoln,solnInfo] = ik(“哈佛”,重量tform initialguess);

显示新生成的解决方案配置。解决方案是一个略有不同的关节配置,以实现相同的末端执行器位置。多个对本土知识对象可以给出相似或非常不同的关节构型。

显示(puma1 configSoln);

{

参考文献

Badreddine, Hassan, Stefan Vandewalle和Johan Meyers。湍流流动直接数值模拟中序列二次规划(SQP)的最优控制。计算物理杂志.256(2014): 1-16。doi: 10.1016 / j.jcp.2013.08.044。

[2] Bertsekas, Dimitri P。非线性规划.贝尔蒙特,马萨诸塞州:雅典娜科学,1999年。

[3]高德法布,唐纳德。Davidon变度量法在线性不等式和不等式约束下的极大化问题的推广。SIAM应用数学杂志.第17卷第4期(1969):739-64。doi: 10.1137 / 0117067。

[4] Nocedal, Jorge和Stephen Wright。数值优化.纽约,纽约:施普林格,2006。

[5]杉原,友道。Levenberg-Marquardt方法的解性-无关逆运动学IEEE机器人汇刊第27卷第5期(2011):984-91。doi: 10.1109 / tro.2011.2148230。

[6]赵建民,诺曼·i·巴德勒。高关节图形的非线性规划逆运动学定位ACM图形学汇刊第13卷第4期(1994):313-36。doi: 10.1145/195826.195827。

扩展功能

版本历史

在R2016b中引入

全部展开

Baidu
map