ROS2 Control
To get started, follow this guide to install ROS2 first to setup and test the OpenArm description package which you will need for ROS2 control.
The openarm_description
package provides the complete robot model and visual representation of the OpenArm system.
Setup
The openarm_ros2 repository contains a collection of packages for use with ros2_control.
It abstracts away the hardware control to expose the arm as a interface that receives position, velocity, and torque commands and outputs joint states.
To get started, clone the openarm_ros2 repository, build the packages, and source the workspace.
git clone https://github.com/enactic/openarm_ros2 ~/ros2_ws/src/openarm_ros2
cd ~/ros2_ws && colcon build
source ~/ros2_ws/install/setup.bash
Before operating with real hardware, you MUST:
- COMPLETE SETUP GUIDE: All configuration steps are mandatory
- ZERO POSITION: Ensure you have set safe zero positions for all motors
- EMERGENCY STOP: Keep emergency stop button within immediate reach at ALL times
- CLEAR WORKSPACE: Remove ALL obstacles, tools, and personnel from arm movement area
- POWER DISCONNECT: Know how to quickly disconnect power if needed
Improper operation can cause serious injury or equipment damage. Always prioritize safety.
🚧 ROS2 Control Integration
The openarm_bringup package provides launch files that integrates with the ROS2 control framework through the openarm_bringup
package. This package provides launch files and configuration to start the hardware interface, load controllers, and connect the physical arm to the ROS2 ecosystem. Once launched, you can use standard ROS2 control tools and interfaces to command the arm and receive feedback.
The bringup package supports both mock hardware (for simulation/testing) and real hardware through a hardware plugin. When using real hardware, you'll need to first build the openarmcan library by following the CAN setup guide.
The hardware bridging components are currently being updated and may be unstable. The gripper bridging logic is particularly under active development.
Launch the OpenArm with v1.0 configuration and fake hardware:
ros2 launch openarm_bringup openarm.launch.py arm_type:=v10 use_fake_hardware:=true
launch files
openarm.launch.py
- Single arm configurationopenarm.bimanual.launch.py
- Dual arm configuration
Key Parameters
arm_type
- Arm type (default: v10)use_fake_hardware
- Use fake hardware instead of real hardware (default: false)can_interface
- CAN interface to use (default: can0)robot_controller
- Controller type: joint_trajectory_controller or forward_position_controller
When you run the bringup launch files, robot state publisher, controller manager, etc. will be launched.
After the controllers are successfully launched, you can verify they're working by checking the available actions:
ros2 action list
To test joint movement, send a simple trajectory command:
ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory '{trajectory: {joint_names: ["openarm_joint1", "openarm_joint2", "openarm_joint3", "openarm_joint4", "openarm_joint5", "openarm_joint6", "openarm_joint7"], points: [{positions: [0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15], time_from_start: {sec: 3, nanosec: 0}}]}}'
This command moves all arm joints to a 0.15 radian position over 3 seconds.
🚧 MoveIt2 Integration
MoveIt2 is a powerful framework for robotic manipulators that combines inverse kinematics, perception, path planning, and control capabilities.
The OpenArm MoveIt2 integration is currently under active development. For the latest MoveIt2 integration, including motion planning and bimanual coordination features, please use the moveit2
branch of the openarm_ros2 repository.
Getting Started with MoveIt2
To use the MoveIt2 integration:
- Switch to the moveit2 branch:
cd ~/ros2_ws/src/openarm_ros2
git checkout moveit2
cd ~/ros2_ws && colcon build
source ~/ros2_ws/install/setup.bash
- Launch the MoveIt2 demo:
ros2 launch openarm_bimanual_moveit_config demo.launch.py

Motion Planning

Target positions can be set in the Joints
tab in the MotionPlanning panel on the left. Alternatively, the targets on the arms can be dragged and rotated to a target pose, or the goal state can be selected from a list of preset keypoints under Planning
> Goal State
The Planning
tab provides a GUI to generate trajectories to reach a goal position. Clicking on Plan
to preview the path is recommended.
The MoveIt2 integration is actively being developed. Check the moveit2 branch for the latest updates and features.