3.2 KiB
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.