moveit2_task_server 是一个 C++ ROS 2 Action Server。它接收一次抓取放置请求,将其拆成可观察、可复用的 MoveIt 2 运动任务,并返回每个阶段的执行状态和失败原因。
初版刻意控制范围:支持一个机械臂、一个可选夹爪,以及一个已存在于 MoveIt Planning Scene 中的碰撞物体。核心代码不绑定 Panda;config/ 中的 Panda 文件只是第一个演示 profile。
ExecutePickPlace Action Goal
│
▼
pre-grasp → Cartesian approach → close gripper → attach object
│
▼
lift → place → detach object → open gripper
pre_grasp 与 place 使用 MoveIt 的全局规划,适合绕开桌面和障碍物;靠近物体与抬升使用短距离的 Cartesian path,便于确保末端沿直线运动。Action 会持续发布当前阶段,并在结束时返回 MoveIt error code、失败阶段、规划耗时和执行耗时。
| 组件 | 职责 |
|---|---|
TaskServer |
ROS 2 Action 协议、Goal 校验、取消、feedback 与 result |
PickPlaceExecutor |
抓取放置状态序列与失败传播 |
MoveGroupInterface |
MoveIt 规划、Cartesian path、轨迹执行与 attached collision object |
| Robot configuration | 提供 URDF/SRDF、控制器、夹爪 named target 和 MoveIt Planning Scene |
调用 Action 前,客户端必须先向 Planning Scene 加入 object_id 对应的 collision object。物体抓住后,服务会调用 attachObject,使物体成为末端的一部分并正确参与后续碰撞检测。仓库提供的 panda_scene_setup 仅作为示例,会自动加入桌面和名为 cube 的方块。
任务线程、阶段顺序、取消和物体附着后的恢复语义见架构文档。 贡献流程、静态分析和社区规范见贡献指南与行为准则。
- ROS 2 Humble 或兼容的更新发行版
- MoveIt 2,且包含
moveit_ros_planning_interface - 已启动的
move_group、机器人描述和控制器 - C++17 与
colcon
第一个演示推荐使用 MoveIt Panda resources。其他机械臂也可以使用,只需通过参数提供匹配的 planning group、末端 link 与夹爪 named target。
将本仓库放进 ROS 2 workspace 的 src/ 目录:
source /opt/ros/humble/setup.bash
cd ~/ros2_ws
colcon build --packages-select moveit2_task_server
source install/setup.bash镜像使用多阶段构建:前一阶段编译 package,最终镜像只保留运行所需的 ROS 2、MoveIt 2 和
install space。.dockerignore 会排除本地 build/、install/、Git 元数据和编辑器文件,
保证 Docker 总是从干净源码构建。
docker build -t moveit2-task-server:humble .
docker run --rm -it --net=host moveit2-task-server:humble bash容器内已自动 source /opt/ros/humble/setup.bash 和 workspace 的
/ros2_ws/install/setup.bash。Panda 的 RViz 图形界面需要额外传递主机显示服务;推荐先在
容器内启动无图形的 ROS 节点,RViz 在主机侧运行。
终端一:从已安装的 Panda MoveIt 配置启动 RViz 与 move_group。
source /opt/ros/humble/setup.bash
ros2 launch moveit_resources_panda_moveit_config demo.launch.py终端二:启动任务服务,并自动加入演示桌面与方块。
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
ros2 launch moveit2_task_server panda_demo.launch.py终端三:发送仓库自带的固定演示 Goal。
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
ros2 run moveit2_task_server panda_pick_place_client --ros-args --params-file \
$(ros2 pkg prefix moveit2_task_server)/share/moveit2_task_server/config/panda_demo_client.yamlPanda 的位姿都应使用其 MoveIt 规划坐标系,一般为 panda_link0。若你的 Panda 配置使用不同的碰撞模型、夹爪 named target 或坐标原点,请先调整 config/ 内的三个 YAML 文件。
查看公开接口:
ros2 interface show moveit2_task_server/action/ExecutePickPlace| 参数 | 作用 | Panda 默认值 |
|---|---|---|
arm_group |
机械臂的 MoveIt planning group | panda_arm |
end_effector_link |
接收 pose target、附着物体的末端 link | panda_hand |
gripper_group |
用于张开和闭合夹爪的可选 planning group | hand |
gripper_open_target |
SRDF 中的张开夹爪 named target | open |
gripper_closed_target |
SRDF 中的闭合夹爪 named target | close |
cartesian_step |
Cartesian path 的最大末端步长,单位米 | 0.01 |
lift_distance |
物体附着后沿世界 Z 轴抬升的距离,单位米 | 0.10 |
- v0.1:Action、Panda 示例、可导出 C++ 核心库、单元测试和 CI 基础
- v0.2:用于新增、移动和删除障碍物的 Planning Scene Service
- v0.3 基础:取消任务时主动停止当前 MoveIt trajectory execution,安全回收执行线程
- v0.4:动态障碍物监控与重规划
- v0.5:MoveIt Servo,以及供 learned policy 使用的局部闭环接口
- v1.0:integration test、Docker、metrics 与机器人专用示例包
输入 pose 假设已经被变换到 MoveIt planning frame。初版尚未实现感知、grasp pose generation、力反馈、动态重规划,也没有处理物体已附着后发生的失败恢复。这些会作为明确的后续迭代,而不是隐藏在不可预测的行为中。