feat(right_arm): force, camera↔polso offset, cluster filter sul centroide
Tre miglioramenti al move-toward dopo il primo uso live:
1. checkbox "force" accanto a "Muovi": bypassa max_step_m quando
l'utente sa che il delta richiesto e' grande ma corretto (es. primo
avvicinamento all'oggetto).
2. camera_offset_wrist_mm: il modello assumeva camera e TCP coincidenti
(sole sign flips). La camera Nuwa e' invece montata con traslazione
costante rispetto al polso. La formula diventa:
delta_wrist = sign * (centroid_cam - offset_cam) + t_wrist_cam
Esposto in config (default 0,0,0), GUI (3 input "Camera rispetto a
polso (mm)") e in /state. Il termine compensa il fatto che muovere
il polso porta la camera, non il TCP, sul punto di presa.
3. filter_nearest_cluster: il centroide era media di tutti i punti
SAM21 della mask. In presenza di sfondo lontano visibile attraverso
buchi della depth del primo piano la media veniva trascinata a
metri di distanza. Ora si tiene il cluster piu' vicino:
z_near = p5(Z)
keep = punti con Z <= z_near + cluster_depth_window_m
Default window 0.20 m, configurabile. La risposta di /detect/wrist
espone n_sam21_points, n_centroid_points e z_near/z_cutoff per
diagnosi.
Aggiornata anche la persistenza: /offset accetta camera_offset_wrist_mm.
GUI: i campi Offset/Sign/CamOff rispettano "user touched" (refresh non
li cancella mentre l'utente digita).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
fcd921ff32
commit
1fa7d12ad7
8 files changed
+260
-20
No files matched your search
@@ -400,9 +400,16 @@
|
||||
<label>Sign Y <input id="raSgnY" type="number" step="2" min="-1" max="1" value="-1" /></label>
|
||||
<label>Sign Z <input id="raSgnZ" type="number" step="2" min="-1" max="1" value="-1" /></label>
|
||||
</div>
|
||||
<div class="ra-row" title="Traslazione costante dall'origine polso all'origine camera, nel frame polso">
|
||||
<span class="ra-sep">Camera rispetto a polso (mm):</span>
|
||||
<label>X <input id="raCamOffX" type="number" step="1" value="0" /></label>
|
||||
<label>Y <input id="raCamOffY" type="number" step="1" value="0" /></label>
|
||||
<label>Z <input id="raCamOffZ" type="number" step="1" value="0" /></label>
|
||||
</div>
|
||||
<div class="ra-row">
|
||||
<button id="raSaveOffsetBtn" type="button">Salva offset</button>
|
||||
<label><input id="raMoveDryRun" type="checkbox" checked /> dry-run</label>
|
||||
<label title="Bypassa il limite max_step_m"><input id="raMoveForce" type="checkbox" /> force</label>
|
||||
<button id="raMoveBtn" type="button" class="ra-danger">Muovi verso pezzo</button>
|
||||
</div>
|
||||
<div id="raMoveResult" class="ra-result dim">— nessun move</div>
|
||||
|
||||
Reference in new issue
Block a user