robot-descriptions-common¶
Shared grippers, dexterous hands, sensor models, and robot_common_launch. Under the robot_descriptions umbrella this repo is the common submodule.
Repository: fiveages-sim/robot-descriptions-common
Source of truth
Repo inventory / xacro include / launch file list: README.md
Launch args / profile merge /
hardware:=:robot_common_launch/README.mdGitHub Release
.deb: README.deb.mdNo
.cursor/skillsonmain. Package names are the folders in that README / repo tree.
There is no gripper:= launch argument. Attach an end-effector with type / left_type / right_type (below).
Layout¶
Folders on main (browse the repo):
common/ # umbrella checkout path
├── gripper/ # one ROS package per brand
├── dexhands/
├── sensor_models/ # single package: meshes + URDF
├── component_models/ # single package: meshes + xacro (not tabulated in the README)
└── robot_common_launch/
├── config/ # RViz, Nav2, …
├── launch/
├── worlds/
└── xacro/
README package-structure tree also lists xhand1_description under dexhands/ (not in the Dexterous Hands table).
Grippers (gripper/)¶
From the repo README:
Brand |
Package |
Models |
|---|---|---|
ChangingTek |
|
AG2F90-C, AG2F120S |
DH |
|
PGC_140_50 |
Robotiq |
|
2F-85 |
Inspire |
|
EG2-4C2 (hands RH56E2 / RH56F2 live here too) |
Jodell |
|
RG75-300 |
Hitbot |
|
Z-EFG-100 |
Eincinx |
|
EPGI180 |
Marvin |
|
marvin_gripper, marvin_gripper45 |
README: each gripper package includes URDF/xacro, meshes, ros2_control configs, and mount configs.
Dexterous hands (dexhands/)¶
Brand |
Package |
Models |
|---|---|---|
BrainCo |
|
REVO1, REVO2 |
LinkerHand |
|
O6, O7, L6, L10 |
Inspire |
|
RH56E2, RH56F2 |
OyMotion |
|
RoHand Gen2 |
FreeDom |
|
V1, V2 |
TheoHand |
|
STD16A |
Wuji |
|
Hand2, Beta2 |
Sensors (sensor_models/)¶
README lists URDF + meshes for:
Intel RealSense D405
Intel RealSense D435
Orbbec Dabai
Livox Mid-360
Use a component from xacro¶
README example (Robotiq). Copy an existing include from a real {robot}_description:
<xacro:include filename="$(find robotiq_description)/xacro/gripper.xacro"/>
<xacro:robotiq_gripper
parent="arm_link_6"
name="gripper">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:robotiq_gripper>
robot_common_launch¶
Cross-robot launch entry, xacro mappings, and machine profile YAML (robot_profile:=). Downstream visualization / controller_manager / controller packages generate robot_description and planning URDF through this API.
Mechanism
robot_profile:=/path/to/profile.yaml → load_robot_profile / normalize_robot_profile → build_xacro_mappings (or build_visualization_xacro_mappings) → xacro → robot_description / planning URDF.
Implementation: launch_arg_utils.py. Any launch that forwards robot_profile (e.g. create_robot_profile_launch_arguments()) uses the same path.
Merge priority¶
Launch CLI > robot_profile YAML > xacro defaults
YAML section |
When |
Notes |
|---|---|---|
|
Always |
Chassis / dual-arm kit / |
|
Only if |
End-effector keys; turn off to force CLI |
|
Always |
Force-torque; not gated by |
|
Always |
Virtual tip offset; expressions evaluated before mappings |
|
Only |
Real-robot xacro (serial, |
|
Always |
Deep-merged into ros2_control config |
Profile schema (README):
platform:
chassis: <key>
arms: <key> # dual-arm kit; {key}_description or a _vN suffix
variant: <key>
chassis_joints_movable: "true"|"false"
defaults:
end_effectors:
type: <eef_key> # symmetric; or write left / right
End-effectors (type / left_type / right_type)¶
Argument |
Meaning |
|---|---|
|
Symmetric end-effector key, or arm topology |
|
Per-side EEF keys. |
|
Apply |
|
Path to a machine-profile YAML |
Default:
use_profile_eef:=true→ profiledefaults.end_effectorsis applied.Set
use_profile_eef:=falseto ignore that block and force CLItype/left_type/right_type.platform,ft, andtcp_offsetfrom the profile still apply.
README example (CLI EEF, profile still used for the rest):
ros2 launch <pkg> <file>.launch.py \
robot_profile:=/path/to/machine_profile.yaml \
use_profile_eef:=false \
left_type:=rg75 right_type:=linkerhand_o7
Force-torque and TCP offset¶
Not controlled by use_profile_eef.
Argument |
Meaning |
|---|---|
|
Force-torque keys; override profile |
|
Symmetric TCP offset |
|
Per-side TCP offset |
Profile defaults.ft.type: none | kwr75_485 | kwr75_usb (or left / right). end_effectors / ft / tcp_offset all accept a symmetric key that expands to both sides; a missing side falls back to the symmetric value.
TCP strings are evaluated before xacro (${PI/2}, pi/2, radians(90), numbers). Failed evaluation errors; they are not written silently. Virtual tip also needs left_ee_frame / right_ee_frame in control.patch (or controller params), e.g. left_tcp_offset.
ros2 launch robot_common_launch humanoid.launch.py robot:=<robot_name> \
robot_profile:=/path/to/machine_profile.yaml \
ft:=kwr75_485 \
tcp_offset_rpy:="0 0 ${PI/2}"
Platform slots (chassis / arms / variant / chassis_joints_movable)¶
From the robot_common_launch README (platform slots). Resolution: CLI > profile platform.* > that robot’s xacro/robot.xacro default. Empty string means the arg is not passed to xacro.
Argument |
Role |
|---|---|
|
Chassis model (robot-specific) |
|
Swappable dual-arm kit. Does not merge |
|
Platform variant (appearance, column, …). May merge |
|
Whether chassis joints are movable ( |
create_platform_launch_arguments() declares chassis / arms / chassis_joints_movable on humanoid / component and OCS2 full_body / split_body / demo. Bare manipulator launches omit that set. variant is declared with create_robot_profile_launch_arguments().
README examples:
ros2 launch robot_common_launch humanoid.launch.py robot:=fiveages_w1 arms:=ar5_ccs
ros2 launch robot_common_launch humanoid.launch.py robot:=fiveages_w2r arms:=ar5_srs
ros2_control config merge¶
common.yaml
→ <type>.yaml / ros2_controllers.yaml
→ {variant}.yaml # opt-in: config/ros2_control/<variant>.yaml
→ {hardware}.yaml # opt-in: config/ros2_control/<hardware>.yaml
→ EEF compose (if any)
→ control.patch (profile)
How <type>.yaml is chosen (resolve_compose_type_key / _generate_progressive_type_candidates):
Symmetric EEF (
typeonly, orleft_typeequalsright_type): progressive match by stripping_suffixes. Helper docstring example:ccs_left_rg75→ccs_left→ccs. First existing{candidate}.yamlwins; otherwiseros2_controllers.yaml.Asymmetric (
left_type≠right_type): skip progressive type YAML. Base file isros2_controllers.yaml, then EEF compose fromeef_control_registry.yamlplus per-side templates (control_compose.py).
hardware:= values in that README: mock_components / gz / isaac / real. Overlay YAML is merged only if the file exists. Profile YAML hardware: (serial, arm_ctrl_mode) is a different layer and applies only when hardware:=real.
Launch entries¶
From the repo README (paths under robot_common_launch/launch/):
Kind |
Files the README names |
|---|---|
Visualization |
|
Control |
|
Manipulation |
|
Navigation |
|
Also on main under launch/ (not named in that README table):
Kind |
Extra files |
|---|---|
Visualization |
|
Control |
|
Manipulation |
|
Navigation |
|
navigation_isaac_gt.launch.py is the default Nav2 launch cited by robot_action_composer ROS2_STACK.md.
robot_common_launch README invoke table (same package; install first):
colcon build --packages-up-to robot_common_launch --symlink-install
source install/setup.bash
Scene |
Launch |
|---|---|
Visualization |
|
Gripper / hand |
|
Component |
|
Controller manager |
|
Navigation |
|
Repo README examples:
ros2 launch robot_common_launch gripper.launch.py
ros2 launch robot_common_launch manipulator_ocs2.launch.py
ros2 launch robot_common_launch navigation_slam.launch.py
OCS2 demo / split_body / full_body also declare the first-class EEF / profile arguments via create_robot_profile_launch_arguments() / create_platform_launch_arguments().
GitHub Release .deb¶
ros-jazzy-robot-descriptions-common is not on Debian / ROS apt. Workflow: .github/workflows/build-common-deb.yml. Rules: README.deb.md.
Primary path: in open-deploy-ws / fa-deploy-ws, run ./init_repo.sh and choose d for common, or ./scripts/install_core_debs.sh --only common.
README.deb.md example:
gh release download pre-release --repo fiveages-sim/robot-descriptions-common --pattern '*_amd64.deb'
sudo dpkg -i ros-jazzy-robot-descriptions-common_*.deb