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

3.2 KiB

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:

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:

wms_received/

oppure nella directory passata con --received-dir.

Modalita risposta:

  • always-ack;
  • always-nack;
  • alternate;
  • random.

Configurazione

Parametri aggiunti in flywms_navigation.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:

wms_received*/

Test end-to-end

Server avviato in job PowerShell locale su:

http://127.0.0.1:8088

Health check:

{"status":"ok"}

Client headless con snapshot forzato:

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:

[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:

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.