Skip to content

API 文档

MoveIt 2 提供了一套完整的 C++ 和 Python API,使开发者能够在其应用程序中集成运动规划、碰撞检测、轨迹生成、运动学求解和感知等核心功能。无论你是构建工业机械臂应用、研究新算法,还是开发自定义机器人系统,MoveIt 2 的 API 都能提供灵活且强大的工具集。

MoveIt 2 的 API 涵盖以下关键能力:

  • 运动规划(Motion Planning):支持多种规划算法(OMPL、Pilz、CHOMP 等),通过统一的接口为机器人计算从起始状态到目标状态的无碰撞路径。
  • 碰撞检测(Collision Checking):提供高效的环境碰撞检测,支持自碰撞、环境对象碰撞以及连续碰撞检测,集成 FCL、Bullet 等碰撞检测库。
  • 轨迹生成(Trajectory Generation):将规划路径转换为时间参数化的轨迹,支持时间参数化、轨迹平滑和速度/加速度限制。
  • 运动学(Kinematics):支持正向运动学(FK)和逆向运动学(IK)求解,内置 KDL、TRAC-IK、IKFast 等求解器,并支持自定义运动学插件。
  • 感知(Perception):通过点云和深度图像数据感知周围环境,动态更新规划场景中的碰撞对象。

C++ API 是 MoveIt 2 的主要 API,提供了最完整、最高效的功能接口。它基于 ROS 2 的 rclcpp 客户端库,可直接访问 MoveIt 2 的核心数据结构和算法,适用于对性能和实时性要求较高的应用场景。

Python API 基于 ROS 2 的 rclpy 客户端库,为 Python 开发者提供了便捷的接口。虽然功能覆盖面不及 C++ API,但对于快速原型开发、研究实验和脚本化任务来说非常实用。

MoveIt 2 的 C++ API 围绕以下核心命名空间组织:

命名空间说明
moveit::core核心数据结构,包括 RobotModel、RobotState、JointModelGroup 等
planning_interface规划接口层,包含 MoveGroupInterface 等高层接口
planning_scene规划场景管理,描述机器人环境中的物体和状态
collision_detection碰撞检测相关类,包括 World、碰撞请求和结果
robot_state机器人状态表示与操作
robot_model机器人模型表示,描述关节、连杆和运动学结构

MoveGroupInterface(C++)和 MoveGroup(Python)是 MoveIt 2 的高层 API,封装了运动规划中最常用的操作。通过该接口,开发者可以:

  • 设置位姿目标或关节空间目标
  • 设置路径约束和工作空间限制
  • 执行规划与运动
  • 添加和移除碰撞对象
  • 附着/分离物体到末端执行器

大多数应用场景下,使用 MoveGroup 接口即可完成任务,无需直接操作底层组件。

运动规划管线(Motion Planning Pipeline) 是 MoveIt 2 规划系统的核心架构,将规划请求经过一系列阶段处理:

  1. 规划请求适配器(Planning Request Adapters):对规划请求进行预处理,例如添加起始状态约束、添加路径约束等。
  2. 规划器(Planner):调用具体的规划算法(如 OMPL)生成路径。
  3. 后处理适配器:对规划结果进行优化,包括时间参数化(如 TOTG、ISP)、轨迹平滑等。

通过配置不同的适配器和规划器,可以灵活地定制规划流程。

规划场景监控器(Planning Scene Monitor, PSM) 负责维护和更新规划场景的当前状态。它通过订阅以下 ROS 话题来保持场景的实时性:

  • /attached_collision_object:跟踪附着在机器人上的物体
  • /collision_object:跟踪环境中的碰撞对象
  • /planning_scene:接收完整的规划场景更新
  • 传感器数据:通过点云或深度图感知环境变化

PSM 使用 OccupancyMap 和 OccupancyMapUpdater 来维护基于传感器的 3D 占据图,确保碰撞检测能够反映真实环境。在多线程环境中,PSM 通过锁机制保证场景状态的线程安全访问。