refactor: cleanup GUI + AI movement controls + depth-correction polish

GUI:
- Rimossa tab "Calibrazione" (sostituita dalla calibrazione via AI con saved
  task `calibrazione_dx`/`calibrazione_sx`, oppure dalla tab "Auto-
  Calibrazione" per il flusso a griglia automatica). Backend
  calibration_routes invariato — tool AI continuano a usarlo.

AI tools:
- Esposto `precise` su `move_wrist_absolute` e `move_wrist_relative`
  (forwarded al campo omonimo del bridge robot, controlla la modalità di
  controllo: false=veloce/tolleranza ampia, true=lento/posa accurata).
- Aggiunto `arms_go_neutral` come tool dedicato (POST /arms/go_neutral del
  bridge): usato dall'AI per "torna a casa / posizione di riposo". Niente
  side, agisce su entrambe le braccia.
- Fix `device_status`: ora wrappa la risposta con `_ok(...)` così il
  dispatcher la classifica correttamente.

Prompt:
- System prompt aggiornato: l'AI ora passa SEMPRE `precise=true` di default
  sui movimenti, escluso quando l'utente chiede esplicitamente velocità.
  Sezione dedicata su come tornare a riposo (arms_go_neutral).
- Documentato che `measured_side_mm` (ritornato da get_marker_3d) viene
  distorto dalla correzione affine sul depth — non usarlo per validare la
  size_mm dichiarata.

Saved tasks:
- `calibrazione_dx` e `calibrazione_sx` ora partono e finiscono con
  `arms_go_neutral`, cancellano i sample preesistenti per quel lato, e
  acquisiscono ≥10 sample con `precise=true` su una griglia ±80mm + ±15° di
  rotazione attorno alla posa home.

Config:
- Marker corrente: id=10, size=40mm (cambiato il tag fisico sul polso).
- Addendum prompt allentato: niente più "max 3 righe", ora chiede di
  riportare il risultato di OGNI tool chiamato.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal PastroandClaude Opus 4.7 committed 2026-05-06 17:05:52 +02:00
1 parent ac573505b7
commit f6197488f9
6 files changed
+80 -344

No files matched your search

-71
View File
@@ -13,7 +13,6 @@
<button class="tab active" data-tab="home">Home</button>
<button class="tab" data-tab="agent">Assistente AI</button>
<button class="tab" data-tab="ai-settings">Impostazioni AI</button>
<button class="tab" data-tab="calibration">Calibrazione</button>
<button class="tab" data-tab="autocal">Auto-Calibrazione</button>
<button class="tab" data-tab="grasp">TrovaUtensile</button>
<button class="tab" data-tab="servo">Servo Visuale</button>
@@ -176,76 +175,6 @@
</div>
</section>
<!-- ============================== CALIBRAZIONE ============================== -->
<section class="panel" id="tab-calibration">
<div class="grid-2">
<div>
<h2>Vista camera</h2>
<div class="canvas-wrap">
<canvas id="calibCanvas" width="640" height="480"></canvas>
</div>
<div class="kv">
<label>ArUco ID <input type="number" id="arucoId" value="10" min="0" /></label>
<label>Size (mm) <input type="number" id="arucoSize" value="40" step="1" /></label>
<label>Side
<select id="side"><option value="right" selected>right</option><option value="left">left</option></select>
</label>
<label>Metodo
<select id="method">
<option value="TSAI" selected>TSAI</option>
<option value="PARK">PARK</option>
<option value="HORAUD">HORAUD</option>
<option value="ANDREFF">ANDREFF</option>
<option value="DANIILIDIS">DANIILIDIS</option>
</select>
</label>
<label class="inline"><input type="checkbox" id="livePreview" checked /> Preview marker</label>
<button id="saveConfigBtn">Salva configurazione</button>
</div>
<div class="marker-info" id="markerInfo">marker: —</div>
</div>
<div>
<h2>Sample e matrice</h2>
<div class="actions">
<button id="sampleBtn" class="primary">Memorizza posizione (sample)</button>
<button id="solveBtn" class="primary">Calcola matrice</button>
<button id="clearSamplesBtn" class="danger">Rimuovi tutti i sample</button>
</div>
<div class="samples">
<div class="samples-head">
<strong>Sample acquisiti</strong>
<span id="sampleCount">0</span>
</div>
<ul id="sampleList"></ul>
</div>
<div class="result">
<strong>T<sub>base ← camera</sub></strong>
<pre id="calibMatrix">(non ancora calcolata)</pre>
<div id="calibMeta"></div>
</div>
</div>
</div>
<details class="auto-grid">
<summary>Auto-grid (future update) — 3×3 × 3 altezze</summary>
<div class="kv">
<label>Start X (m) <input type="number" id="gridX0" value="0.25" step="0.01" /></label>
<label>Start Y (m) <input type="number" id="gridY0" value="0.0" step="0.01" /></label>
<label>Start Z (m) <input type="number" id="gridZ0" value="0.15" step="0.01" /></label>
<label>Step X (m) <input type="number" id="gridDX" value="0.05" step="0.005" /></label>
<label>Step Y (m) <input type="number" id="gridDY" value="0.05" step="0.005" /></label>
<label>Step Z (m) <input type="number" id="gridDZ" value="0.05" step="0.005" /></label>
<label>min Z tavolo (m) <input type="number" id="gridMinZ" value="0.10" step="0.005" /></label>
<label>Settle (s) <input type="number" id="gridSettle" value="1.0" step="0.1" /></label>
<label>Quat xyzw <input type="text" id="gridQuat" value="0,0,0,1" /></label>
<label class="inline"><input type="checkbox" id="gridDryRun" checked /> Dry-run (consigliato finché G1 down)</label>
<button id="runGridBtn">Esegui auto-grid</button>
</div>
<pre id="gridLog" class="log"></pre>
</details>
</section>
<!-- ============================== AUTO-CALIBRAZIONE ============================== -->
<section class="panel" id="tab-autocal">
<div class="diag3d-toolbar">
<button id="acFitBtn">Auto-fit</button>