Robot: OpenAMRobot 2.0 at P-03 rev19.7

What we are building
An open-source dual-arm mobile manipulator: our own mobile base with a DOLD Hexalift V4 lift and two OpenArm 2.0 arms, ROS 2 Jazzy software, released as a package a second site can build. The 2.0 target application is Use Case 1.
Where we are
The model below follows P-03 rev19.7, the register and the URDF on main and in PR #14. In Gazebo, base navigation works only with fixtures, docking has 0 of 5 successes, and arm planning works on mock hardware on a branch. Simulation at about 0.1 real-time factor; not safety evidence.
What is next
Fix the simulation on main (body filter, base command timeout, camera on base_camera_link, near-field consumers) and merge the combined model (PR #14) so the evidence below can be rerun on main.

Pick sequence: illustration, not measured behaviour. The store scene is a dark-store example (3.0 scope); 2.0 is built for Use Case 1.

OpenAMRobot 2.0 robot at P-03 rev19.7, in a dark-store scene

Robot: option B upper body, DOLD Hexalift V4 350 mm lift on a two-position base plate, 2 × OpenArm 2.0 180 mm ahead of the column axis, base sensors per P-03 rev19.7 item 19 and the URDF on platform-sw main · scene: dark-store example, 3.0 scope · visualization only, about ±2 cm · hover a frame axis to read its name

Working armTargetCollision
Illustration, not measured behaviour 0.0 s
Head ZED Mini
Base Gemini 336L
Left wrist
Right wrist

Configuration IDs and frames

A value is called "default" only where P-03 or the register states it (head_pitch hp25, base_tilt bt10, column DOLD primary); the view starts lift stop and base_plate at a "preview setting" whose source is named. Switches set the model above (also in its Robot setup panel). Frame buttons move the view to the frame and show its label; hover a frame axis in the view to read it.

Lift stop
base_plate
base_tilt
head_pitch
IDValues (setting shown bold)Default or preview settingSource and note
lift_stopL1000 L1175 L1350L1000 preview settingsimulation start pose; P-03 and the register state no default stop; calibration ID (lift height is joint state)
base_platebp000 bp050bp000 preview settingPR #14 baseline (in review); P-03 and the register state no default; P-03 states no default; PR #14 uses bp000
base_tiltbt05 bt10 bt15bt10 defaultP-03 item 17 and register CONFIG-IDS (baseline bt10)
head_pitchhp15 hp20 hp25 hp30 hp35hp25 defaultP-03 item 17 and register CONFIG-IDS (baseline hp25)
columndold_v4_350 tl3_400dold_v4_350 defaultP-03 item 16 (DOLD primary, TL3 fallback); tl3_400 has no supplier data; the model refuses it
DimensionValue
chassis780 x 582 mm (design, P-03 item 18; implementation drift: URDF collision 780 x 580)
deck top294 mm
plate top304 mm
wheel radius0.100 m
track0.400 m placeholder (DRIVE-TRACK open)
castersx +/-0.275, y +/-0.215
column530 mm retracted, 350 mm stroke
arm mount180 mm ahead of the column axis, y +/-0.031, 166 mm above the column top

Frames (base sensors: P-03 rev19.7 design values with drift markers; other frames from the URDF on main and PR #14)

FrameParentxyz (m), rpyNote
-0, 0, 0floor under the drive-axle midpoint (REP 105)
base_footprint0, 0, 0.098drive-axle midpoint, 98 mm above the floor
base_link0.33, 0, 0.124RPLIDAR S3, yaw pi, 17.5 mm printed spacer, no standoffs, scan plane 222.05 mm drift 6
base_link0.0544, 0, 0.121ICM-42688-P, yaw -90 deg drift 5
base_link0.387, 0, 0.046Gemini 336L, 10 deg up (bt10), up-tilt from base_tilt drift 7
base_link0.39, 0, -0.0066TF-Luna, pitched 10 deg down; design value P-03 rev19.7 D6; implementation drift: URDF on main x 0.399 and pitch 20 deg, draft #93 pitch 10 deg (OA-10) drift 2 drift 3
tof_rearbase_link-0.39, 0, -0.0066TF-Luna, yaw pi, pitched 10 deg down; implementation drift: URDF on main x -0.399 drift 3
base_link0.39, 0.13, -0.0066MB7060; design value P-03 D1 and register; implementation drift: URDF on main 0.3906 (OA-11) drift 4
us_rear_leftbase_link-0.39, 0.13, -0.0066MB7060, yaw pi; implementation drift: URDF on main -0.3886 drift 4
base_footprint0.060 or 0.110, 0, 0.304column axis x +0.060 (bp000) / +0.110 (bp050)
lift_column_base_link0, 0, 0.530 + liftprismatic lift_joint 0 to 0.350 m
lift_carriage_link0.18, 0.031, 0.166J1_A mount; shoulder 1000 to 1350 mm
lift_carriage_link0.18, -0.031, 0.166J1_A mount
lift_carriage_link0.202, 0, 0.389ZED Mini, 22 mm ahead of and 223 mm above the shoulder

Sensor coverage

Sensor coverage, top view

What this shows: where the robot can see around it: the LiDAR field and its 0.40 m near blind zone, the base camera field of view, the near-field cones, and the rear coverage gap (OA-63).

How to read it: the robot faces up; toggle between the 2.0 and the release 001 sensor sets; hatched red is the rear gap; dashed shapes are illustrative or have no consumer on main.

2.0 (P-03 rev19.7, URDF on main)front1 mLiDAR field drawn to 2.0 m

Source: sensor_frames.yaml and scan_body_filter_real.yaml on main; P-03 rev19.7 items 13, 14 and 19; BOM 7.10 CAM-001; finding OA-63; project lead statement, 19 Oct 2026 · 24 Oct 2026

2.0: Cone widths are drawn at 30 degrees for orientation only; no beam width is stated in the sources. TF-Luna units point 10 degrees down as cliff sensors (P-03 rev19.7; 20 degrees on platform-sw main, drift 2). No node on main consumes the near-field sensors. Rear gap (OA-63): the LiDAR rear sector is masked by the rear cover and no node on main consumes the rear sensors, yet the controller may reverse (min_vel_x -0.05). LiDAR: lidar_link in sensor_frames.yaml; rear mask [-45, 49] deg in the LiDAR frame (0 = robot rear) and close mask under 0.40 m in scan_body_filter_real.yaml; range_min 0.40 m in the simulation filter. Camera: base_camera_link; depth FOV 90 x 65 deg (BOM 7.10 CAM-001).

Release 001: Sensor types from the project lead (19 Oct 2026); counts and positions are not released, so these are drawn as illustrations. Other sources list a different set (see the hardware page). Rear coverage depends on the IR positions, which are not released. LiDAR: same mounting and masks as v0.0.1 (scan_body_filter_real.yaml, unchanged since v0.0.1); its position on release 001 is drawn at the 2.0 mount for comparison.

Simulation evidence by subsystem

Runtime evidence layer per tested setup, with the tested branch or commit. S1 to S12 are the 19 Oct audit scenarios (pass 2, headless Gazebo Harmonic, ROS 2 Jazzy, Nav2 1.3.13, MoveIt 2.12.4). Mock hardware and fixtures are development evidence, not acceptance.

Simulation evidence: Base navigation (S1, S2, S6, S12)

Limitations: Fixture needed on main; collision monitor never engaged; static parameter check only for S12.

S1: Nominal navigation, three goals

  • runtime: fails in simulation tested: main 8a7a5b1: 0 of 3 goals, 0.000 m travel
  • runtime: works in simulation with fixture tested: main 8a7a5b1 with fixture F1 to F3: 3 of 3 goals, peak 0.199 m/s, no contact

Pass criterion: 3 of 3 goals reached, no contact, peak speed at or below 0.20 m/s, single protected /cmd_vel publisher

Result: FAIL on main (OA-47). PASS with fixture for motion; FAIL for the single-publisher part (dock_trigger is a second /cmd_vel publisher in every sim run, OA-67).

Simulation at about 0.1 real-time factor; not safety evidence.

OA-47 · scenario S1 · code openamr-platform-sw/ros2/src/openamrobot_nav2/config/scan_body_filter.yaml:1 · owner @skunal3318 (navigation lead)OA-57 · scenario S1, S11 · code openamr-platform-sw/ros2/src/openamrobot_bringup/launch/bringup.launch.py · owner @skunal3318 (navigation lead)OA-67 · code openamr-platform-sw/ros2/src/openamrobot_nav2/launch/navigation_launch.py · owner @skunal3318 (navigation lead)

S2: Sudden obstacle on the path

  • runtime: works in simulation with fixture tested: main 8a7a5b1 with fixture: no contact; clearance 0.117 m (box), 0.070 m (barrier); collision monitor never engaged

Pass criterion: no contact; clearance at least the stop margin (0.25 m proposed); collision monitor engages when the planner does not avoid in time

Result: PASS for no contact; FAIL for clearance and for the reactive layer (never engaged).

Simulation at about 0.1 real-time factor; not safety evidence.

OA-35-P2 · scenario S2 · code openamr-platform-sw/ros2/src/openamrobot_nav2/config/nav2_params.yaml:177 · owner @skunal3318 (navigation lead)

S6: UI stop during navigation

  • runtime: works in simulation with fixture tested: main with fixture plus UI: stop in 0.79 s and 0.039 m for a navigation goal; no latch

Pass criterion: stop within 1 s and 0.1 m and stays stopped against other sources

Result: PASS for the Nav2 path; FAIL for latching (any direct source resumes)

Simulation at about 0.1 real-time factor; not safety evidence.

OA-16-P2 · scenario S6 · code openamrobot-ui/web/src/components/StatusBar.jsx:63 · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)

S12: Parameter cross-check

  • runtime: not run tested: static, recorded SHAs: 7 of 20 parameter checks contradict the plans; 6 observations without a project requirement (static check, no runtime)

Pass criterion: no contradiction between configuration, P-03 and UC1

Result: FAIL (7 of 20 checks contradict the plans; audit pass 2 counted 13, six reclassified as observations on review)

Static parameter check.

OA-35-P2 · scenario S2 · code openamr-platform-sw/ros2/src/openamrobot_nav2/config/nav2_params.yaml:177 · owner @skunal3318 (navigation lead)OA-62 · scenario S12 · code openamrobot-ui/web/src/shared/constants/index.js:53 · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)OA-63 · scenario S12 · code openamr-platform-sw/ros2/src/openamrobot_nav2/config/nav2_params.yaml:111 · owner @skunal3318 (navigation lead)
Simulation evidence: Docking (S3, S7)

