diff --git a/README.md b/README.md index b8ddcfc..f7b0b50 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,14 @@ To re-deploy after an edit : ./deploy.sh ``` +## Hardware companion repo + +For the Kogger USBL hardware described in the page : + +- **Wrapper Python "transpondeur continu"** : `poulpe/kogger-transpondeur-continu` on Gitea — high-level wrapper around the upstream `cosma-tech/kogger_acousticAntenna` driver that puts a Kogger antenna in permanent slave-transponder mode in a single `start()` call. Composes address filter + echo filter + TDMA sync slot + permanent response window + Python callbacks for received pings. No modification of the upstream driver. +- **Driver upstream** : `cosma-tech/kogger_acousticAntenna` on GitHub (private). Active checkout on Pi 184 `cosma-auv2` at `/home/pi/dev/swarm-vehicle/src/drivers/kogger_acousticAntenna/`. Snapshot included read-only in the wrapper repo for reference. +- **Log decoder** (post-acquisition USBL frame parsing for analysis) : `floppyrj45/cosma-nav/extract/decode_kogger.py` on Gitea. + ## TODO / future work - [ ] Add a 3rd animation showing **2D positioning** — currently distance only is animated. AUVs equipped with USBL micro-arrays could also compute their bearing-to-USV; the page mentions this in passing but doesn't visualize it. diff --git a/index.html b/index.html index f51a49e..7f3e78f 100644 --- a/index.html +++ b/index.html @@ -252,7 +252,36 @@ B reçoit ping2 à T_B = 6.130 s Ce schéma est exactement celui qu'utilisent les puces UWB DecaWave DW1000 / DW3000 (Apple AirTag, Qorvo, etc.) sous le nom DS-TWR. La transposition acoustique change uniquement l'échelle : célérité 1500 m/s vs 3·10⁸ m/s, et turnaround mesuré en ms plutôt qu'en ns. La logique de calcul est identique.

- +

Implémentation Cosma — antenne Kogger

+

+Côté hardware, le contexte Cosma utilise des antennes acoustiques Kogger pilotées en SBP (sync 0xBB 0x55, Fletcher16). Le driver Python upstream (snapshot ici, source cosma-tech/kogger_acousticAntenna sur GitHub) expose toutes les primitives bas niveau du protocole décrit ci-dessus : set_usbl_request_address_filter (filtre par ID, identique à la sélection adressée animée plus haut), set_usbl_transponder(enable) (ouvre la fenêtre de réponse permanente), set_usbl_monitor_config (filtre d'écho), set_sync_mode (slot TDMA), set_usbl_ping_request_direct (côté master, envoi d'un ping ciblé). +

+

+Pour un AUV slave qui doit fonctionner en transpondeur permanent, un wrapper Python poulpe/kogger-transpondeur-continu compose ces appels en une seule init : +

+
+from transponder_continu import ContinuousTransponder, SyncSlot
+
+t = ContinuousTransponder(port="/dev/ttyUSB0", my_address=2,
+                          sync=SyncSlot(slot_total=4, slot_index=1, slot_duration=2.0),
+                          watchdog_timeout_s=15.0)
+t.on_ping_received(lambda msg: print(msg))
+t.start()
+t.run_forever()
+
+

+L'antenne devient un slave permanent sur l'adresse 2 : elle ignore les pings adressés ailleurs, répond automatiquement aux siens (turnaround géré par le hardware Kogger, donc déterministe), et émet une frame USBL_SOLUTION (0x65) à chaque réception. Côté master USV, le pendant est set_usbl_ping_request_direct(address=2, cmd_id=0). +

+ +

Sources

+ + +