Robot Descriptions
Every embodiment is a typed RobotDescription manifest under robots/<robot_id>/robot.yaml, validated by openral_core and consumed by the HAL adapter, the rSkill loader (embodiment-tag check), and the openral sim run runner.
Supported robots
Every robot launched by openral deploy sim|run runs the one generic ROS 2 HAL lifecycle node,
packages/openral_hal_node,
under the node name openral_hal_<robot_id>; the HAL column names the Python
adapter it builds from the manifest. Eval-only entries (sim run, benchmarks) build
their environment directly and start no lifecycle node.
| Robot | Manifest | HAL | Status |
|---|---|---|---|
| SO-100 (LeRobot follower arm) | robots/so100_follower/ |
SO100FollowerHAL (real) + SO100MujocoHAL (sim) |
✓ HW + sim |
| SO-101 (LeRobot follower arm) | robots/so101_follower/ |
shares SO-100 family — SO100FollowerHAL (real) + SO100MujocoHAL (sim) |
✓ HW + sim |
| Galaxea A1 | robots/galaxea_a1/ |
GalaxeaA1HAL (real-only) + isolated operator-provided ROS 1 SDK sidecar |
✓ unit + offline integration + real observation/hold/joint/gripper + C++ kernel HIL |
| Franka Panda | robots/franka_panda/ |
FrankaPandaHAL (MujocoArmHAL) + real-HW FrankaPandaRealHAL (franka_ros2 / libfranka over the FCI) |
✓ sim · HW adapter landed, never validated — no physical Franka; tests/hil/test_franka_panda.py is gated on a lab-franka runner that does not exist (#56) |
| UR5e | robots/ur5e/ |
UR5eHAL (MujocoArmHAL) + real-HW UR5eRealHAL (ur_robot_driver, URCap/RTDE) |
✓ sim · HW adapter landed, no recorded run — tests/hil/test_ur5e.py needs UR5E_HOST plus a lab-ur5e runner, and neither has ever been set |
| UR10e | robots/ur10e/ |
UR10eHAL (MujocoArmHAL) + real-HW UR10eRealHAL (ur_robot_driver, URCap/RTDE) |
✓ sim · HW adapter landed, no recorded run — tests/hil/test_ur10e.py needs UR10E_HOST plus a lab-ur10e runner, and neither has ever been set |
| Flexiv Rizon 4 | robots/rizon4/ |
Rizon4MujocoHAL (MujocoArmHAL) |
✓ sim |
| ALOHA bimanual (gym-aloha) | robots/aloha_bimanual/ |
AlohaMujocoHAL (MujocoArmHAL, bimanual) + real-HW AlohaHAL over Interbotix XS (HALBase, not RosControlHAL — the vendor driver owns the bus) |
✓ sim · HW adapter landed, never validated — no physical ALOHA rig (tests/hil/test_aloha.py is gated on a lab-aloha runner that does not exist), and its wire contract is wrong (#250): bring-up starts interbotix_xs_sdk's xs_sdk, so the arm_controller / gripper_controller topics AlohaHAL publishes to do not exist on a real rig and send_action would succeed without moving the arm |
| ALOHA-AgileX (RoboTwin 2.0) | robots/aloha_agilex/ |
eval-only (RoboTwin 2.0 dual-arm, 14-DoF; py3.10 SAPIEN sidecar) — targeted by smolvla-robotwin |
✓ sim |
| Enactic OpenArm v2 bimanual | robots/openarm/ |
OpenArmMujocoHAL (MujocoArmHAL, 16-DoF bimanual) + real-HW OpenArmRealHAL (four openarm_bringup ros2_control controllers over Damiao CAN FD) |
✓ sim · ✓ HW bus — CAN transport + motor round-trip pass on the wired rig (tests/hil/test_openarm_can_live.py, read-only: it queries motor state and never energises). Run by hand on a lab host: no CI runner, no in-tree real-HW deploy scene, and the command→motion gate (tests/hil/test_openarm_slot_group_motion.py) has no recorded run, so nothing has yet driven the arm through send_action |
| Anvil OpenARM 2.0 bimanual | robots/anvil_openarm_v2/ |
AnvilOpenArmV2MujocoHAL (MujocoArmHAL, 16-DoF bimanual; v2 + Anvil J1/J6 range deltas + wrist support bracket) |
✓ sim |
| Unitree H1 humanoid | robots/h1/ |
H1MujocoHAL (software PD loop, no S0 cerebellum) |
✓ sim |
| Unitree G1 humanoid | robots/g1/ |
G1MujocoHAL (ADR-0087 glide fallback; ADR-0089 pinned ONNX walking controller + head camera for VLN) |
✓ sim |
| Rethink Sawyer | robots/sawyer/ |
eval-only sim (MetaWorld backend; hal.sim is null) + real-HW SawyerRealHAL (sawyer_robot fork, intera_sdk lineage) |
✓ sim · HW adapter landed, never validated — no physical Sawyer (#57) |
| Fourier GR1 | robots/gr1/ |
eval-only (RoboCasa GR1 fork + RLDX-1) | ✓ sim |
| Panda mobile (RoboCasa kitchen) | robots/panda_mobile/ |
PandaMobileHAL (sim-only, RoboCasa/robosuite backend) |
✓ sim |
| Panda mobile, visual-SLAM twin | robots/panda_mobile_vslam/ |
PandaMobileHAL (sim-only); localises from two base RGB cameras via cuVSLAM instead of a LaserScan |
✓ sim |
| Galaxea R1 Pro | robots/r1pro/ |
generic scene-attached HAL + official BEHAVIOR/OmniGibson sidecar | ✓ sim |
| Google Robot (SimplerEnv) | robots/google_robot/ |
eval-only (SimplerEnv fractal20220817_data bridge env) |
✓ sim |
| WidowX (SimplerEnv) | robots/widowx/ |
eval-only (SimplerEnv bridge_orig env) |
✓ sim |
| PushT 2-D (gym-pusht) | robots/pusht_2d/ |
eval-only (pymunk 2-D rigid-body) |
✓ sim |
Manifest format
# robots/so100_follower/robot.yaml (excerpt)
name: "so100_follower"
embodiment_kind: "manipulator"
base_frame: "base"
joints:
- name: "shoulder_pan"
joint_type: "revolute"
axis_xyz: [0.0, 0.0, 1.0]
position_limits: [-2.0944, 2.0944] # radians (URDF-native)
velocity_limit: 4.5
actuator_kind: "servo"
# … 5-DoF arm + 1-DoF gripper
VLA compatibility
See docs/reference/vla_compatibility.md for the full matrix of which VLA checkpoints run on each robot under which simulators, including verified observation/action dimensions and normalisation notes.