Limitations: 5 of 8 planned attempts ran; wall-clock deadlines distort results at 0.1 real-time factor.

S3: Dock and undock repeatability

  • runtime: fails in simulation tested: main 8a7a5b1: dock failed; undock still reversed 0.296 m
  • runtime: fails in simulation tested: main with fixture: 0 of 2 docked; navigation stack reset mid-dock
  • runtime: works on branch or prototype tested: #35 prototype c25ceef with fixture: single /cmd_vel publisher, monitor never deactivated; 0 of 2 docked

Pass criterion: 5 of 5 docked within the dock pose tolerance; sole /cmd_vel publisher collision_monitor; no lifecycle transition of the safety chain; undock only from docked

Result: FAIL on all three builds (0 docked of 5 attempts). The #35 prototype meets its arbitration criteria (single publisher, monitor never deactivated) but not the docking outcome under sim time.

Simulation at about 0.1 real-time factor; not safety evidence.

OA-04-P2 · scenario S3 · code openamr-platform-sw/ros2/src/openamrobot_docking/scripts/dock_trigger.py:833 · owner @skunal3318 (navigation lead)OA-53 · scenario S3 · code openamr-platform-sw/ros2/src/openamrobot_docking/scripts/dock_trigger.py:942 · owner @fridayali (docking and robot description)OA-54 · scenario S3 · code openamr-platform-sw/ros2/src/openamrobot_docking/scripts/dock_trigger.py:1800 · owner @fridayali (docking and robot description)OA-68 · scenario S3 · code openamr-platform-sw/ros2/src/openamrobot_docking/scripts/dock_trigger.py:833 · owner @fridayali (docking and robot description)

