主要内容

analyticalInverseKinematics

求解闭合形式的逆运动学

描述

analyticalInverseKinematics对象生成函数,该函数使用基于Pieper方法的方法计算序列链机器人逆运动学(IK)的所有闭合解[1].该对象生成一个自定义函数,以找到多个不同的关节配置,为刚体树机器人模型的运动学组实现所需的末端执行器位姿,前提是指定的运动学组代表一个具有手腕和兼容运动学参数的适用六自由度串行机械手。手腕被定义为三个轴正交的连续转动关节。

以下是求解器的关键元素:

  • 机器人模型-定义机器人运动学的刚体树模型。指定此模型为rigidBodyTree对象在创建求解器时。

  • 运动组-作为机器人模型一部分的六自由度串行链的基座和末端执行器主体名称。要设置此参数,请使用showdetails函数。

  • 运动组类型-连接基座到末端执行器的关节分类。

要查看机器人的所有可能支持的运动学组,请使用showdetails对象的功能。若要从列表中设置特定组,请单击利用这个运动学群返回列表中运动学组的链接。

要计算特定运动学群的逆运动学,使用generateIKFunction对象的功能。要确保您的机器人模型和运动学组是兼容的,请检查IsValidGroupForIK属性后的。

要生成数值解,请使用inverseKinematics而且generalizedInverseKinematics对象。

创建

描述

例子

analyticalIK = analyticalInverseKinematics (robotRBT创建一个刚体树机器人模型的解析逆运动学求解器,指定为rigidBodyTree对象。末端执行器是中列出的最终主体的身体机器人模型的性质。的robotRBT参数设置RigidBodyTree财产。

analyticalIK = analyticalInverseKinematics (robotRBT、“KinematicGroup”kinGroup)设置KinematicGroup财产kinGroup参数,指定为结构。

属性

全部展开

刚体树式机器人模型,具体为rigidBodyTree对象。要使用提供的机器人模型,请参见loadrobot.要导入统一机器人描述格式(URDF)模型,请参见importrobot函数。

底座和末端执行器主体名称,指定为一个结构。该结构包含以下字段:

  • BaseName—存储在。目录中的机器人模型中的身体名称RigidBodyTree属性,它表示运动学群的基。的基数为缺省值RigidBodyTree财产。

  • EndEffectorBodyName—存储在。目录中的机器人模型中的身体名称RigidBodyTree属性,它表示运动群的末端。缺省值为文件的最后一个正文的身体机器人模型的性质。

一个有效的运动学群必须表示一个六自由度的串行链,其中包含一个腕关节和由定义的包含关节类型KinematicGroupType作为XXX瑞士的.将腕部定义为三个轴正交、运动参数相容的连续转动关节,表示为瑞士XXX其中一个是三个转动关节吗存款准备金率或另一个手腕瑞士.如果运动群类型包含一个移动关节,P,运动学组在此求解器中是无效的。要检查您的运动学群是否对该求解器有效,请参阅IsValidGroupForIK财产。

在创建时,对象会自动从机器人模型中选择一个运动学组,但也可能有其他选项。要查看模型的有效运动学组,请使用showdetails对象的功能。

例子:结构(“:”、“基地”、“EndEffectoryBodyName”,“tool0”)

数据类型:结构体

此属性是只读的。

运动学组的分类,存储为字符向量。每个字符指定了从运动学组的基座到末端执行器的每个刚体的关节类型。这些是角色的选项:

  • R-不形成手腕的转动关节

  • P——移动关节

  • 年代-手腕的转动关节

    请注意

    腕关节或球形关节由三个轴正交的连续转动关节组成。

确定为一个有效的运动群analyticalInverseKinematics对象,则运动学组类型必须为XXX瑞士的,在那里XXX可以是存款准备金率瑞士.如果运动群类型包含一个移动关节,P,运动学组在此求解器中是无效的。要检查您的运动学群是否对该求解器有效,请参阅IsValidGroupForIK财产。

在创建时,对象会自动从机器人模型中选择一个运动学组,但也可能有其他选项。要查看模型的有效运动学组,请使用showdetails对象的功能。

例子:“RRRSSS”

数据类型:字符

此属性是只读的。

IK解决方案配置映射到刚体树配置,指定为六元向量。的输出的IK解的索引进行转换generateIKFunction对象中存储的机器人模型的索引RigidBodyTree财产。

例子:[1 2 3 4 5 6]

数据类型:

此属性是只读的。

指示封闭形式的解是否可能,存储为逻辑、1真正的0).当此属性为,generateIKFunction函数不能为当前运动学组生成IK求解器。使用showdetails对象函数来检查是否存在有效的组。要选择有效组,请指定不同的基或端执行器KinematicGroup属性中存储的机器人模型的运动学参数RigidBodyTree财产。

确定为一个有效的运动群analyticalInverseKinematics对象,则运动学组类型必须为XXX瑞士的,在那里XXX可以是存款准备金率瑞士.如果运动群类型包含一个移动关节,P,运动学组在此求解器中是无效的。要检查您的运动学群是否对该求解器有效,请参阅IsValidGroupForIK财产。

数据类型:逻辑

对象的功能

generateIKFunction 闭型逆运动学的生成函数
showdetails 显示可用的运动学组的概述

例子

全部折叠

为期望的末端执行器生成闭合形式的逆运动学(IK)解。加载所提供的机器人模型并检查基座和末端执行机构的可行运动学组的详细信息。为你想要的运动群生成一个函数。检查特定末端执行器姿态的各种配置。

