This repository was archived by the owner on Aug 21, 2026. It is now read-only.
feat(lumi-final): update calibration and recordings for lumi_final - #174
Open
kyle-aus wants to merge 17 commits into
Open
feat(lumi-final): update calibration and recordings for lumi_final#174kyle-aus wants to merge 17 commits into
kyle-aus wants to merge 17 commits into
Conversation
…chanics - Replace follower/leader calibration JSONs with lumi_final servo values (homing offsets and range min/max from /home/orangepi/.cache) - Scale wrist_pitch in 7 recordings by 0.461 to fit lumi_final narrower physical range (55.8 degrees vs 113 degrees on original hardware) - Update calibration.md: document per-device cache paths and deploy commands for orangepi-user devices
…int limits AIM_WALL wrist_pitch -60 -> -55.78 deg AIM_DOWN elbow_pitch 90 -> 70.4 deg, wrist_pitch -90 -> -55.78 deg servo.py rest_pos elbow_pitch 90 -> 70.4 deg
New follower limits from fresh calibration: wrist_pitch +-47.82 deg (was +-55.78) base_pitch +-61.93 deg (was +-98.8) elbow_pitch +-62.90 deg (was +-70.4) - Re-scale wrist_pitch in 7 recordings from originals (scale 0.3956) - Clamp AIM_DOWN base_pitch -90->-61.93, elbow_pitch 70.4->62.9 - Clamp AIM_WALL/AIM_DOWN wrist_pitch to +-47.82 - Clamp rest_pos base_pitch and elbow_pitch to new limits
After release, torque is disabled and the arm falls to a physical position that differs from the last known _current_state. Without syncing hardware state, the first interpolation step snaps the arm to the stale rest_pos. Also doubles the interpolation duration (10s vs 5s) on resume so the arm eases back into idle at half speed as requested.
…ondition The previous attempt set _interpolation_frames=300 (2x duration) but the progress formula kept dividing by self.duration*fps=150, causing progress to be negative (clamped to 0) for the first 150 frames. Result: arm froze for 5 seconds then moved at full speed — perceived as a huge jump. Fix: store _interpolation_total_frames alongside _interpolation_frames so the denominator always matches the intended total, regardless of duration. Also reorder resume_servos to sync hardware state and queue the play event before starting the event thread, eliminating the race where _continue_playback could overwrite _current_state before _handle_play reads it.
…_final Previous values (-61.93 / 62.9) caused a visible drop when torque was cut because the arm hadn't settled to its gravity floor. New values (-75.88 / 62.4) match the actual resting position so there is no movement on release.
…tion range lerobot clips commanded positions to range_min/max, which prevented base_pitch, elbow_pitch, and wrist_pitch from reaching the natural gravity-rest position. Add AnimationService.move_to_unclamped() that computes raw encoder targets from the calibration mid-point and writes Goal_Position directly via scservo_sdk, bypassing the software clamp while still using the same degree→raw formula. Update release rest_pos to the measured gravity-rest position of lumi_final (base_pitch=-75.26, elbow_pitch=-65.02, wrist_pitch=-79.83) and switch release_servos() to use move_to_unclamped.
…uted encoder targets move_to_unclamped accessed robot.bus.calibration which may not exist in the installed lerobot version, causing a silent exception and immediate torque cut. move_to_raw takes pre-computed raw encoder values (motor_name -> int) and uses direct STS3215 Goal_Position writes (reg 42) without any bus.calibration access. release_servos now passes hard-coded raw targets computed from the calibration JSON.
…before idle After release, servo/resume now: 1. Re-enables torque via _configure_servos_raw 2. Moves all joints to RESUME_STARTUP_RAW over 5s (blocking) 3. Then enters idle animation with normal interpolation RESUME_STARTUP_RAW: base_yaw=2109 (5.96°), base_pitch=2105 (-18.20°), elbow_pitch=2233 (-11.68°), wrist_roll=2070 (0°), wrist_pitch=1809 (-68.48°). wrist_pitch exceeds calibrated range so move_to_raw is used for direct writes. Also updates start() to use move_to_raw with RESUME_STARTUP_RAW instead of the old 2-joint STARTUP_POSITION, giving all servos a defined boot position.
Zero now moves to the measured resting position after release rather than
all-joints-0. Uses move_to_raw (bypasses calibration clamp) since
wrist_pitch (-59.18deg, raw 1914) exceeds calibrated range_min=2044.
Also adds _configure_servos_raw before the move to ensure torque is on.
ZERO_RAW: base_yaw=2100, base_pitch=2091, elbow_pitch=2276,
wrist_roll=2070, wrist_pitch=1914
Matches physical rest position observed on lumi_final hardware.
…on before torque cut - resume_servos: always stop and join the event loop before calling move_to_raw to prevent concurrent bus writes from the animation thread thrashing the STS3215 serial bus - release_servos: poll PRESENT_POSITION for up to 3s after move_to_raw to confirm all joints physically reached rest_raw before disabling torque — prevents uncontrolled drop when a joint lags under load
leo-super-dev
added a commit
to autonomous-ai/autonomous-os
that referenced
this pull request
Jun 10, 2026
leo-super-dev
added a commit
to autonomous-ai/autonomous-os
that referenced
this pull request
Jun 10, 2026
leo-super-dev
added a commit
to autonomous-ai/autonomous-os
that referenced
this pull request
Jun 10, 2026
leo-super-dev
added a commit
to autonomous-ai/autonomous-os
that referenced
this pull request
Jun 10, 2026
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
update mechanics