https://github.com/alexarbogast/coordination_controllers
Coordinated motion control and redundancy resolution for multi-robot systems in ROS
https://github.com/alexarbogast/coordination_controllers
cartesian-controller coordinated-manipulation robotics robotics-control ros ros-control ros2 ros2-control
Last synced: 2 months ago
JSON representation
Coordinated motion control and redundancy resolution for multi-robot systems in ROS
- Host: GitHub
- URL: https://github.com/alexarbogast/coordination_controllers
- Owner: alexarbogast
- License: apache-2.0
- Created: 2024-04-25T18:12:27.000Z (about 2 years ago)
- Default Branch: ros2
- Last Pushed: 2026-03-23T03:26:14.000Z (3 months ago)
- Last Synced: 2026-03-23T07:51:27.182Z (3 months ago)
- Topics: cartesian-controller, coordinated-manipulation, robotics, robotics-control, ros, ros-control, ros2, ros2-control
- Language: C++
- Homepage:
- Size: 215 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Coordination Controllers
[](https://opensource.org/licenses/Apache-2.0)
[](https://github.com/alexarbogast/coordination_controllers/actions/workflows/build-and-test.yml)
[](https://docs.ros.org/en/humble/index.html)
[](https://docs.ros.org/en/jazzy/index.html)
**A ROS package providing coordinated motion controllers for the
[ros_control](https://github.com/ros-controls/ros2_control) framework.** In
general, these controllers support coordinating the task-space motion of a
manipulator with external axes or positioner units.
This package implements a decentralized architecture for coordinated motion
control. The feedback communication between a manipulator and its coordinated
unit is done via ROS messaging. This allows each mechanical unit (i.e.
manipulators and positioners) to be controlled from separate hardware devices.
## Installation
This package depends on
[`taskspace_control`](https://github.com/alexarbogast/taskspace_control).
Create a ROS 2 workspace and populate a src directory with this package and its
dependencies.
```bash
sudo apt update
rosdep update
cd src
vcs import < coordination_controllers/coordination_controllers.repos
rosdep install -r --from-paths . --ignore-src --rosdistro $ROS_DISTRO -y
```
Build the packages:
```bash
cd
colcon build
```
## Coordinated Controller Configuration
An example configuration can be found in the `coordinated_motion_examples`
[configuration](./coordinated_motion_examples/config). Or refer to the `yaml`
files that lay out each controllers parameters for the [parameter
generator](https://github.com/PickNikRobotics/generate_parameter_library). The
`rr_objective_type` and `pos_objective_type` parameters decide the type of
objectives used for redundancy resolution and positioner control. The available
controller types can be found in the [plugin
description](./coordinated_motion_controllers/coordinated_controller_plugins.xml).
#### Positioner State Interfaces
This package provides two interchangeable implementations for accessing the positioner joint state:
- **TopicStateInterface**
(`state_interface` = topic)
Reads positioner joint position and velocity from ROS topics. This mode is
suitable when the positioner is controlled by a separate process or
controller manager, or when loose synchronization is acceptable.
- **LoanedStateInterface**
(`state_interface` = loaned)
Reads positioner joint position and velocity directly from ros2_control
loaned state interfaces. This provides deterministic, zero-copy access
within the controller update loop and enables tight synchronization when the
positioner is managed by the same controller manager.
## Running the Demos
Launch the demo multi-robot system with the desired robot.
```bash
ros2 launch coordinated_motion_examples two_robot_bringup.launch.py robot_type:=robot6R controller:=coordinated_as_controller
```
```
# 'robot_type' (default "robot6R"): One of 'robot6R', 'robot7R
# 'controller' (default "coordinated_as_controller"): One of 'coordinated_pose_controller', 'coordinated_as_controller'
```
In another terminal, launch the control demo with a matching robot_type and controller.
```bash
ros2 launch coordinated_motion_examples coordinated_motion_demo.launch.py robot_type:=robot6R controller:=coordinated_as_controller
```
Modify the positioner and redundancy resolution objectives in the respective
`coordinated_motion_examples/config/_controllers.yaml`.
- [robot6R config](./coordinated_motion_examples/config/robot6R_controllers.yaml)
- [robot7R config](./coordinated_motion_examples/config/robot7R_controllers.yaml)