Files
flywms/aggiornamento-2026-05-16-11-12.md
2026-05-19 08:52:44 +02:00

133 lines
3.2 KiB
Markdown

# Aggiornamento 2026-05-16 11:12
## Obiettivo
Completare la prima implementazione reale client-server tra `flywms_navigation.py` e un server WMS demo.
## Implementazione
### Client navigazione
In `flywms_navigation.py` sono stati aggiunti:
- `WmsSnapshotJob`;
- `WmsResult`;
- `WmsAsyncClient`;
- creazione multipart HTTP senza base64;
- worker thread con coda non bloccante;
- invio del crop etichetta e, se configurato, del frame/debug gaylord;
- attesa di risposta WMS dopo il ritorno simulato al centro gaylord;
- gestione `ACK`, `NACK`, `ERROR`, `TIMEOUT`.
Il loop video non esegue direttamente la POST: accoda il job e il worker invia in background.
### Server WMS demo
Aggiunto `flywms_wms_server.py` basato su FastAPI.
Endpoint:
```text
POST /api/v1/navigation-snapshot
GET /health
```
Payload multipart:
- `metadata`: JSON;
- `label_image`: JPEG crop etichetta;
- `gaylord_image`: JPEG opzionale/debug.
Il server salva ogni richiesta in:
```text
wms_received/
```
oppure nella directory passata con `--received-dir`.
Modalita risposta:
- `always-ack`;
- `always-nack`;
- `alternate`;
- `random`.
### Configurazione
Parametri aggiunti in `flywms_navigation.ini`:
```ini
wms_enabled = false
wms_server_url = http://127.0.0.1:8088/api/v1/navigation-snapshot
wms_client_id = flywms-demo-01
wms_timeout_sec = 2.0
wms_queue_max_size = 8
wms_send_gaylord_debug = true
wms_server_host = 0.0.0.0
wms_server_port = 8088
wms_received_dir = wms_received
wms_fake_ack_mode = always-ack
wms_fake_processing_sec = 0.5
```
Aggiornato `.gitignore`:
```text
wms_received*/
```
## Test end-to-end
Server avviato in job PowerShell locale su:
```text
http://127.0.0.1:8088
```
Health check:
```json
{"status":"ok"}
```
Client headless con snapshot forzato:
```powershell
python flywms_navigation.py --no-display --max-frames 6 --snapshot-line-tolerance-ratio 0.20 --snapshot-output-dir navigate_snapshots_test --preview-fps 0 --yolo-fps 0 --label-move-sec 0 --label-stabilization-sec 0 --label-return-sec 0 --remote-ack-timeout-sec 5 --wms-enabled --wms-server-url http://127.0.0.1:8088/api/v1/navigation-snapshot
```
Risultato client:
```text
[WMS] job accodato request_id=77cba060-1433-43f3-a387-3811e6734907 snapshot=1
[WMS] risposta request_id=77cba060-1433-43f3-a387-3811e6734907 status=ACK message=codice valido su WMS
[WMS] ACK request_id=77cba060-1433-43f3-a387-3811e6734907 snapshot=1 codice valido su WMS
[CMD] RIPARTI_DESTRA
```
Risultati salvati dal server:
```text
wms_received_test/000001_77cba060-1433-43f3-a387-3811e6734907/metadata.json
wms_received_test/000001_77cba060-1433-43f3-a387-3811e6734907/snapshot_0001_track_002_frame.jpg
wms_received_test/000001_77cba060-1433-43f3-a387-3811e6734907/snapshot_0001_track_002_label_payload.jpg
```
Metadati ricevuti includono:
- `request_id`;
- `client_id`;
- `snapshot_id`;
- `simulated_position`;
- `track_id`;
- `gaylord_bbox`;
- `label_bbox`;
- `movement_vector_px`.
## Note
- La sequenza fisica simulata resta: movimento verso etichetta, stabilizzazione, scatto, ritorno al gaylord.
- L'invio WMS parte dopo lo scatto etichetta e puo' procedere mentre viene simulato il ritorno.
- La ripartenza viene comandata solo dopo risposta WMS o timeout.