S7: Publisher loss: UI socket, controller_server, dock_trigger

  • runtime: fails in simulation tested: main with fixture plus UI: (a) 2.25 m after UI loss; (b) monitor deactivated after a crash; (c) drove into the dock

Pass criterion: base stops within the command timeout (0.25 s proposed) plus braking; reactive layer stays active

Result: (a) FAIL; (b) PASS for the stop, FAIL for the reactive layer; (c) FAIL (contact with the dock). On the real base the documented /cmd_vel watchdog would stop (a) and (c); that is not checkable here and is not safety evidence.

Simulation at about 0.1 real-time factor; not safety evidence.

OA-04-P2 · scenario S3 · code openamr-platform-sw/ros2/src/openamrobot_docking/scripts/dock_trigger.py:833 · owner @skunal3318 (navigation lead)OA-45-P2 · scenario S7 · code openamr-platform-sw/ros2/src/openamrobot_description/urdf/gazebo_control.xacro:5 · owner @skunal3318 (navigation lead)OA-52 · scenario S7 · code openamrobot-ui/web/src/features/blocks/robotActions.js:168 · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)OA-56 · scenario S7 · code openamr-platform-sw/ros2/src/openamrobot_nav2/launch/navigation_launch.py · owner @skunal3318 (navigation lead)
Simulation evidence: Operator UI paths (S4, S5, S6, S7)

