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)
- 安装 Panda 机器人的 MoveIt 2 配置:
sudo apt install ros-$ROS_DISTRO-moveit-resources-panda-moveit-config ros-$ROS_DISTRO-controller-manager - 启动机器人的 MoveIt 2 演示:
ros2 launch moveit_resources_panda_moveit_config demo.launch.py - 运行一个 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 的机器人系统集成的人的坚实构建模块。
相关
- 项目
- 项目
- 项目
- 项目
- 项目