Repository navigation
Conversation
…s and opening checks An environment adjusts the gripper and episode tools through its description metadata; one that declares nothing keeps the previous schemas and behavior. - finish_statuses: finish offers success, failure and give_up, recorded as completion_claimed, task_failed and task_abandoned. Default: success only. - motion_profiles: replace whole named move profiles (max_step_m and arrival tolerances) with values matched to the arm's accuracy. The profile names stay fixed because they are part of the move schema. - normalized_opening_tolerance: without a metric opening model, an explicit 0-1 opening is checked against the measured 0-1 opening. Only readings the environment marks as measured are judged; others stay unknown. Co-authored-by: Yuan jiarui <118042747+1rubbishyuan@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--execution-mode returns with the values parallel and replanning (the former serial value is not accepted). Unset, a run uses IntegrationSpec.execution_mode, which is parallel unless an integration declares otherwise, so existing runs keep their scheduling. Both modes accept every --tool-return-mode and --resource-scheduling value. replanning (execution/replanning.py) keeps parallel scheduling and adds: - a world-mutating background call waits until the previous result on its resource has been read; - when an action that may have moved something does not complete, queued world-mutating work on that resource is cancelled before dispatch, each with a receipt, and new work is refused (replan_required); - work resumes once the failed result is read, the stop is confirmed and a replan_observation tool (capture_scene) returns a new snapshot. Unknown execution or an unconfirmed stop stays refused for the episode; finish (ends_episode) stays allowed. Nothing is retried or replayed. Tools report what an action did in ToolOutput.action (ActionOutcome), which is never sent to the model. Gripper tools fill it from motion feedback and the final receipt's execution_outcome and stop evidence; a simulation counts as stopped after a known result, an environment that declares physical_hardware only when its receipt confirms the stop. ParallelToolExecutor gains small extension points and is otherwise unchanged. For all modes, cancel_tool and flush_queue return a receipt for each cancelled job, and a refused call is recorded as a tool result. Co-authored-by: Yuan jiarui <118042747+1rubbishyuan@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An environment selects how the gripper tools move through its metadata motion_execution: - stepwise (default): the existing waypoint loop that checks tracking after every step. Environments that declare nothing are unchanged. - wholepath: move sends one PathCommand that the environment preflights and runs without intermediate stops; arrival is checked once and a truncated path reports reachable_prefix. grasp, release and hold keep every joint at its measured angle in one command lasting steps control periods. PathCommand is a typed protocol command (moving arms give a pose, held arms give joints) served by an optional backend step_path; a backend without it rejects the command. Tool schemas are the same in both modes; descriptions follow the mode. Co-authored-by: Yuan jiarui <118042747+1rubbishyuan@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A dual-arm ARX ONE (two ARX X5 arms, three RealSense D405 cameras) on the shared Direct tools, and a template for other real robots: - body/: the device process that owns the hardware. core/ and host/ are robot-independent; each device kind adds a driver and a host kit under drivers/ (fake/ is the smallest complete example). - environment/: one physical episode over the Body RPC: admission, control lease, whole-path commands, observations and tracking recovery. The robot's shape (arms, joints, cameras) comes from environment.json. - perception/: snapshots, RGB-D geometry, extrinsics and depth completion. - offline/: the site fleet, read-only capture and hand-eye calibration, used outside episodes; deploy/: configuration templates and launch scripts. The integration declares the replanning execution mode, finish statuses, measured opening checks and its motion profiles, and uses the wholepath motion mode when every Body arm serves a group path (environment.json can force wholepath or stepwise). Physical results are never retried by the episode. Values tuned for the X5 are marked robot-specific in the adapter. Every episode confirms the arms are idle and takes the control lease before it starts; there is no read-only episode mode. Read-only work uses the offline capture and calibration tools. Co-authored-by: Yuan jiarui <118042747+1rubbishyuan@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the arx_one extra and package data for the integration's native sources and templates, without local SDK copies or measured calibration. The release contents check accepts the native driver sources, and the installed-SDK check validates an arx_one run configuration alongside the other integrations. Co-authored-by: Yuan jiarui <118042747+1rubbishyuan@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds ARX ONE (two ARX X5 arms, three RealSense D405 cameras) as a real-robot integration, and is meant as a template for other robots. Real-robot behavior that is not specific to this robot goes into the shared layers as options. Simulation and real robots run the same tools and choose a mode:
--execution-mode):parallel(default, unchanged) orreplanning. Inreplanning, each world-mutating result is read before the next world-mutating call. A failed action cancels the queued plan, and new actions wait for a confirmed stop and a fresh observation.motion_execution):stepwise(default, unchanged) orwholepath. Inwholepath, amoveis one preflighted path, and gripper-only actions hold every joint at its measured angle forstepscontrol periods.finishstatuses, whole motion profiles, measured 0-1 gripper-opening checks, and stop confirmation from receipts.An environment that declares nothing keeps main's tool schemas, prompts and scheduling. The integration contains no model-facing tool code; it composes the shared
directtool profile.This supersedes #28, which ported an earlier version of this work. The commits are rebuilt on the current main as independent features.
Commits
feat(tools): environment-declared finish statuses, motion profiles and opening checks.finish_statuses,motion_profilesandnormalized_opening_tolerancein the environment metadata.feat(execution): thereplanningexecution mode besideparallel.ParallelToolExecutorgets small extension points.execution/replanning.pyadds the mode, andcreate_executor()selects it.--execution-modeandIntegrationSpec.execution_modechoose it.ToolOutput.action(ActionOutcome) reports what an action did; it is never serialized.physical_hardwarerequires receipts to confirm a stop.feat(tools): thewholepathmotion mode.PathCommand, an optional backendstep_path, preflighted paths withreachable_prefix, and joint holds for gripper-only actions.feat(arx): the ARX ONE integration. Body device process, environment adapter, perception, offline tools and deployment templates. It declaresreplanning. Every episode confirms the arms are idle and takes the control lease; there is no read-only episode mode, and read-only work uses the offline capture and calibration tools.build(arx): packaging.pyproject.tomlandMANIFEST.ininclude the native sources,release_contents.pyaccepts them, andsdk_release.pyvalidates thearx_oneconfig.Outside the integration (main code)
19 code files, plus packaging and docs. ✎ modified, + added.
--execution-mode, elseIntegrationSpec.execution_modeparallelmotion_executionstepwisefinish_statuses["success"]motion_profilesstandard/approach/precisiongripper_opening_models(metric) ornormalized_opening_tolerance(0-1)physical_hardware+ receiptdiagnostics.stop.status/execution_outcomeInside the integration (
uni_robot_agent/integrations/arx_one/, 172 files)Directories follow where and when code runs.
body/is the device process,environment/andperception/serve an episode, andoffline/runs outside episodes.body/coreandbody/host, and copydrivers/fake/for each device kind.environment.json.environment/adapter.py. The README section "Adapting to another robot" lists them.body/imports no agent-side code, and an episode never importsoffline/.prompt.py).Notes for review
--execution-modereturns withparallelandreplanningonly; the formerserialvalue is not accepted. It is separate from--tool-return-modeand--resource-scheduling, which still configure scheduling inside the parallel executor. An internal test that asserts the option is absent (test_runtime_init) needs updating.replanning.actor_actreports noActionOutcome, so a failedactor_actcounts as unknown execution with an unconfirmed stop: queued actions are cancelled and world-mutating tools stay refused for the rest of the episode, in simulation too. Only thehybridtool profile combined withreplanningis affected;directandparallelare not, and ARX ONE usesdirect. This needs a follow-up that fillsActionOutcomefrom the actor's execution summary.Validation
tests/, so the tests come from our internal suite. Commits 4 and 5 each pass 1064 ARX ONE, execution and gripper tests.scripts/validation/tool_composition.py: 8/8.scripts/validation/release_contents.pyaccepts the built sdist and wheel.