Limitations: Browser emulated over rosbridge with the same messages; web build not run.

S4: UI teleop toward a wall

  • runtime: fails in simulation tested: main with fixture plus UI c5558ad5: drove into the wall at 0.2 m/s

Pass criterion: UI command limited by the smoother and stopped by the collision monitor before contact

Result: FAIL

Simulation at about 0.1 real-time factor; not safety evidence.

OA-02-P2 · scenario S4 · code openamrobot-ui/web/src/shared/constants/index.js:7 · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)OA-49 · scenario S4, S5 · code location withheld (security) · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)OA-62 · scenario S12 · code openamrobot-ui/web/src/shared/constants/index.js:53 · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)

S5: UI maps and recordings: second Nav2 and replay

  • runtime: fails in simulation tested: main with fixture plus UI: replay moved the robot 0.672 m; second controller_server started

Pass criterion: no motion from replay; no second Nav2 or lifecycle change of platform nodes from the UI

Result: FAIL

Simulation at about 0.1 real-time factor; not safety evidence.

OA-03-P2 · scenario S5 · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)OA-48 · scenario S5 · code location withheld (security) · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)OA-50 · scenario S5 · code location withheld (security) · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)

S6: UI stop during navigation

  • runtime: works in simulation with fixture tested: main with fixture plus UI: stop in 0.79 s and 0.039 m for a navigation goal; no latch

Pass criterion: stop within 1 s and 0.1 m and stays stopped against other sources

Result: PASS for the Nav2 path; FAIL for latching (any direct source resumes)

Simulation at about 0.1 real-time factor; not safety evidence.

OA-16-P2 · scenario S6 · code openamrobot-ui/web/src/components/StatusBar.jsx:63 · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)

S7: Publisher loss: UI socket, controller_server, dock_trigger

  • runtime: fails in simulation tested: main with fixture plus UI: (a) 2.25 m after UI loss; (b) monitor deactivated after a crash; (c) drove into the dock

Pass criterion: base stops within the command timeout (0.25 s proposed) plus braking; reactive layer stays active

Result: (a) FAIL; (b) PASS for the stop, FAIL for the reactive layer; (c) FAIL (contact with the dock). On the real base the documented /cmd_vel watchdog would stop (a) and (c); that is not checkable here and is not safety evidence.

Simulation at about 0.1 real-time factor; not safety evidence.

OA-04-P2 · scenario S3 · code openamr-platform-sw/ros2/src/openamrobot_docking/scripts/dock_trigger.py:833 · owner @skunal3318 (navigation lead)OA-45-P2 · scenario S7 · code openamr-platform-sw/ros2/src/openamrobot_description/urdf/gazebo_control.xacro:5 · owner @skunal3318 (navigation lead)OA-52 · scenario S7 · code openamrobot-ui/web/src/features/blocks/robotActions.js:168 · owner @parthkeshari (UI lead); reviewers @panthera-momagdii (tech lead, UI reviewer) and UI reviewer (GitHub handle to be confirmed); simulation checks @nikgolobo (simulation checks)OA-56 · scenario S7 · code openamr-platform-sw/ros2/src/openamrobot_nav2/launch/navigation_launch.py · owner @skunal3318 (navigation lead)
Simulation evidence: Sensors and frames (S9, S10)

Limitations: Real-robot TF checked statically only.

S9: TF tree and REP 105

  • runtime: works in simulation with fixture tested: main with fixture; upper body mock: REP 105 chain OK; base_camera_link has no sensor

Pass criterion: map, odom, base_footprint, base_link chain; one parent per frame; fresh stamps; sensor frames as P-03 item 19

Result: PASS for REP 105 and tree structure in sim; the 2.0 camera frame has no sensor (OA-59). Real-robot launch TF only checked statically (pass 1 OA-17).

Simulation at about 0.1 real-time factor; not safety evidence.

OA-17 · code openamr-platform-sw/ros2/src/openamrobot_bringup/launch/real_bringup.launch.py:78 · owner @skunal3318 (navigation lead)OA-59 · scenario S10 · code openamr-platform-sw/ros2/src/openamrobot_description/urdf/robo_urdf.urdf.xacro:696 · owner @fridayali (docking and robot description)

S10: Sensor topics, frames and QoS

  • runtime: fails in simulation tested: main with fixture: docking camera on legacy frame; ToF and ultrasonic unused

Pass criterion: every 2.0 sensor publishes in its P-03 frame at its rate, with a consumer and compatible QoS

