Joint map
The joint ordering and naming on this page is the reference. Every consumer uses exactly this table.
Joint ordering rules
Twelve joints, IDs 1–12. The ID is a deterministic index derived from a fixed two-level rule:
- Legs are numbered first:
Left Front → Right Front → Left Rear → Right Rear(front row before rear row; within a row, left before right). - Within each leg, joints are numbered body-to-foot:
hip → upper → lower.
Master joint map
| joint_id | Joint name | Leg | Joint | Motion |
|---|---|---|---|---|
| 1 | lf_hip | Left Front | hip | upper swing, sagittal plane |
| 2 | lf_upper | Left Front | upper | upper → lower bend |
| 3 | lf_lower | Left Front | lower | lower → foot pitch |
| 4 | rf_hip | Right Front | hip | upper swing, sagittal plane |
| 5 | rf_upper | Right Front | upper | upper → lower bend |
| 6 | rf_lower | Right Front | lower | lower → foot pitch |
| 7 | lr_hip | Left Rear | hip | upper swing, sagittal plane |
| 8 | lr_upper | Left Rear | upper | upper → lower bend |
| 9 | lr_lower | Left Rear | lower | lower → foot pitch |
| 10 | rr_hip | Right Rear | hip | upper swing, sagittal plane |
| 11 | rr_upper | Right Rear | upper | upper → lower bend |
| 12 | rr_lower | Right Rear | lower | lower → foot pitch |
Name grammar
Joint names are always {leg}_{joint}:
leg∈ {lf,rf,lr,rr}joint∈ {hip,upper,lower}
Body frame
| Axis | Direction |
|---|---|
| +x | forward (nose) |
| +y | right (left side is −y) |
| +z | up |
base_linkorigin: robot center, at the hip joint height (z = 0 plane).- All 12 joints rotate about the body Y axis
(0, 1, 0): lateral, planar legs; no roll or yaw at any joint. - Zero pose: all angles 0 → legs straight down, feet at rest positions.
- Units: documentation and datasheets in mm; URDF/ROS in m.
- Standard: the body frame follows the ROS REP 103 convention for transforms and xyz coordinates.
Hip origins & foot rest positions
Hip joint origin in base_link (m): directly above the foot rest position:
| Leg | Hip x | Hip y | Foot z (rest) |
|---|---|---|---|
| Left Front | 0.130 | −0.105 | −0.185 m (−185 mm) |
| Right Front | 0.130 | +0.105 | −0.185 m |
| Left Rear | 0.240 | −0.105 | −0.185 m |
| Right Rear | 0.240 | +0.105 | −0.185 m |
Foot rest positions, body frame (mm): Left Front (130, −105, −185) · Right Front (130, +105, −185) · Left Rear (240, −105, −185) · Right Rear (240, +105, −185).
Per-joint kinematics
| Parameter | Value | Status |
|---|---|---|
| L1 (hip → upper, upper) | 0.100 m | current estimate: split of the 185 mm rest reach |
| L2 (upper → lower, lower) | 0.085 m | current estimate: L1 + L2 = 0.185 m matches documented foot drop |
| Lower → foot | fixed joint, not actuated | the chain is hip → upper → lower → foot |
| Joint axes | (0, 1, 0) all legs | per the body frame above |
Limits / effort / velocity per joint type (same for all four legs):
| Joint | Limit (rad) | Limit (°) | Max effort | Max velocity |
|---|---|---|---|---|
| hip | ±1.20 | ±68.8° | 10 N·m | 10 rad/s |
| upper | ±1.57 | ±89.9° | 10 N·m | 10 rad/s |
| lower | ±0.60 | ±34.4° | 5 N·m | 10 rad/s |
Telemetry wire mapping
Commands (JointTarget) and samples (JointSample) both address joints by
the joint_id from the master map above. There is no second numbering.
| Field | Type | Meaning |
|---|---|---|
id / joint_id | uint | 1–12, decoded per the master map (lf_hip … rr_lower) |
pos / pos_rad | float | target/actual angle, rad, zero pose per body frame |
vel / vel_rads | float | target/actual angular velocity, rad/s |
kp, kd | float | PD gains |
max_tq | float | per-joint torque clamp, N·m |
tq_nnm, cur_a, temp_c, flags, fault_code | n/a | sample-side telemetry (50 Hz) |
Gait pairing (trot)
Trot drives the two diagonal leg pairs in alternation:
- Pair A: Left Front + Right Rear: joint IDs {1, 2, 3, 10, 11, 12}
- Pair B: Right Front + Left Rear: joint IDs {4, 5, 6, 7, 8, 9}