This PR is made for new release and do not work with current v0.3 robot
descriptions.
Use for the ros2 control for quick arm control.
Launch files spawn:
- Robot state publisher
- Controller manager with ros2_control
- Joint state broadcaster
- Robot controller (joint trajectory or forward position)
- Gripper controller
- RViz2 visualization
---------
Co-authored-by: Thomason Zhou <t95zhou@uwaterloo.ca>
- We are keeping the bimanual and single arm descriptions in one
standalone package
[openarm_description](https://github.com/enactic/openarm_description)
- Similarly, bringup scripts for both single arm and bimanual setups
will be unified.
- mujoco related hardware code will be maintained in
[openarm_mujoco](https://github.com/enactic/openarm_mujoco).
Added script to cmake install path
Added merge script that communicates with kirigirisu
Added another launch exe for kirigirisu visualization
Adjusted log content in test/hardware
# Summary
The previous URDF directory structure used has a chained call from
**openarm.urdf.xacro** -> **openarm.xacro** ->
**openarm.ros2_control.xacro**.
**openarm.xacro** takes both robot hardware description and
control/communication configuration arguments but the file content is
only about robot description.
# Changes Made
- Renamed **openarm.xacro** to **openarm.robot.xacro**. This file now
contains only the robot's hardware description, including links, joints,
visuals, and inertial properties.
- **openarm.control.xacro** handles all ROS 2 control configurations,
including hardware interfaces, joint interfaces, and CAN device setup.
- Updated openarm.urdf.xacro (entry point)Calls both
**openarm.robot.xacro** and **openarm.control.xacro**.
This change should separates responsibilities and arguments for each
subsystem.
Have tested with bringup scripts for both single-arm and bimanual
configurations.
We’ve added the autopep8 hook to our `.pre-commit-config.yaml` to
enforce a consistent Python style.
To verify its behavior without touching every file at once, we’re
applying it in-place to depth_camera.launch.py for now because the large
number of impacted files there are.
The follow-up PR will run autopep8 accross the entire codebase once this
initial change passes CI.
ref: https://github.com/hhatto/autopep8
## Issue
- **openarm_bringup/openarm.launch.py** was launching rviz2 with an
incorrect configuration file.
- The same launch script is intended to execute xacro with a
configurable prefix and support mock hardware. However, these features
were not functioning as the required arguments and plugin initialization
were missing from the xacro files.
## Fix
- Updated the rviz configuration path to the correct file.
- Added the necessary arguments and plugin setup to the relevant xacro
files to enable prefix configuration and mock hardware support.
## Problem
When building openarm_ros2, the hardware interface tests fail because
the components_urdfs.hpp header from ros2_control_test_assets cannot be
found as
follows.
```console
$ colcon build
...
/home/otegami/work/cpp/ros2_ws/src/openarm_ros2/openarm_hardware/test/test_openarm_hardware.cpp:21:10: fatal error: ros2_control_test_assets/components_urdfs.hpp: No such file or directory
21 | #include "ros2_control_test_assets/components_urdfs.hpp"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/test_openarm_hardware.dir/build.make:79: CMakeFiles/test_openarm_hardware.dir/test/test_openarm_hardware.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:237: CMakeFiles/test_openarm_hardware.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2
---
Failed <<< openarm_hardware [14.9s, exited with code 2]
Summary: 6 packages finished [15.1s]
1 package failed: openarm_hardware
5 packages had stderr output: openarm_bimanual_bringup openarm_bimanual_description openarm_bringup openarm_description openarm_hardware
1 package not processed
```
## Cause
Although ros2_control_test_assets was installed, it wasn’t declared as a
dependency of the GMock test
target.
## Solution
Add ros2_control_test_assets as a test dependency in both the
CMakeLists.txt and in the package.xml,
ensuring the test can locate its headers.
## Problem
When we launch openarm_bringup, the following error are raised.
```console
$ ros2 launch openarm_bringup openarm.launch.py
[INFO] [launch]: All log files can be found below /home/otegami/.ros/log/2025-05-23-15-07-52-834283-otegami-2239551
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [ros2_control_node-1]: process started with pid [2239568]
[INFO] [robot_state_publisher-2]: process started with pid [2239569]
[INFO] [rviz2-3]: process started with pid [2239570]
[robot_state_publisher-2] [INFO] [1747984073.330768599] [robot_state_publisher]: Robot initialized
[ros2_control_node-1] [INFO] [1747984073.346291338] [controller_manager]: Using Steady (Monotonic) clock for triggering controller manager cycles.
[ros2_control_node-1] [ERROR] [1747984073.346957366] [pluginlib.ClassLoader]: Could not find a root element for package manifest at /home/otegami/work/cpp/ros2_ws/install/openarm_hardware/share/openarm_hardware/package.xml.
[ros2_control_node-1] [ERROR] [1747984073.347001329] [pluginlib.ClassLoader]: Could not find package manifest (neither package.xml or deprecated manifest.xml) at same directory level as the plugin XML file /home/otegami/work/cpp/ros2_ws/install/openarm_hardware/share/openarm_hardware/openarm_hardware.xml. Plugins will likely not be exported properly.
[ros2_control_node-1] )
[ros2_control_node-1] [ERROR] [1747984073.347237704] [pluginlib.ClassLoader]: Could not find a root element for package manifest at /home/otegami/work/cpp/ros2_ws/install/openarm_hardware/share/openarm_hardware/package.xml.
[ros2_control_node-1] [ERROR] [1747984073.347246277] [pluginlib.ClassLoader]: Could not find package manifest (neither package.xml or deprecated manifest.xml) at same directory level as the plugin XML file /home/otegami/work/cpp/ros2_ws/install/openarm_hardware/share/openarm_hardware/openarm_hardware.xml. Plugins will likely not be exported properly.
[ros2_control_node-1] )
[ros2_control_node-1] [ERROR] [1747984073.347465709] [pluginlib.ClassLoader]: Could not find a root element for package manifest at /home/otegami/work/cpp/ros2_ws/install/openarm_hardware/share/openarm_hardware/package.xml.
[ros2_control_node-1] [ERROR] [1747984073.347471103] [pluginlib.ClassLoader]: Could not find package manifest (neither package.xml or deprecated manifest.xml) at same directory level as the plugin XML file /home/otegami/work/cpp/ros2_ws/install/openarm_hardware/share/openarm_hardware/openarm_hardware.xml. Plugins will likely not be exported properly.
```
## Cause
when the license comments appeared before the
xml-model instruction, it happedned.
## Solution
This PR changes places the xml-model declaration
immediately after the XML prolog and ahead of the
license block to resolve the issue.
We are standardizing our software under Apache License 2.0. This PR
replaces existing BSD 3-Clause License with Apache 2.0 in this
repository.
## About Copyright
All commits in this repository are made by Reazon Holdings, Inc.
members, so the copyright has been added as follows.
- `Copyright 2025 Reazon Holdings, Inc.`
```console
$ git shortlog -sn
55 Thomason Zhou
14 thomason
5 takuya kodama
1 Fujimoto Seiji
1 edwin-giang
1 toki
```
## How it was done
We added the new license header directory by directory, with each commit
covering a single directory to make review easier.
To ensure there are no missing files, we ran the following commands.
```
$ grep -RIL --exclude-dir='.git' --exclude='*.stl' "Apache License, Version 2.0" .
./openarm_bringup/README.md
./openarm_bimanual_moveit_config/README.md
./openarm_bimanual_description/urdf/openarm_bimanual.urdf
./.gitignore
./README.md
./openarm_description/urdf/openarm.urdf
./openarm_description/resource/openarm_description
```
The following files are auto-generated.
- openarm_bimanual_description/urdf/openarm_bimanual.urdf
- openarm_description/urdf/openarm.urdf
We introduce pre-commit hook with clang-format to
enforce a unified code style across the project,
reducing style discussions and speeding up cod
reviews.
ref: https://pre-commit.com/
## Summary
This PR updates the C++ hardware interface to support **CANFD** and confirms successful operation with **MoveIt** on the actual robot hardware.
---
## Changes Made
- Migrated from classic CAN to **CANFD** in the motor control interface.
- Updated the following modules:
- `openarm_hardware/include/openarm_hardware/canbus.hpp`
- `openarm_hardware/src/canbus.cpp`
- `openarm_hardware/src/motor_control.cpp`
- `openarm_hardware/include/openarm_hardware/motor_control.hpp`
- `openarm_hardware/src/openarm_hardware.cpp`
- Improved CAN socket handling and data frame structure.
- Refactored internal motor communication logic for robustness.
---
## Verification
- Confirmed joint control and motion execution with real hardware using **MoveIt**.
- Controllers were properly loaded and executed planned trajectories without error.
- CANFD communication is now functional and stable during runtime.
* Rename openarm_bimanual_teleop to openarm_bimanual_bringup
* Update package descriptions
* Add quickstart link
* Add note to source overlay
* Add test installation step
* Add poses and update default rviz config
* Fix rev1 to match hardware
* Align rev3 with hardware joint limits
* Match hardware joint limits
* Complete with more poses
* Update README.md with moveit2 video
* Add new READMEs in openarm_bringup and openarm_bimanual_moveit_config
* Add octomap note
* Create mujoco_ros2_control package
* Enable Mujoco hardware interface for OpenArm
* Verify connection with ros2_control
* Update actuators to pos/vel
* Add motor after creation
* Tune KD for smoother motion
* Restore realsense camera
* Change camera to be 10 tilt from vertical to match physical model
* Repair urdf to match physical robot
* Checkpoint moveit2_configuration
* Remove collision between camera and pedestal and remove additional ros2_control interfaces for mock
* Enable octomap perception
* Fix base_link to world transform
* Update openarm to support moveit2 bimanual planning with end effectors
* Improve safety of openarm_hardware zero position autocalibration
* Remove openarm_mujoco_ros2_control from moveit2 branch
* Restore sensor functionality