https://github.com/andrejorsula/pymoveit2
Basic Python interface for MoveIt 2 built on top of ROS 2 actions and services
https://github.com/andrejorsula/pymoveit2
moveit2 python robotics ros2
Last synced: 30 days ago
JSON representation
Basic Python interface for MoveIt 2 built on top of ROS 2 actions and services
- Host: GitHub
- URL: https://github.com/andrejorsula/pymoveit2
- Owner: AndrejOrsula
- License: bsd-3-clause
- Created: 2021-12-13T23:07:48.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2025-08-27T12:25:00.000Z (about 1 month ago)
- Last Synced: 2025-08-27T21:35:18.510Z (about 1 month ago)
- Topics: moveit2, python, robotics, ros2
- Language: Python
- Homepage:
- Size: 810 KB
- Stars: 271
- Watchers: 6
- Forks: 92
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pymoveit2
Basic Python interface for MoveIt 2 built on top of ROS 2 actions and services.
> Note: The official Python library for MoveIt 2 `moveit_py` is now available. Check the announcement [here](https://picknik.ai/moveit/ros/python/google/2023/04/28/GSOC-MoveIt-2-Python-Bindings.html)!
![]()
![]()
![]()
![]()
Joint Goal
Pose Goal
Gripper Action
MoveIt 2 Servo
## Instructions
### Dependencies
These are the primary dependencies required to use this project.
- ROS 2 [Galactic](https://docs.ros.org/en/galactic/Installation.html), [Humble](https://docs.ros.org/en/humble/Installation.html) or [Iron](https://docs.ros.org/en/iron/Installation.html)
- [MoveIt 2](https://moveit.ros.org/install-moveit2/binary) corresponding to the selected ROS 2 distributionAll additional dependencies are installed via [rosdep](https://wiki.ros.org/rosdep) during the building process below.
### Building
Clone this repository, install dependencies and build with [colcon](https://colcon.readthedocs.io).
```bash
# Clone this repository into your favourite ROS 2 workspace
git clone https://github.com/AndrejOrsula/pymoveit2.git
# Install dependencies
rosdep install -y -r -i --rosdistro ${ROS_DISTRO} --from-paths .
# Build
colcon build --merge-install --symlink-install --cmake-args "-DCMAKE_BUILD_TYPE=Release"
```### Sourcing
Before utilising this package, remember to source the ROS 2 workspace.
```bash
source install/local_setup.bash
```This enables importing of `pymoveit2` module from external workspaces.
## Examples
To demonstrate `pymoveit2` usage, [examples](./examples) directory contains scripts that demonstrate the basic functionality. Additional examples can be found under [ign_moveit2_examples](https://github.com/AndrejOrsula/ign_moveit2_examples) repository.
Prior to running the examples, configure an environment for control of a robot with MoveIt 2. For instance, one of the following launch scripts from [panda_ign_moveit2](https://github.com/AndrejOrsula/panda_ign_moveit2) repository can be used.
```bash
# RViz (fake) ROS 2 control
ros2 launch panda_moveit_config ex_fake_control.launch.py
# Gazebo (simulated) ROS 2 control
ros2 launch panda_moveit_config ex_ign_control.launch.py
```After that, the individual scripts can be run.
```bash
# Move to joint configuration
ros2 run pymoveit2 ex_joint_goal.py --ros-args -p joint_positions:="[1.57, -1.57, 0.0, -1.57, 0.0, 1.57, 0.7854]"
# Move to Cartesian pose (motion in either joint or Cartesian space)
ros2 run pymoveit2 ex_pose_goal.py --ros-args -p position:="[0.25, 0.0, 1.0]" -p quat_xyzw:="[0.0, 0.0, 0.0, 1.0]" -p cartesian:=False
# Repeatadly toggle the gripper (or use "open"/"close" actions)
ros2 run pymoveit2 ex_gripper.py --ros-args -p action:="toggle"
# Example of using MoveIt 2 Servo to move the end-effector in a circular motion
ros2 run pymoveit2 ex_servo.py
# Example of adding a collision object with primitive geometry to the planning scene of MoveIt 2
ros2 run pymoveit2 ex_collision_primitive.py --ros-args -p shape:="sphere" -p position:="[0.5, 0.0, 0.5]" -p dimensions:="[0.04]"
# Example of adding a collision object with mesh geometry to the planning scene of MoveIt 2
ros2 run pymoveit2 ex_collision_mesh.py --ros-args -p action:="add" -p position:="[0.5, 0.0, 0.5]" -p quat_xyzw:="[0.0, 0.0, -0.707, 0.707]"
```## Directory Structure
The following directory structure is utilised for this package.
```bash
.
├── examples/ # [dir] Examples demonstrating the use of `pymoveit2`
├── pymoveit2/ # [dir] ROS 2 launch scripts
├── robots/ # [dir] Presets for robots (data that can be extracted from URDF/SRDF)
├── gripper_command.py # Interface for Gripper that is controlled by GripperCommand
├── moveit2_gripper.py # Interface for MoveIt 2 Gripper that is controlled by JointTrajectoryController
├── moveit2_servo.py # Interface for MoveIt 2 Servo that enables real-time control in Cartesian Space
└── moveit2.py # Interface for MoveIt 2 that enables planning and execution of trajectories
├── CMakeLists.txt # Colcon-enabled CMake recipe
└── package.xml # ROS 2 package metadata
```