generateIKFunction
闭型逆运动学的生成函数
描述
生成具有指定名称的函数,ikFunction
= generateIKFunction (analyticalIK
,functionName
)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,:));结束
求解大自由度机器人的分析IK问题
一些机械臂机器人模型具有较大的自由度。然而,为了达到特定的末端执行器姿态,只需要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)));结束
输入参数
analyticalIK
- - - - - -分析动力学解算器
analyticalInverseKinematics
对象
解析逆运动学求解器,指定为analyticalInverseKinematics
对象。
functionName
- - - - - -生成的函数名称
字符串标量|特征向量
生成的函数的名称,指定为字符串标量或字符向量。
例子:“jacoIKSolver”
数据类型:字符
|字符串
输出参数
ikFunction
-选定运动学组的IK求解器
函数处理
所选运动学组的IK求解器,作为函数句柄返回。该函数生成闭形式解,并具有以下语法选项:
robotConfig = ikFunction(eeTransform) robotConfig = ikFunction(eeTransform,enforceJointLimits) robotConfig = ikFunction(eeTransform,enforceJointLimits,sortByDistance) robotConfig = ikFunction(eeTransform,enforceJointLimits,sortByDistance,referenceConfig)
eeTransform
-期望的末端执行器姿势
4 × 4齐次变换矩阵
期望的末端执行器位姿,指定为4 × 4齐次变换矩阵。生成一个变换矩阵xyz-position和四元数定位,使用trvec2tform
而且quat2tform
在各自的坐标上求函数,并将得到的矩阵相乘。
Tform1 = trvec2tform([x y z]);Tform2 = quat2tform([qw qx qy qz]);eeTransform = tform1 * tform2;
数据类型:单
|双
enforceJointLimits
-执行刚体树模型的关节极限
1
(真正的
) |0
(假
)
实施刚体树模型的关节极限,指定为逻辑,1
(真正的
或0
(假
).当设置为假
时,求解器忽略了机器人模型的关节极限RigidBodyTree财产的analyticalInverseKinematics
对象。
数据类型:逻辑
sortByDistance
-根据所需姿势的距离对配置进行排序
1
(真正的
) |0
(假
)
根据与所需姿势的距离对配置进行排序,指定为逻辑,1
(真正的
或0
(假
).
数据类型:逻辑
referenceConfig
—IK解决方案参考配置
n元向量
IK解决方案的参考配置,指定为n元向量,n为刚体树式机器人模型中不固定关节的个数。每个单元对应一个关节位置,作为旋转关节的旋转角度(以弧度为单位)或移动关节的线性距离(以米为单位)。
数据类型:单
|双
扩展功能
C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。
的analyticalInverseKinematics
对象仅支持为通过调用generateIKFunction
.使用analyticalInverseKinematics
对象来修改参数并设置求解器。然后,用generateIKFunction
为您的机器人模型创建自定义IK函数。调用codegen
(MATLAB编码器)在输出ikFunction
这是生成的。
版本历史
介绍了R2020b
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。