Repo symbol

manymove repository

Repo symbol

manymove repository

Repo symbol

manymove repository

Repo symbol

manymove repository

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 (-)

README

ManyMove project - ROS2 humble

ManyMove example

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:
  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:
  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>:
  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

ManyMove 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

Repo symbol

manymove repository

Repo symbol

manymove repository

Repo symbol

manymove repository

Repo symbol

manymove repository