English | 简体中文
A comprehensive URDF description package for the OpenArmX robot platform, providing detailed kinematic, dynamic, and visual models for ROS 2 simulation and control.
The openarmx_description package contains URDF (Unified Robot Description Format) files that define the complete mechanical structure, kinematics, dynamics, and visual representation of OpenArmX robots. This package serves as the foundation for robot visualization, motion planning, simulation, and hardware control in ROS 2 environments.
- Complete Robot Models: Full URDF descriptions for OpenArmX robots with accurate kinematic and dynamic parameters
- Modular Architecture: Separate descriptions for arm, body, and end-effector components enabling flexible robot configurations
- Collision Geometry: Detailed collision meshes for safe motion planning and obstacle avoidance
- Visual Models: High-quality STL/DAE meshes for realistic 3D visualization
- ROS 2 Control Integration: Pre-configured ros2_control hardware interfaces for both simulation and real hardware
- Dual-Arm Support: Native support for bimanual robot configurations
- Multiple Robot Variants: Support for different arm types (v10) and end-effectors (OpenArmX Hand)
- Parametric Configuration: YAML-based configuration files for kinematics, dynamics, and joint limits
openarmx_description/
├── CMakeLists.txt # CMake build configuration
├── package.xml # ROS 2 package manifest
├── LICENSE # Apache 2.0 license
├── config/ # Robot parameter configurations
│ ├── arm/ # Arm-specific parameters
│ │ └── v10/ # v10 arm configuration files
│ │ ├── inertials.yaml # Link mass and inertia properties
│ │ ├── joint_limits.yaml # Joint position/velocity/effort limits
│ │ ├── kinematics.yaml # DH parameters and transforms
│ │ ├── kinematics_link.yaml # Link frame definitions
│ │ └── kinematics_offset.yaml # Joint offset calibration
│ ├── body/ # Body/torso parameters
│ │ └── v10/ # v10 body configuration
│ └── hand/ # End-effector parameters
│ └── openarmx_hand/ # OpenArmX Hand gripper configuration
├── launch/ # Launch files for visualization
│ └── display_openarmx.launch.py # Launch robot visualization in RViz
├── meshes/ # 3D mesh files (STL/DAE)
│ ├── arm/ # Arm link meshes
│ │ └── v10/
│ │ ├── collision/ # Simplified collision geometry
│ │ └── visual/ # Detailed visual meshes
│ ├── body/ # Body/torso meshes
│ │ └── v10/
│ │ ├── collision/
│ │ └── visual/
│ └── ee/ # End-effector meshes
│ └── openarmx_hand/
│ ├── collision/
│ └── visual/
├── rviz/ # RViz configuration files
│ ├── arm_only.rviz # Single arm visualization config
│ └── bimanual.rviz # Dual-arm visualization config
└── urdf/ # URDF/Xacro description files
├── arm/ # Arm URDF components
│ ├── openarmx_arm.xacro # Main arm description
│ └── openarmx_macro.xacro # Arm xacro macros
├── body/ # Body/torso URDF components
│ ├── openarmx_body.xacro # Main body description
│ └── openarmx_body_macro.xacro # Body xacro macros
├── ee/ # End-effector URDF components
│ ├── openarmx_hand.xacro # OpenArmX Hand description
│ ├── openarmx_hand_macro.xacro # Hand xacro macros
│ ├── openarmx_hand_arguments.xacro # Hand parameters
│ └── ee_with_one_link.xacro # Generic EE attachment
├── robot/ # Complete robot assemblies
│ ├── openarmx_robot.xacro # Generic robot macro
│ ├── v10.urdf.xacro # v10 robot variant
│ └── openarmx_bimanual_sim.urdf # Pre-generated bimanual URDF
└── ros2_control/ # ROS 2 Control configurations
├── openarmx.ros2_control.xacro # Single arm control config
└── openarmx.bimanual.ros2_control.xacro # Dual-arm control config
- ROS 2 (Humble or later)
- Python 3.8+
xacropackagejoint_state_publisher_guipackagerviz2package
# Navigate to your ROS 2 workspace
cd ~/openarmx_ws/src
# Clone the repository
git clone https://github.com/openarmx-arm/openarmx_description.git
# Build the package
colcon build --packages-select openarmx_description
# Source the workspace
source install/setup.bashLaunch the robot visualization with default configuration:
ros2 launch openarmx_description display_openarmx.launch.py arm_type:=v10 bimanual:=true-
arm_type(required): Type of arm to visualizev10: 7-DOF OpenArmX v10 arm
-
ee_type(default:openarmx_hand): End-effector typeopenarmx_hand: OpenArmX Hand grippernone: No end-effector
-
bimanual(default:false): Enable dual-arm configurationtrue: Load bimanual robot with two armsfalse: Load single arm only
To convert xacro files to URDF for inspection:
xacro $(ros2 pkg prefix openarmx_description)/share/openarmx_description/urdf/robot/v10.urdf.xacro \
arm_type:=v10 ee_type:=openarmx_hand bimanual:=true > robot_bimanual.urdf| Type | DOF | Description |
|---|---|---|
| v10 | 7 | OpenArmX v10 - 7-DOF collaborative arm with 5kg payload |
| Type | Description |
|---|---|
| openarmx_hand | Parallel jaw gripper with position control |
| none | No end-effector (flange only) |
- Single Arm: One manipulator with optional end-effector
- Bimanual: Dual-arm system with synchronized control
The package uses YAML configuration files to define robot parameters:
inertials.yaml: Mass, center of mass, and inertia tensor for each linkjoint_limits.yaml: Position, velocity, and effort limits for each jointkinematics.yaml: Forward kinematics parameters (DH convention)kinematics_link.yaml: Link-to-link transformation definitionskinematics_offset.yaml: Joint zero-position calibration offsets
The package includes pre-configured ros2_control hardware interfaces:
- Position controllers: Joint trajectory control
- Velocity controllers: Direct velocity commands
- Effort controllers: Torque-based control
- Gripper controllers: End-effector control
Use use_fake_hardware:=true for simulation or use_fake_hardware:=false for real hardware control.
- Create configuration directory:
config/arm/your_variant/ - Add required YAML files:
inertials.yaml,joint_limits.yaml, etc. - Create meshes:
meshes/arm/your_variant/{collision,visual}/ - Create xacro file:
urdf/robot/your_variant.urdf.xacro - Update launch files to support the new variant
Robot parameters can be tuned by editing YAML files in the config/ directory. After modifications, rebuild the workspace:
colcon build --packages-select openarmx_description- Ensure the package is properly sourced:
source install/setup.bash - Check that
arm_typeargument matches available configurations - Verify URDF generation:
ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(xacro path/to/file.xacro)"
- Verify mesh paths in xacro files use
package://URI scheme - Ensure meshes are installed: check
install/openarmx_description/share/openarmx_description/meshes/
- Check and adjust limits in
config/arm/*/joint_limits.yaml - Ensure controllers respect joint limits in their configuration
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch
- Make your changes with clear commit messages
- Test thoroughly with different configurations
- Submit a pull request
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (CC BY-NC-SA 4.0).
Copyright (c) 2026 Chengdu Changshu Robot Co., Ltd. (成都长数机器人有限公司)
For more details, see the LICENSE file or visit: http://creativecommons.org/licenses/by-nc-sa/4.0/
- Zhang Li (张力)
- Company: Chengdu Changshu Robot Co., Ltd. (成都长数机器人有限公司)
- Website: https://openarmx.com/
Current Version: 6.0.0
This package is part of the OpenArmX robotic platform ecosystem, developed for research and industrial applications in collaborative robotics.
| Contact | Information |
|---|---|
| openarmrobot@gmail.com | |
| 📱 Phone / WeChat | +86-17746530375 |
| 🌐 Website | https://openarmx.com/ |
| 📍 Address | Huacheng Machinery Plant, No.11 Xinye 8th Street, West Area, Tianjin Economic-Technological Development Area |
| 👤 Contact Person | Mr. Wang |