Skip to content

About

A ROS 2 framework for robotic manipulation and embodied intelligence.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

MoveIt 2 Task Server

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

Docker

镜像使用多阶段构建:前一阶段编译 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 运行

终端一:从已安装的 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.yaml

Panda 的位姿都应使用其 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 与机器人专用示例包

v0.1 的限制

输入 pose 假设已经被变换到 MoveIt planning frame。初版尚未实现感知、grasp pose generation、力反馈、动态重规划,也没有处理物体已附着后发生的失败恢复。这些会作为明确的后续迭代,而不是隐藏在不可预测的行为中。

About

A ROS 2 framework for robotic manipulation and embodied intelligence.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages