move_group_interface_improved.h
move_group_interface 的改进包含对声明 Move Group Interface 及其变量的头文件进行的小幅更改。正如可以看到的那样,本仓库中机器人/夹具触发器(Robot/Gripper triggers)的执行方式是通过调用服务/动作(service/action)来触发,这些调用会使用 Move Group C++ 接口来执行不同的 MoveIt!2 命令。
该实现的主要目标是通过 Move Group Interface (Plan + Move routine)调用不同的机器人/夹具触发器时,提高响应时间(减少延迟)。
贡献
下图说明了在 C++ 文件中包含 ROS2 服务或动作服务器时,调用 “Move Group Interface - Plan + Move” 方法来执行机器人/夹具触发器的过程,在进行改进前后的对比。

这个流程图展示了在使用
move_group_interface.h和改进后的move_group_interface_improved.h文件时,调用 MoveIt!2 执行机器人运动指令的两种不同流程。
左侧:move_group_interface.h 的流程
- 声明 ROS2 服务节点:启动 ROS2 服务节点,并等待服务调用。
- ROS2 服务调用:当服务被调用时,开始执行 MoveJ 例程。
- 声明 MoveIt!2 节点:每次服务调用时都需要重新声明 MoveIt!2 节点。
- 获取机器人状态:获取当前的机器人状态。
- 规划路径:对机器人执行的路径进行规划。
- 碰撞检查与运动学路径验证:检查路径中的碰撞和运动学路径。如果有错误,返回错误信息。
- 移动:如果路径通过验证,则执行机器人移动操作,并提供反馈。
- 停止 MoveIt!2 节点:移动完成后,停止 MoveIt!2 节点。
- 服务调用结束:流程结束,服务调用完成。
问题:
- 每次服务调用时都需要重新声明 MoveIt!2 节点及其变量,这会导致明显的延迟(图中标识为 “DELAY”)。
右侧:改进后的 move_group_interface_improved.h 流程
- 声明全局变量:在程序开始时声明全局的 Move Group Interface 和 Planning Scene Interface 变量,这样可以避免每次服务调用时重复声明。
- 声明 MoveIt!2 节点:仅在程序初始化时声明 MoveIt!2 节点,并将变量赋值给接口类。
- ROS2 服务调用:当服务调用时,直接执行 MoveJ 例程。
- 获取机器人状态:获取当前的机器人状态。
- 规划路径:对机器人执行的路径进行规划。
- 碰撞检查与运动学路径验证:检查路径中的碰撞和运动学路径。如果有错误,返回错误信息。
- 移动:如果路径通过验证,则执行机器人移动操作,并提供反馈。
- 服务调用结束:流程结束,服务调用完成。
改进:
- 通过声明全局变量,避免了每次服务调用时重复初始化 MoveIt!2 节点及其变量,减少了延迟,提高了效率。
总结:
左侧的流程每次调用时都要重新初始化 MoveIt!2 节点及变量,导致服务执行时间较长。右侧改进后的流程通过使用全局变量,使得 MoveIt!2 初始化只在程序启动时进行,从而减少了每次服务调用的延迟,大幅提高了响应速度。
小幅改进
move_group_interface.h 文件的小幅改进包括在 move_group_interface_improved.h 文件的第 149 行增加一个 MoveGroupInterface 类的空构造函数。在添加该元素之前,MoveGroupInterface 类(定义控制机器人/夹具的整个 MoveIt!2 框架)无法声明为一个空的全局变量。而这是绝对必要的,因为在程序的执行过程中,MoveGroupInterface 必须在两个不同的函数中被访问:
- 在
main()函数中,声明 MoveIt!2 节点后,将诸如机器人/夹具和规划组等属性分配给MoveGroupInterface类。 - 在 ROS2 服务/动作的回调函数中,使用
MoveGroupInterface元素来执行触发器(向 MoveIt!2 发送命令)。
因此,将 MoveGroupInterface 声明为全局变量避免了每次调用 ROS2 服务/动作并执行回调函数时,重新定义和分配所有属性(MoveIt!2 处理这些属性需要一些时间)。据估计,每次执行触发器时大约节省了 1 到 1.5 秒的时间,这要归功于这一改进。
安装
原始的 move_group_interface.h 头文件位于 Ubuntu 22.04 系统中 ~/opt/ros/humble/include/moveit/move_group_interface 文件夹下(如果已安装 MoveIt!2)。由于该文件夹具有访问限制,因此需要按照以下步骤将 move_group_interface_improved.h 文件粘贴到该路径中:
- 安装 Nautilus Admin:
sudo apt-get install nautilus-admin - 安装完成后,需要重启 Nautilus:
nautilus -q - 打开 ~/opt/ros/humble/include/moveit/move_group_interface 文件夹 -> 右键 -> 以管理员身份打开。
- 粘贴
move_group_interface_improved.h文件。
9万+

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



