feat(hal): add Galaxea A1 real deployment path - #30
Merged
Conversation
Signed-off-by: PengYue <yp2841@nyu.edu>
Signed-off-by: PengYue <yp2841@nyu.edu>
Signed-off-by: PengYue <yp2841@nyu.edu>
Signed-off-by: PengYue <yp2841@nyu.edu>
Signed-off-by: PengYue <yp2841@nyu.edu>
Signed-off-by: PengYue <yp2841@nyu.edu>
pengyue-polaron
force-pushed
the
galaxea-a1-hal
branch
from
July 25, 2026 15:06
97ad411 to
a3327e6
Compare
Signed-off-by: PengYue <yp2841@nyu.edu>
Signed-off-by: PengYue <yp2841@nyu.edu>
pengyue-polaron
marked this pull request as ready for review
July 30, 2026 17:54
sim_bringup's unknown-scene error message does sorted(SCENES), but _Registry never implemented __iter__ — any unknown scene id crashed with "TypeError: '_Registry' object is not iterable" while formatting the typed ROSConfigError it was about to raise (masking the real diagnostic). The type-ignore at the call site claimed iterability that did not exist; both are fixed and the regression is pinned by a unit test. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Adrian Llopart <adrianllopart@gmail.com>
…tates through e-stop Review fixes on the Galaxea A1 deployment path: - The sidecar forwarded gripper setpoints to /gripper_position_control_host regardless of the LOCKED/ARMING/ACTIVE relay machine that gates arm joints. The gripper bypasses the tracker's staged-hold interpolation, so it now fails closed unless the relay is ACTIVE — matching the validated bring-up order (HIL streams the joint hold to ACTIVE before the first gripper setpoint). Covered for LOCKED, ARMING (including riding in a joint packet), and ACTIVE. - _publish_joint_state went dark for every HAL while the e-stop latch was set. Snapshot-backed (sim-attached) HALs now keep publishing the last post-step frame so operators retain joint visibility; only real HALs — whose transport may already be torn down — are skipped. - GalaxeaA1CameraBridgeReader.read_latest raised a bare RuntimeError for "reader closed" where the sibling session class raises ROSRuntimeError. - Docstrings: runnable Examples on the galaxea_a1 module and GalaxeaA1HAL (matching every sibling real-HW HAL), the estop() timeout comment now states the real 4 s bound (3 s SIGINT grace + 1 s SIGKILL wait), and _on_estop_cleared documents the per-HAL RESTART_REQUIRED / RESETTABLE recovery branching it implements. - deploy-sim of the real-only robot is pinned by a test: bare sim mode raises ROSCapabilityMismatch and the scene-attached path raises the typed unknown-scene ROSConfigError (not the TypeError fixed in the prior commit). Sidecar test fakes are hoisted to module scope and shared. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Adrian Llopart <adrianllopart@gmail.com>
AdrianLlopart
force-pushed
the
galaxea-a1-hal
branch
from
July 30, 2026 20:16
fd36643 to
2b34eca
Compare
Contributor
|
Ive made minor changes to the tests / docstrings and fixed a preexisting bug. Nothing should be have broken so please re-test with the HIL and if everything works correctly, feel free to merge |
Collaborator
Author
Thanks! I will merge it. |
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 adds a real-hardware Galaxea A1 HAL and the OpenRAL deployment path around
it. The HAL is policy-independent; the vendor ROS 1 SDK stays in an
operator-provided sidecar.
The LingBot-VA adapter is included as one concrete rSkill integration. OpenRAL
connects to versioned local camera and policy services provided by the A1
Runtime. It does not locate or import the Runtime checkout. Other rSkills can
use the same HAL without depending on the Runtime.
Hardware validation
Instruction:
put the lemon into the blue plateThe run completed a visible lemon pick-and-place on the real A1. The execution
path was:
ExecuteRskill -> rSkill -> safety kernel -> GalaxeaA1HAL -> ROS 1 sidecar -> official driver -> A1Design
galaxea_a1robot manifest and real-onlyGalaxeaA1HAL.checks.
policy gateway; no checkout lookup,
sys.pathmutation, or Runtime import.readers. Runtime remains the sole RealSense owner.
ordered joint envelope, while Runtime owns the exact model config, EEF
transforms, temporal-cache replay, and IK.
candidate-action, C++ safety-kernel, safe-action, and HAL path.
Validation
just lint: passed.42 passed, 1 skipped.just check:258 passed.command lease, jump rejection, deploy hold, and LingBot pick-and-place.
The skipped targeted test requires the optional GStreamer dependency.