Result: FAIL: docking camera on the legacy frame (OA-59); near-field sensors unused (OA-69); LiDAR range_min 0.40 m (KNOWN #35).

Simulation at about 0.1 real-time factor; not safety evidence.

OA-59 · scenario S10 · code openamr-platform-sw/ros2/src/openamrobot_description/urdf/robo_urdf.urdf.xacro:696 · owner @fridayali (docking and robot description)OA-69 · scenario S10, S12 · code openamr-platform-sw/ros2/src/openamrobot_nav2/config/nav2_params.yaml · owner @skunal3318 (navigation lead)
Simulation evidence: Upper body and arms (S8, S9, PR #14)

Limitations: Mock hardware on a branch; no Gazebo upper-body run in pass 2.

S8: Combined model with MoveIt on mock hardware

  • runtime: works on mock hardware tested: followups/a6-a7-49d2368 a490503, mock hardware: 48 of 48 plans; joint4 margin 0; lift not planned

Pass criterion: all named poses plan and execute; final states valid; margin to limits above 0.05 rad; lift part of planning

Result: PASS for planning on mock; FAIL for margin and lift integration

Simulation at about 0.1 real-time factor; not safety evidence.

OA-64 · scenario S8 · code PR #14 (branch evidence) · owner @Tushargoel230 (upper-body model)OA-65 · code PR #14 (branch evidence) · owner @Tushargoel230 (upper-body model)

S9: TF tree and REP 105

  • runtime: works in simulation with fixture tested: main with fixture; upper body mock: REP 105 chain OK; base_camera_link has no sensor

Pass criterion: map, odom, base_footprint, base_link chain; one parent per frame; fresh stamps; sensor frames as P-03 item 19

Result: PASS for REP 105 and tree structure in sim; the 2.0 camera frame has no sensor (OA-59). Real-robot launch TF only checked statically (pass 1 OA-17).

Simulation at about 0.1 real-time factor; not safety evidence.

OA-17 · code openamr-platform-sw/ros2/src/openamrobot_bringup/launch/real_bringup.launch.py:78 · owner @skunal3318 (navigation lead)OA-59 · scenario S10 · code openamr-platform-sw/ros2/src/openamrobot_description/urdf/robo_urdf.urdf.xacro:696 · owner @fridayali (docking and robot description)

PR #14 evidence (openamr-upperbody-sw) IN REVIEW

Draft: IN REVIEW, not merged, not accepted. Head 403a529 (24 Oct 2026): changes requested (NaN joint samples are accepted; the quality check must be restored). The evidence below was recorded on head e5cf613 (19 Oct).

Latest batch on upper-body code fe2e821 with platform-sw dfd44a5: A6 25 PASS / 3 WARN / 0 FAIL and A7 14 PASS / 2 WARN / 0 FAIL, 3 of 3 runs each.

Cumulative on platform-sw dfd44a5: A7 9 runs, 2 failed (18 Oct: parameter_bridge base_joint_states_bridge SIGSEGV during stop, cause not investigated per the test index), the last 6 passed.

Risk: Intermittent bridge crash, cause not investigated. Remaining WARN: M07 (four upstream joint limits), V01 (no human visual check).

Separate from audit pass 2 S8 (48 of 48 plans on mock hardware, branch followups/a6-a7-49d2368). Owner @Tushargoel230 (upper-body model). Sources: PR #14, branch test index. Simulation at about 0.1 real-time factor; not safety evidence.

Simulation evidence: Bringup and shutdown (S11)

Limitations: Readiness lines only; crash-on-exit not fixed.

S11: Start and stop, three times per bringup

  • runtime: works in simulation with fixture tested: all four bringups: 15 cycles, 0 leftovers; SIGSEGV on stop; 1 of 16 starts stalled

Pass criterion: ready within the timeout every time; clean stop within 30 s; no leftover process; no crash exit

Result: PASS for readiness and cleanup (0 leftovers in 15 cycles); FAIL for crash-free shutdown (apriltag_node and move_group SIGSEGV, pass 1 OA-41) and for start reliability over the pass (OA-57).

Simulation at about 0.1 real-time factor; not safety evidence.

OA-41 · code openamr-platform-sw (main) · owner @skunal3318 (navigation lead)OA-41-P2 · scenario S11 · code openamr-platform-sw (main) · owner @skunal3318 (navigation lead)OA-57 · scenario S1, S11 · code openamr-platform-sw/ros2/src/openamrobot_bringup/launch/bringup.launch.py · owner @skunal3318 (navigation lead)

Simulation vs spec

Rating of the simulated model in the node review: NEEDS WORK (OA-59 and the items below). The 3D view above shows the spec (P-03 rev19.7); the Gazebo model that produced the evidence differs where listed.