feat(pose_3d): tag locator save, front-tag overlay, sidebar tabs, cloud params persist

- Sidebar a 3 tab verticali (POSE / CAMERAS / MISC) per ridurre lo scroll
- Tag locator: POST /api/pose_3d/tag_offset/{save,} salva crocetta nel
  viewport con snapshot giunti, current.json + archive rotation
- Front-camera tag overlay (MISC):
  - GET /api/pose_3d/front_tags scansiona ArUco sul D435i e per ogni tag
    misura i 4 corner 3D via depth sensor (indipendente da solvePnP);
    outlier rejection ±20% dalla mediana per ignorare corner che catturano
    background sul bordo del marker
  - Rendering quad cyan + label compatta (id, edge_mm, distanza camera)
    agganciato al d435_link, segue la camera anche in modalita' hand-eye
  - Trigger via pollState() quando il flag e' on, niente timer separato
- Cloud cross-camera: memorizza step/max_depth/sizes/scale_xy/flip/handeye
  in pose_3d.cloud_params al click di Acquisisci, ripopola UI da config
  al primo poll (state.cloud_params_populated guard)
- D435i front cloud: applica nuwa_to_cv_frame (il servizio ritorna native,
  non OpenCV come si pensava)
- Cache-bust per pose_3d.js e pose_3d.css

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
AdrianoandClaude Opus 4.7 committed 2026-06-01 16:53:26 +02:00
1 parent ae8e609b7e
commit fb0e9b9112
6 files changed
+816 -20

No files matched your search

+32 -15
View File
@@ -82,6 +82,8 @@ tab_right_arm:
- 0
pose_3d:
live_max_step_m: 0.15
tag_offset:
save_dir: /home/harry/robot/logging/wrist-tag-offset
right_wrist_camera:
enabled: true
mesh_url: /static/assets/nuwa/nuwa-hp60c.stl
@@ -107,25 +109,25 @@ pose_3d:
d435:
offset_m:
- -0.01
- 0
- 0
- 0.015
- -0.005
rpy_deg:
- -90
- 86
- 90
- 0
transform_pelvis_4x4:
- - -0.011344227963137242
- -0.9974094742471121
- -0.07103273311663486
- 0.007340882385689307
- - -0.5556320632728338
- 0.06534842452974676
- -0.8288561960163252
- 0.3109738415126284
- - 0.8313508998943191
- 0.03006533042523672
- -0.5549340115286931
- 0.2869260834772309
- - 0.03273746934835532
- -0.9960477706629303
- -0.0825657111522212
- -0.00771413467718246
- - -0.7734929889294071
- 0.027067579810660346
- -0.633226612043623
- 0.37547513731967447
- - 0.6329588092267278
- 0.08459423550455474
- -0.7695498431821574
- 0.33337005199505626
- - 0.0
- 0.0
- 0.0
@@ -142,6 +144,21 @@ pose_3d:
- -0.047703617194205114
- -0.005110044879619669
- 0.9988341941293186
cloud_params:
step: 2
max_depth_mm: 1000
nuwa_size_mm: 5
d435_size_mm: 5
d435_scale_xy: 1
flip_nuwa:
- false
- false
- false
flip_d435:
- false
- false
- false
d435_use_handeye: false
grasp:
approach_offset_m: 0.1
pre_grasp_clearance_m: 0.05