MoveIt2中使用trac_ik

在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’?

在这里插入图片描述原因据chatgpt说是std::function的empty()函数是在c++14才引入的,而我目前使用的貌似是c++11的std库。
在这里插入图片描述真正的原因作者回复了:【 Ros2 plugin #34 】
主要是之前的库是boot::function,现在改成了std::function。因此,需要改一下
在这里插入图片描述

     - if (!solution_callback.empty())
     + if (solution_callback)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xQocUOL7-1685325527159)(hbae4.png)]

4.使用

到我们自己的moveit项目中,source一下trac_ik的setup.bash
在这里插入图片描述

4.1.已经配置好的项目

然后按照这里,在我们之前用moveit_setup_assistant创建的配置文件中,将原来的:
kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
更改为:
kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
在这里插入图片描述

4.2.新使用moveIt_setup_assistant进行配置时

在这里插入图片描述
最后对我们自己的moveit项目colcon build一下,然后就可以使用trac_ik来规划路径了。

5.注意事项

目前这样子集成进来的trac_ik它好像是不支持 setApproximateJointValueTarget 时候的路径规划的。
其他的setOrientationTarget、setPositionTarget、setPoseTarget貌似都是可以的。

猜你喜欢

转载自blog.csdn.net/joyopirate/article/details/130880705