文章目录
- 1.下载trac_ik的源码
- 2.安装 NLopt library
- 3.编译源码
- 4.使用
在ros1+moveit1中,使用trac_ik是很简单的一件事情:【TRAC-IK Kinematics Solver】
但是在Ros2中,无论MoveIt2也好,还是trac_ik也好,都没有提供标准的trac_ik集成(使用)方法。
不过有个大神他基于trac_ik的源码实现了功能:【aprotyas / trac_ik】
使用起来也挺方便
1.下载trac_ik的源码
将【aprotyas /trac_ik】的源码压缩包下载下来,放到一个文件夹中。我这里放在trac_ik文件夹中。
然后将解压后的东西放在src文件夹中。
2.安装 NLopt library
安装过程参考:【 stevengj / nlopt 】
3.编译源码
colcon build
在编译时,出现这个问题:
‘const IKCallbackFn’ {aka ‘const class std::function<void(const geometry_msgs::msg::Pose_<std::allocator >&, const std::vector<double, std::allocator >&, moveit_msgs::msg::MoveItErrorCodes_<std::allocator >&)>’} has no member named ‘empty’; did you mean ‘_M_empty’?
原因据说是std::function的empty()函数是在c++14才引入的,而我目前使用的貌似是c++11的std库。
为了简单操作,直接修改一下他的源码算了:
- if (!solution_callback.empty())
+ if (!solution_callback)
4.使用
到我们自己的moveit项目中,source一下trac_ik的setup.bash
然后按照这里,在我们之前用moveit_setup_assistant创建的配置文件中,将原来的 kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin 更改为 kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
最后对我们自己的moveit项目colcon build一下,然后就可以使用trac_ik来规划路径了。