大家好,我是默默无闻小小鱼,最近有很多小伙伴关注了小鱼,感谢下大家的关注~ 今天说说如何给moveit更换默认的运动规划求解器,主要是将默认的KDL更换成Trac-Ik。
Kinematics and Dynamics Library (KDL)是MoveIt!中的默认运动学求解器。
官方介绍:https://www.orocos.org/kdl.html 具有六个旋转关节的串行机器人手臂的骨架。这是运动学结构的一个示例,将运动建模和规范简化为参考系相对运动的几何问题。运动学和动力学库 (KDL) 开发了一个独立于应用程序的框架,用于运动学链的建模和计算,例如机器人、生物力学人体模型、计算机动画人物、机床等。它提供了几何对象(点、框架)的类库, line,… ),各种系列的运动链(串行、人形、并行、移动、…),以及它们的运动规范和插值。
KDL是基于数值解,求解速度慢,在使用的个过程中,经常会提示规划失败、求解失败,所以我们要更换其他的求解器
Trac-IK提供替代 KDL 中流行的反向雅可比方法的反向运动学求解器。具体来说,KDL 的收敛算法基于牛顿方法,在存在关节限制的情况下效果不佳。
一句话:基于KDL做了优化,本质还是数值解。
TRAC-IK 同时运行两个 IK 实现。一种是对 KDL 基于牛顿的收敛算法的简单扩展,该算法通过随机跳跃检测和减轻由于联合限制引起的局部最小值。第二种是 SQP(顺序二次规划)非线性优化方法,它使用更好地处理关节限制的拟牛顿方法。默认情况下,当这些算法中的任何一个收敛到答案时,IK 搜索会立即返回。
官方仓库:https://bitbucket.org/traclabs/trac_ik/src/HEAD/
来一章对比图
- ubuntu20
sudo apt-get install ros-noetic-trac-ik
- ubuntu18
sudo apt-get install ros-melodic-trac-ik
3.2 配置
修改moveit生成的功能包中config目录下的kinematics.yaml文件内容。
替换 kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin (或类似)为 kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
其他参数:
- kinematics_solver_timeout(以秒为单位的超时,例如 0.005)
- position_only_ik ARE
- solve_type可以是 Speed、Distance、Manipulation1、Manipulation2默认为Speed
不需要的参数
- kinematics_solver_attempts参数:与 KDL 不同,TRAC-IK 求解器在卡住时已经自动分重新启动
- kinematics_solver_search_resolution 也不适用
完成修改后重新运行demo.launch即可,在启动日志中若看到Trae-IK则更换成功
4.总结除了Trac-IK,还有IKFAST可以使用,但配置过程相对复杂,小鱼后面探索总结下,看看能不能做一个脚本,帮助大家轻松完成安装和配置。
今天就到这里~