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!
These are the primary dependencies required to use this project.
- ROS 2 Galactic, Humble or Rolling (tested June 2022)
- MoveIt 2 corresponding to the selected ROS 2 distribution
All additional dependencies are installed via rosdep during the building process below.
Clone this repository, install dependencies and build with colcon.
# 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"
Before utilising this package, remember to source the ROS 2 workspace.
source install/local_setup.bash
This enables importing of pymoveit2
module from external workspaces.
To demonstrate pymoveit2
usage, examples directory contains scripts that demonstrate the basic functionality. Additional examples can be found under 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 repository can be used.
# 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.
# 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]"
The following directory structure is utilised for this package.
.
├── 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