AndrejOrsula/pymoveit2

Python interface for MoveIt 2

是什么

pymoveit2 是一个轻量级的 Python 封装,允许您直接从 Python 代码控制运行 MoveIt 2(ROS 2 的流行运动规划框架)的机器人。它通过 ROS 2 的动作和服务与 MoveIt 2 通信,为常见任务提供简洁的高级 API,例如:

  • 正运动学 / 逆运动学
  • 关节空间或笛卡尔空间运动的规划与执行
  • 实时伺服控制
  • 夹爪操作
  • 操控规划场景(添加/移除碰撞物体、切换碰撞检测)

该库本质上是一个便利层:您仍然需要一个 ROS 2 安装以及您机器人的 MoveIt 2 配置,但一旦这些就绪,您就可以编写简短的 Python 脚本,而无需处理底层 ROS 消息。


如何获取

方法 命令 说明
二进制 ROS 包(为标准 ROS 2 发行版预构建) sudo apt install ros-$ROS_DISTRO-pymoveit2 支持 Humble、Jazzy、Lyrical、Rolling。
PyPI(纯 Python wheel) pip install pymoveit2 如果您更喜欢使用 pip 而非 apt,此方法很有用。
Docker(可直接运行的镜像) docker pull andrejorsula/pymoveit2 然后按 README 中所示运行辅助脚本。
从源码构建 将仓库克隆到 ROS 2 工作空间并使用 colcon 构建。

快速入门示例(Franka Emika Panda)

  1. 安装 Panda 机器人的 MoveIt 2 配置:
    sudo apt install ros-$ROS_DISTRO-moveit-resources-panda-moveit-config ros-$ROS_DISTRO-controller-manager
    
  2. 启动机器人的 MoveIt 2 演示:
    ros2 launch moveit_resources_panda_moveit_config demo.launch.py
    
  3. 运行一个 pymoveit2 演示脚本,例如移动到预定义的关节配置:
    ros2 run pymoveit2 ex_joint_goal.py
    

如果没有任何动作,该仓库提供了一个诊断脚本:

ros2 run pymoveit2 ex_doctor.py

核心 Python API

connect() / RobotSession

from pymoveit2 import connect

with connect() as robot:
    robot.move_to_pose([0.4, 0.0, 0.4], [1.0, 0.0, 0.0, 0.0])
    robot.gripper.close()
    robot.move_to_configuration()

RobotSession 包含:

  • 一个 ROS 2 节点(robot.node)
  • 一个执行器(robot.executor)
  • 机器人描述(robot.description)
  • 用于规划的 MoveIt2 接口(robot.arm)
  • 可选的夹爪和伺服接口(robot.gripper、robot.servo)。

低级构造

如果您需要更多控制,可以自行实例化各个组件:

from pymoveit2 import RobotDescription, MoveIt2, GripperInterface, MoveIt2Servo

node = ...  # 您自己的 rclpy.Node

desc = RobotDescription.from_node(node)
moveit = MoveIt2(node=node, **desc.moveit2_kwargs())
gripper = GripperInterface(node=node, **desc.moveit2_gripper_kwargs()) if desc.gripper_group_name else None
servo = MoveIt2Servo(node=node, frame_id=str(desc.moveit2_kwargs()["base_link_name"]))

示例中可以做什么

类别 示例脚本 展示内容
运动学 ex_fk.py, ex_ik.py 正运动学和逆运动学调用
运动规划 ex_joint_goal.py, ex_pose_goal.py 移动到关节目标或笛卡尔位姿(可选使用笛卡尔插值)
约束 ex_orientation_path_constraint.py 运动过程中保持末端执行器方向固定
实时控制 ex_servo.py 使用 MoveIt 2 Servo 实现低延迟远程操作
夹爪 ex_gripper.py 通过 ROS 动作打开/关闭/切换机器人夹爪
规划场景 ex_collision_primitive.py, ex_collision_mesh.py, ex_allow_collisions.py, ex_clear_planning_scene.py 添加/移除基本形状或网格,启用/禁用碰撞,清除场景
会话工作流 ex_session.py 使用 RobotSession 上下文管理器的紧凑端到端演示

哪些人可能觉得有用?

  • 机器人研究人员:希望在不编写 ROS 2 框架代码的情况下,用 Python 快速原型化算法。
  • 教育者 / 学生:教授运动规划时,API 易于理解,演示脚本可直接运行。
  • 高级 AI/ML 流水线开发者(例如:从示范学习、强化学习):需要一种简单方式向真实或模拟机器人发送运动指令。

限制 / 需要注意的事项

  • 它 不提供 任何学习或感知能力;它纯粹是 MoveIt 2 的控制接口。
  • 您仍然需要为您的机器人配置好功能性的 ROS 2 + MoveIt 2 环境(URDF、SRDF、控制器配置等)。
  • 实时性能取决于底层 MoveIt 2 Servo 节点和您的硬件;Python 层添加的开销极小,但不是硬实时解决方案。

总结

pymoveit2 桥接了 Python 与强大的 MoveIt 2 运动规划堆栈之间的差距,让您能够编写简洁、易读的脚本,来移动机器人、查询运动学并操作规划场景。它是任何希望将基于 Python 的 AI 或高层逻辑与基于 ROS 的机器人系统集成的人的坚实构建模块。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目