文章目录
在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)]](/https://i-blog.csdnimg.cn/blog_migrate/78203a46fa8d45d94d3ddfd6e341cfe6.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貌似都是可以的。
文章介绍了如何在ROS2环境中使用TRAC-IK,包括下载源码,安装NLoptlibrary,解决编译中的std::function兼容问题,以及如何在已有的或新建的MoveIt项目中配置TRAC-IK。注意,这种方法可能不支持setApproximateJointValueTarget的路径规划。

2344

被折叠的 条评论
为什么被折叠?



