![]() |
manymove repositorymanymove_bringup manymove_cpp_trees manymove_hmi manymove_msgs manymove_object_manager manymove_planner manymove_py_trees manymove_signals |
Repository Summary
Description | To plan and execute moves with manipulators in ROS2 |
Checkout URI | https://github.com/pastoriomarco/manymove.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
Name | Version |
---|---|
manymove_bringup | 0.1.0 |
manymove_cpp_trees | 0.1.0 |
manymove_hmi | 0.0.0 |
manymove_msgs | 0.1.0 |
manymove_object_manager | 0.1.0 |
manymove_planner | 0.1.0 |
manymove_py_trees | 0.1.0 |
manymove_signals | 0.1.0 |
README
ManyMove project - ROS2 humble
DISCLAIMER
This software is released under the BSD-3-Clause license (see LICENSE
for details).
Safety notice: The package does not implement functional safety. You must integrate appropriate safety measures compliant with local regulations before deploying on real hardware.
Description
The manymove
project is meant for roboticists to ease the transition to ROS2 coming from the classic frameworks of major manufacturers.
It provides a simplified, generalized framework for building robotic manipulator control logic using ROS 2 and MoveIt 2.
This series of packages was created around Ufactory Lite6 and UF850 cobots, but it is structured in a way that can extend to other robots. Also included is an example using Franka Emika Panda, which is the default demo model for Moveit in ROS2 Humble.
Prerequisites
-
Install ROS2 Humble, Moveit2 and xarm_ros2:
- You can follow the instructions on the Humble branch of my fork of xarm_ros2 on github to install all the required packages.
Quick start
-
Define your
workspace dir
:- You can use for example ~/dev_ws as in xarm_ros2 repo, or define an appropriate workspace.
- From here on I’ll refer to the installation directory of the workspace as
<workspace_dir>
-
Clone
manymove
humble branch:- From
<workspace_dir>/src
:
- From
git clone --branch=humble https://github.com/pastoriomarco/manymove.git
- Install the dependencies
- From
<workspace_dir>
:
rosdep install --from-paths . --ignore-src --rosdistro $ROS_DISTRO -y
-
Copy the auxiliary files to run all examples with the right configuration:
- Create the
other
folder in xarm_description/meshes and copy pneumatic gripper’s mesh there. Also copy the user param file in xarm_api/config. - From
<workspace_dir>
run:
- Create the
mkdir -p ./src/xarm_ros2/xarm_description/meshes/other
cp ./src/manymove/manymove_object_manager/meshes/custom_end_tools/* ./src/xarm_ros2/xarm_description/meshes/other/
cp ./src/manymove/manymove_planner/config/xarm_user_params.yaml ./src/xarm_ros2/xarm_api/config/
-
Build the packages from
<workspace_dir>
:
colcon build
-
Don’t forget to source!
- From
<workspace_dir>
:
- From
source ./install/setup.bash
Bring you own robot
If you want to create a new application in ManyMove, once you have a working moveit config package you just need the following information:
- Base frame/link of the robot
- TCP (end effector) frame/link
- traj_controller action server name
- Robot’s name/model
- Planner type: moveitcpp or movegroup
When using an actuated gripper you also need:
- The name of the action server to control the gripper
- The list of the gripper’s links to exclude from collision checking
When using multiple robots with a single URFD, you’ll need a prefix for each robot (see the dual_* examples).
These values will be used to start up the following nodes:
- action_server_node: the core of the planners
- manymove_py_trees_node: the BT logic node
- manymove_hmi_node: the HMI interface
- manymove_signals: on a real robot, handles the service calls to get/set signals (currently taylored for Ufactory robots)
A little side note on Panda examples: the reference TCP frame there is not actually centered between gripper’s fingers, as ‘panda_link8’ represents the center of the flange. But since it’s aligned to the ideal TCP, you can just offset the poses when you need to refer to the TCP, without having to create a new link. In the Panda example, the -0.102 in the following line represents this offset:
blackboard->set("pick_pre_transform_xyz_rpy_1_key", std::vector<double>{-0.102, 0.0, 0.0, 0.0, 1.57, 0.0});
Right now the most extensive executable examples are found in manymove_cpp_trees repo: you can start from one of the executables there, taking care to use valid joint targets and poses for your robot. Also take some time setting up move.hpp coherently with the speed limits of your robot and planning pipeline of your choice. When you go through the code, you’ll notice I explain what each section does and how to use it: I tried to keep it updated while modifying the repo, but some comments may be outdated or not relevant anymore. Please let me know if something is not clear!
Project Structure
This repository is composed of several sub-packages, each handling different responsibilities in the overall robotic application:
File truncated at 100 lines see the full file