- Strict Architectural Decoupling via Canonical Schemas:
GeminiArgonPlannernever publishes to ROS 2 topics directly; instead, it emits a Pydantic v2 / JSON Schema Draft 2020-12TaskDAGverified against a 3DSpatialStatebeforeDecoupledROS2ExecutororMoveItPreDispatchGuardcan dispatch a single motion primitive. - 100.0% Deterministic Fault Interception Across Four Physical Layers:
FrankaFR3DeterministicGatechecks every candidateTaskNodeagainst 7-DoF Damped Least Squares (DLS) IK reachability ([0.15m, 0.85m], residual≤ 15.0 mm), 3D AABB collision volumes and table clearance (Z ≥ 0.20m), URDF joint/torque envelopes ([87..12] Nm), and multi-arm zone/tool time-window locks—blocking610 / 610injected faults inSTAMP-Bench-V1. - +61.0% Task Completion Gain via Closed-Loop
write_limit_back: Rather than aborting on a gate rejection,FeedbackContextStore.write_limit_back()serializes eachHardwareFaultLoginto an exact physical correction constraint ([STAMP_GATE_FAULT ...]) injected into the planner prompt, achieving 100.0% two-turn recovery (100.0%vs.39.0%single-shot success across 1,000 episodes in1.61 swall-clock evaluation).
Why Direct VLA-to-Controller Execution Fails in Multi-Arm Workcells
When foundation models act as high-level task and motion planners for multi-manipulator cells, a recurring architectural anti-pattern is coupling the model's tool-call output directly to ROS 2 action servers or MoveIt 2 trajectory controllers. Even when a frontier model such as gemini-4-argon correctly decomposes a long-horizon task semantically, single-shot coordinate generation remains vulnerable to four physical failure modes: targets placed outside the manipulator's spherical reach envelope, end-effector bounding boxes that clip workbench obstacles, posture seeds that exceed distal wrist torque limits under payload, and overlapping time windows where two arms contend for the same shared workspace zone or fixture.
Project STAMP (Spatial, Task & Motion Planning, v1.0.0-stamp) resolves this vulnerability by introducing a deterministic verification air-gap between multimodal planning and physical execution. Instead of emitting raw controller commands, the planner is restricted to producing a declarative TaskDAG evaluated against a real-time 3D scene snapshot (SpatialState). No command can reach DecoupledROS2Executor or MoveItPreDispatchGuard unless every node in the directed acyclic graph passes FrankaFR3DeterministicGate with GateVerdict.passed == True.
Four Canonical Schema Contracts & Video-to-TaskDAG Ingestion
To guarantee zero ambiguity between the generative planner, the deterministic gate, and external Model Context Protocol (MCP) clients, stamp/stamp_schemas/ codifies four Pydantic v2 models exported as strict JSON Schema Draft 2020-12 artifacts (export_all_json_schemas()):
TaskDAG&TaskNode(TaskDAG.schema.json): Represents a parallel multi-arm task graph where each node specifiesnode_id, assigned manipulatorarm_id(FR3_1,FR3_2,FR3_3), primitiveaction,target_pose[x, y, z, yaw]in world meters/radians, upstreamdependencies, claimedshared_zone,required_tool, and scheduledtime_window(t_start, t_end).SpatialState(SpatialState.schema.json): Captures the complete 3D workcell state at planning time, including per-arm base transforms and 7-DoF joint states (RobotArmStatewithjoint_torques_nmand custom URDFjoint_limits_rad), tracked 3D objects (ObjectPose3D), 3D obstacle AABBs (WorkspaceZoneBox), and active mutex maps (active_zone_locks,active_tool_locks).GateVerdict(GateVerdict.schema.json): Emitted byFrankaFR3DeterministicGate.evaluate_dag(), recording booleanpassed,approved_node_ids,rejected_node_ids, pre-solved 7-DoF IK joint vectorsjoint_solutions(in radians), and cumulativeinterception_rate.HardwareFaultLog&FaultCode(HardwareFaultLog.schema.json): Standardized diagnostic record binding a rejectednode_idandarm_idto a deterministicFaultCode, scalarmeasured_valuevs.limit_value, physicalunit, and an actionablecorrection_hintstring serialized viato_context_constraint().
Multimodal Video-to-TAMP Skill Grounding
Beyond static scene graphs, MultimodalVideoIngestor (stamp/video_ingestion.py) translates long-horizon multi-dish process videos (such as multi_dish_stir_fry_and_soup) into parallel 3-arm TaskDAG schedules. High-level semantic actions extracted from video streams are mapped deterministically onto parameterized Franka Emika FR3 motion primitives via VIDEO_ACTION_TO_FR3_SKILL while scheduling non-overlapping earliest-available timelines across FR3_1..3, shared zones, and tools:
| DAG Node ID | Video Action → FR3 Primitive | Assigned Arm | Shared Zone & Tool Lock | Target Pose [x, y, z, yaw] |
Scheduled Window |
|---|---|---|---|---|---|
v1_chop_vegetables |
chop → pick_and_oscillate_z (3 strokes, 8.0 N) |
FR3_1 |
cutting_board / knife_fixture |
[0.00, -0.93, 0.34, 0.0] |
[0.00s, 1.60s] |
v2_chop_tofu_parallel |
chop → pick_and_oscillate_z (3 strokes, 8.0 N) |
FR3_2 |
prep_board_2 / cleaver_fixture |
[0.80, 0.46, 0.34, 0.0] |
[0.00s, 1.50s] |
v3_transfer_veg_to_wok |
transfer → pick_and_place (clearance 0.14m) |
FR3_1 |
central_table / None |
[0.00, 0.00, 0.35, 0.0] |
[1.60s, 3.00s] |
v4_pour_broth |
pour → wrist_pitch_tilt (1.35 rad, 0.6s dwell) |
FR3_3 |
central_table / ladle_vessel |
[-0.04, 0.04, 0.40, 0.0] |
[3.00s, 4.80s] |
v5_wait_simmer |
wait → hold_posture (0.5s dwell) |
FR3_2 |
None / None |
[0.80, 0.46, 0.38, 0.0] |
[1.50s, 2.00s] |
v6_transfer_tofu_to_pot |
transfer → pick_and_place (deps: v4, v5) |
FR3_2 |
central_table / None |
[0.02, -0.02, 0.42, 0.0] |
[4.80s, 6.20s] |
Inside the Four-Layer Deterministic Shield & Closed-Loop Write-Back
Every candidate TaskNode in a proposed TaskDAG is inspected sequentially across four orthogonal physical verification layers inside FrankaFR3DeterministicGate._evaluate_single_node() (and enforced at the controller boundary by MoveItPreDispatchGuard.verify_moveit_goal()). When any invariant is violated, the gate blocks execution and synthesizes a deterministic repair rule for FeedbackContextStore.write_limit_back():
2. 3D Workspace & AABB Collision: z_target ≥ 0.20m ∧ ||p_xy − p_base,xy||₂ ≥ 0.12m ∧ ∀B ∈ Boxes_obs: AABB(p_target ± [0.04, 0.04, 0.05]m) ∩ B = ∅
3. Joint & Torque Envelopes: ∀j ∈ {1..7}: q_j ∈ [q_min,j, q_max,j] (URDF) ∧ |τ_j| ≤ τ_max,j ([87, 87, 87, 87, 12, 12, 12] Nm)
4. Spatio-Temporal Mutex Locks: ∀(n_a, n_b) claiming shared_zone Z or required_tool T (arm_a ≠ arm_b): max(t_start,a, t_start,b) ≥ min(t_end,a, t_end,b)
| FaultCode Enum | Deterministic Trigger Condition | Injected Context Constraint (write_limit_back) |
Planner Turn-2 Repair Transformation |
|---|---|---|---|
IK_UNREACHABLE |
3D radial distance r_3D ∉ [0.15m, 0.85m] from assigned arm's fr3_link0 base, or 150-iteration 7-DoF DLS IK residual exceeds 15.0 mm. |
[STAMP_GATE_FAULT node=... arm=FR3_k code=IK_UNREACHABLE measured=1.98m limit=0.85m]: move target within 0.52m of base |
Projects target XY radially along the base-to-target vector onto the r = 0.52m kinematic sweet spot and clamps Z ∈ [0.32m, 0.62m]. |
WORKSPACE_COLLISION |
Target penetrates table floor (Z < 0.20m), enters the 0.12m base column cylinder, or end-effector AABB intersects an obstacle WorkspaceZoneBox. |
[STAMP_GATE_FAULT node=... code=WORKSPACE_COLLISION]: End-effector AABB intersects obstacle; raise Z above box.max_z + 0.08m |
Lifts target Z to max(0.34m, box.max_z + 0.08m), or retracts XY to 0.5 × base_xyz at Z = 0.38m if vertical clearance exceeds 0.68m. |
RESOURCE_CONTENTION |
Two manipulators claim the same shared_zone (e.g., central_table) or required_tool during overlapping [t_start, t_end] windows or active lock. |
[STAMP_GATE_FAULT node=... code=RESOURCE_CONTENTION]: Shared zone contended over [0.00s, 1.50s]; shift time_window after 1.50s |
Shifts the contending node's time_window to [mutex_cursor + 0.15s, mutex_cursor + 0.15s + dur] and releases conflicting foreign locks. |
JOINT_LIMIT_EXCEEDED |
Any of the 7 FR3 joint angles violates URDF [q_min, q_max] radians, or joint torque |τ_j| exceeds [87, 87, 87, 87, 12, 12, 12] Nm. |
[STAMP_GATE_FAULT node=... code=JOINT_LIMIT_EXCEEDED measured=115.0Nm limit=87.0Nm]: retract moment arm & enable reduced_payload_mode |
Retracts target moment arm to 0.45 × base_xyz at Z = 0.38m, resets seed to FR3_HOME_CONFIG, and sets reduced_payload_mode = True. |
Empirical Evaluation: STAMP-Bench-V1 (1,000 Fault-Injected Episodes)
To rigorously quantify the reliability gap between unguarded single-shot VLA planning and Project STAMP's closed-loop Plan → Gate → Write-Back architecture, we executed the 1,000-episode fault-injection benchmark frozen in datasets/stamp_bench_v1/stamp_bench_v1_manifest.json (SHA-256 trace digest 8d8b72bb75c3865e...98b4c0aad, deterministic RNG seed 202703). Across 1,000 parallel 3-arm episodes, the campaign injected synthetic physical faults at a 60% target rate (resulting in 610 fault-injected episodes and 1,076 total node-level fault events across out-of-reach object jitter at [1.42, -1.32, 0.34]m, central workspace obstacle blockers, 115.0 Nm joint torque spikes on J1, and concurrent central_table time-window collisions):
| Benchmark Metric (1,000 Multi-Arm Episodes) | Single-Shot VLA Baseline | Project STAMP (Plan → Gate → Write-Back) |
Systems Delta |
|---|---|---|---|
Episodes Evaluated (seed = 202703) |
1,000 | 1,000 | Identical workload |
Episodes with Synthetic Fault Injection (p = 0.60) |
610 (61.0%) | 610 (61.0%) | 1,076 node faults |
| Deterministic Gate Fault Interception Rate | 0.0% (0 / 610) | 100.0% (610 / 610) | +100.0% (KPI >95%) |
| Unverified / Unsafe Hardware Dispatches | 610 / 1,000 | 0 / 1,000 | -100.0% (Zero unsafe) |
Closed-Loop write_limit_back Recovery Rate |
0.0% (No feedback loop) | 100.0% (610 / 610 recovered) | 2-turn convergence |
| Tokens per 6-Node DAG (Initial / Write-Back Repair) | 1,060 tok (1 call) | 1,060 tok (clean) / 1,870 tok (repaired) | +810 tok on fault only |
| 1,000-Episode Campaign Wall-Clock Runtime (Cached DLS IK) | — | 1.61 s (1.61 ms / episode) | Sub-2ms gate + repair |
| End-to-End Episode Task Completion Rate | 39.0% (390 / 1,000) | 100.0% (1,000 / 1,000) | +61.0% absolute gain |
Decoupled Deployment: Standalone REST & Model Context Protocol (MCP) Server
A core systems requirement of Project STAMP is that deterministic kinematic and spatial verification should not be locked inside a monolithic simulator process. Through StampStandaloneEngine (stamp/api_server.py), the entire Plan → Gate → Write-Back loop operates as a zero-ROS-dependency microservice over HTTP REST (port :8095) or JSON-RPC 2.0 MCP stdio transport. External agent harnesses can pass custom robot URDF XML definitions (parsed dynamically via parse_urdf_joint_limits()) and reach bounds on every call:
| MCP Tool / HTTP Endpoint | Input Contract | Deterministic Engine Behavior & Output |
|---|---|---|
stamp_plan_and_verifyPOST /v1/stamp/plan_and_verify |
goal, spatial_state, optional urdf_xml, reach_bounds_m, video_events, max_replans |
Applies custom URDF revolute/prismatic limits, executes closed-loop ClosedLoopStampOrchestrator.run_episode(), and returns verified dag, verdict, and active_write_back_constraints. |
stamp_verify_dagPOST /v1/stamp/verify_dag |
Candidate dag (TaskDAG), spatial_state, optional urdf_xml, reach_bounds_m |
Runs FrankaFR3DeterministicGate.evaluate_dag() in under 2 ms, automatically appends any HardwareFaultLog entries to FeedbackContextStore, and returns GateVerdict with pre-solved 7-DoF joint_solutions. |
stamp_write_limit_backPOST /v1/stamp/write_limit_back |
List of HardwareFaultLog objects from simulator or hardware protective stops |
Serializes hardware faults into deduplicated [STAMP_GATE_FAULT ...] prompt constraints and returns updated fault_summary counts by FaultCode. |
Paired with our unattended batch harness (scripts/run_stamp_batch.py), cross-OS WSL2 FastDDS heartbeat watchdog (scripts/fastdds_watchdog.py), and SHA-256 dataset freezer (scripts/freeze_stamp_bench_v1.py), Project STAMP establishes a reproducible blueprint for deploying frontier multimodal models safely across physical multi-arm manipulation stations.
This technical article (M9G-TR-2026-03), the Project STAMP (v1.0.0-stamp) four-stage Plan → Gate → Execute → Write-Back architecture, the four-layer FrankaFR3DeterministicGate formulation, and the 1,000-episode empirical benchmark in STAMP-Bench-V1 (stamp_bench_v1_manifest.json) constitute original published prior art by Minsu Chang, Ph.D. (장민수 / M9G). This work is published exclusively as a web-native technical research disclosure on mincasurong.github.io. Unauthorized copying, translation, or conversion of these tables, schemas, or analyses into third-party conference papers (IEEE ICRA, IROS, RA-L, CoRL) or arXiv preprints is strictly prohibited.