机器人模型

将ABB IRB 120机器人模型加载到工作空间中。显示模型。

机器人= loadrobot (“abbIrb120”“DataFormat”“行”);显示(机器人);

{

分析本土知识

创建分析型IK求解器。显示机器人模型的详细信息,其中列出了可用于封闭形式的IK解析解的不同运动学组。选择第二个运动学群利用这个运动学群在表的第二行中链接。

= analyticalInverseKinematics aik队效力(机器人);showdetails () aik队效力
-------------------- Robot:(8个身体)索引基本名称EE身体名称类型动作-------------- ---------------- ------- 1 base_link link_6 RRRSSS使用这个运动学组2 base_link tool0 RRRSSS使用这个运动学组

检查运动学组,其中列出了基座和末端执行机构的名称。对于这个机器人,研究小组使用了‘base_link”而且“tool0”分别的身体。

。aik队效力KinematicGroup
ans =结构体字段:BaseName: 'base_link' EndEffectorBodyName: 'tool0'

生成函数

为选定的运动学组生成IK函数。为函数指定一个名称,生成并保存在当前目录中。

generateIKFunction (, aik队效力“robotIK”);

指定所需的末端执行器位置。转换xyz-位置到齐次变换。

eePosition = [0 0.5 0.5];eePose = trvec2tform (eePosition);持有plotTransforms (eePosition tform2quat (eePose))

{

为IK解决方案生成配置

指定生成的IK函数的齐次变换,它生成所需末端执行器姿态的所有解。显示第一个生成的配置,以验证所需的姿势已经实现。

ikConfig = robotIK (eePose);%使用生成的文件表演(机器人,ikConfig (1:));持有plotTransforms (eePosition tform2quat (eePose))

{

依次显示所有闭合形式的IK解。

图;numSolutions =大小(ikConfig, 1);i = 1:size(ikConfig,1) subplot(1,numSolutions,i) show(robot,ikConfig(i,:));结束

{

一些机械臂机器人模型具有较大的自由度。然而,为了达到特定的末端执行器姿态,只需要6个自由度。使用analyticalInverseKinematics对象,该对象支持六自由度机器人,以确定该大自由度机器人模型的各种有效运动学组。使用showdetails对象函数来获取关于模型的信息。

装载机器人模型并生成IK求解器

将机器人模型加载到工作区中,并创建一个analyicalInverseKinematics对象。使用showdetails对象函数以查看支持的运动学组。

机器人= loadrobot (“willowgaragePR2”“DataFormat”“行”);= analyticalInverseKinematics aik队效力(机器人);选择= showdetails () aik队效力;
-------------------- 机器人:(94个身体)索引基本名称EE身体名称类型动作----- --------- ------------ ----------- 1 l_shoulder_pan_link l_param_roll_link RSSSSS使用这个运动组2 r_shoulder_pan_link r_手腕_roll_link RSSSSS使用这个运动组3 l_shoulder_pan_link l_gripper_palm_link RSSSSS使用这个运动组4 r_shoulder_pan_link r_gripper_palm_link RSSSSS使用这个运动组5 l_shoulder_pan_link l_gripper_led_frame RSSSSS使用这个运动组6 l_shoulder_pan_linkl_gripper_motor_accelerometer_link RSSSSS使用此运动组7 l_shoulder_pan_link l_gripper_tool_frame RSSSSS使用此运动组8 r_shoulder_pan_link r_gripper_led_frame RSSSSS使用此运动组9 r_shoulder_pan_link r_gripper_motor_accelerometer_link RSSSSS使用此运动组10 r_shoulder_pan_link r_gripper_tool_frame RSSSSS使用此运动组

的输出以编程方式选择一组showdetails目标函数,选择.所选组以左肩为基座,左手腕为末端执行器。

。aik队效力KinematicGroup =选择(1).KinematicGroup;disp (aik.KinematicGroup)
BaseName: 'l_shoulder_pan_link' EndEffectorBodyName: ' l_腕表roll_link'

生成所选组的IK函数。

generateIKFunction (, aik队效力“willowRobotIK”);

解决分析本土知识

使用随机生成的配置定义目标末端执行器位姿。

rng (0);expConfig = randomConfiguration(机器人);eeBodyName = aik.KinematicGroup.EndEffectorBodyName;baseName = aik.KinematicGroup.BaseName;expEEPose = getTransform(机器人,expConfig、eeBodyName baseName);

利用生成的IK函数求解所有实现定义的末端执行器位姿的机器人配置。要忽略关节限制,请指定作为第二个输入参数。

ikConfig = willowRobotIK (expEEPose、假);

为了在世界框架中显示目标末端执行器位姿,从机器人模型的基础上进行变换,而不是从运动学群的基础上进行变换。的配置向量中指定运动学群IK解的指标,从而显示生成的所有IK解显示函数。

eeWorldPose = getTransform(机器人,expConfig, eeBodyName);generatedConfig = repmat(expConfig, size(ikConfig,1), 1);generatedConfig (:, aik.KinematicGroupConfigIdx) = ikConfig;i = 1:size(ikConfig,1);ax =显示(机器人,generatedConfig(我,:));持有所有;plotTransforms (tform2trvec (eeWorldPose) tform2quat (eeWorldPose),“父”、ax);标题([“解决方案”num2str (i)));结束

{

{

{

{

{

{

{

{

参考文献

[1]皮珀尔,唐纳德。计算机控制下机械臂的运动学.斯坦福大学,1968年。

扩展功能

版本历史

介绍了R2020b

Baidu
map