主要内容

generateIKFunction

闭型逆运动学的生成函数

描述

例子

ikFunction= generateIKFunction (analyticalIKfunctionName生成具有指定名称的函数,functionName,该软件为选定的运动学组计算逆运动学(IK)的闭合解,以实现所需的末端执行器位姿。若要生成一组配置,以实现所需的末端执行器姿态,请使用生成的函数ikFunction.指定的analyticalInverseKinematics对象analyticalIK必须包含有效的运动学组。有关确定有效运动群的信息,请参见showdetails函数。

有关生成函数的语法,请参见ikFunction输出参数。

例子

全部折叠

为期望的末端执行器生成闭合形式的逆运动学(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)));结束

{

{

{

{

{

{

{

{

输入参数

全部折叠

解析逆运动学求解器,指定为analyticalInverseKinematics对象。

生成的函数的名称,指定为字符串标量或字符向量。

例子:“jacoIKSolver”

数据类型:字符|字符串

输出参数

全部折叠

所选运动学组的IK求解器,作为函数句柄返回。该函数生成闭形式解,并具有以下语法选项:

robotConfig = ikFunction(eeTransform) robotConfig = ikFunction(eeTransform,enforceJointLimits) robotConfig = ikFunction(eeTransform,enforceJointLimits,sortByDistance) robotConfig = ikFunction(eeTransform,enforceJointLimits,sortByDistance,referenceConfig)

期望的末端执行器位姿,指定为4 × 4齐次变换矩阵。生成一个变换矩阵xyz-position和四元数定位,使用trvec2tform而且quat2tform在各自的坐标上求函数,并将得到的矩阵相乘。

Tform1 = trvec2tform([x y z]);Tform2 = quat2tform([qw qx qy qz]);eeTransform = tform1 * tform2;

数据类型:|

实施刚体树模型的关节极限,指定为逻辑,1真正的0).当设置为时,求解器忽略了机器人模型的关节极限RigidBodyTree财产的analyticalInverseKinematics对象。

数据类型:逻辑

根据与所需姿势的距离对配置进行排序,指定为逻辑,1真正的0).

数据类型:逻辑

IK解决方案的参考配置,指定为n元向量,n为刚体树式机器人模型中不固定关节的个数。每个单元对应一个关节位置,作为旋转关节的旋转角度(以弧度为单位)或移动关节的线性距离(以米为单位)。

数据类型:|

扩展功能

版本历史

介绍了R2020b

Baidu
map