A ROS package providing coordinated motion controllers for the ros_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.
This package depends on
taskspace_control.
Create a ROS 2 workspace and populate a src directory with this package and its
dependencies.
sudo apt update
rosdep update
cd src
vcs import < coordination_controllers/coordination_controllers.repos
rosdep install -r --from-paths . --ignore-src --rosdistro $ROS_DISTRO -yBuild the packages:
cd <colcon_workspace>
colcon buildAn example configuration can be found in the coordinated_motion_examples
configuration. Or refer to the yaml
files that lay out each controllers parameters for the parameter
generator. 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.
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.
Launch the demo multi-robot system with the desired robot.
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.
ros2 launch coordinated_motion_examples coordinated_motion_demo.launch.py robot_type:=robot6R controller:=coordinated_as_controllerModify the positioner and redundancy resolution objectives in the respective
coordinated_motion_examples/config/<robot_type>_controllers.yaml.