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貌似都是可以的。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ROS Noetic版本MoveIt已经移除了`compute_ik()`和`get_ik_solution()`函数,并且使用`kinematics_service`来计算。`kinematics_service`是一个在运动规划用于求解逆运动学的ROS服务,可以使用它来计算机器人末端执行器的关节角度。 以下是使用`kinematics_service`计算逆运动学步骤: 1. 首先,你需要启动MoveIt!和运动规划器的节点。可以使用以下命令启动: ``` roslaunch <your_moveit_pkg> <your_moveit_planning_execution_file.launch> ``` 2. 接下来,你需要在运动规划器加载你的机器人模型。可以使用以下命令: ``` rosservice call /robot/kinematics_service/load_robot_model ``` 3. 一旦你的机器人模型已经被加载,你可以调用`compute_ik`服务来计算末端执行器的关节角度。可以使用以下命令: ``` rosservice call /robot/kinematics_service/get_ik "ik_request: group_name: <your_group_name> pose_stamped: header: frame_id: <your_frame_id> pose: position: x: <x> y: <y> z: <z> orientation: x: <x> y: <y> z: <z> w: <w> timeout: <your_timeout>" ``` 其,<your_group_name>是你的机器人模型的组名称,<your_frame_id>是你的参考坐标系的名称,<x>、<y>、<z>和<x>、<y>、<z>、<w>是你的目标位置和姿态。 4. 最后,`get_ik`服务将返回一个`IKResponse`消息,其包含机器人末端执行器的关节角度。 这就是使用`kinematics_service`计算逆运动学的基本步骤。你可以在MoveIt!文档找到更详细的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值