133 lines
3.2 KiB
Markdown
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.
|