docs: link to Kogger hardware companion repo

Add a 'Implémentation Cosma — antenne Kogger' section to the page that ties the
abstract protocol (DS-TWR / SS-TWR / addressed) shown in the animations to the
concrete hardware driver used in the Cosma project (cosma-tech/kogger_acoustic
Antenna), and to the new wrapper poulpe/kogger-transpondeur-continu that turns
a Kogger antenna into a permanent slave transponder in a single start() call.

Add a 'Sources' section listing all four related repos (this page, wrapper,
upstream driver location, log decoder).

Update README similarly with a 'Hardware companion repo' section so the
ping-pong-ping repo no longer reads as standalone — it's the protocol
explainer, kogger-transpondeur-continu is the hardware glue.

Reported by Flag 2026-04-27 ('as-tu mis un lien...').
This commit is contained in:
2026-04-27 22:13:38 +00:00
parent ab7140968a
commit a22f060268
2 changed files with 38 additions and 1 deletions

View File

@@ -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.

View File

@@ -252,7 +252,36 @@ B reçoit ping2 à T_B = 6.130 s
Ce schéma est exactement celui qu'utilisent les puces UWB <b>DecaWave DW1000 / DW3000</b> (Apple AirTag, Qorvo, etc.) sous le nom <b>DS-TWR</b>. La transposition acoustique change uniquement l'échelle&nbsp;: célérité 1500&nbsp;m/s vs 3·10⁸&nbsp;m/s, et turnaround mesuré en ms plutôt qu'en ns. La logique de calcul est identique.
</p>
<footer>Poulpe 🐙 — pour Flag — 2026-04-27</footer>
<h2>Implémentation Cosma — antenne Kogger</h2>
<p>
Côté hardware, le contexte Cosma utilise des antennes acoustiques <b>Kogger</b> pilotées en SBP (sync <code>0xBB 0x55</code>, Fletcher16). Le driver Python upstream (<a href="https://gitea.nowyouknow.fr/poulpe/kogger-transpondeur-continu/src/branch/main/driver" style="color:var(--accent)">snapshot ici</a>, source <code>cosma-tech/kogger_acousticAntenna</code> sur GitHub) expose toutes les primitives bas niveau du protocole décrit ci-dessus&nbsp;: <code>set_usbl_request_address_filter</code> (filtre par ID, identique à la sélection adressée animée plus haut), <code>set_usbl_transponder(enable)</code> (ouvre la fenêtre de réponse permanente), <code>set_usbl_monitor_config</code> (filtre d'écho), <code>set_sync_mode</code> (slot TDMA), <code>set_usbl_ping_request_direct</code> (côté master, envoi d'un ping ciblé).
</p>
<p>
Pour un AUV slave qui doit fonctionner en transpondeur permanent, un wrapper Python <a href="https://gitea.nowyouknow.fr/poulpe/kogger-transpondeur-continu" style="color:var(--accent)"><code>poulpe/kogger-transpondeur-continu</code></a> compose ces appels en une seule init&nbsp;:
</p>
<pre>
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()
</pre>
<p>
L'antenne devient un slave permanent sur l'adresse 2&nbsp;: 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 <code>set_usbl_ping_request_direct(address=2, cmd_id=0)</code>.
</p>
<h2>Sources</h2>
<ul class="tight">
<li>Code de cette page : <a href="https://gitea.nowyouknow.fr/poulpe/ping-pong-ping" style="color:var(--accent)">poulpe/ping-pong-ping</a> (Gitea)</li>
<li>Wrapper Kogger transpondeur continu : <a href="https://gitea.nowyouknow.fr/poulpe/kogger-transpondeur-continu" style="color:var(--accent)">poulpe/kogger-transpondeur-continu</a> (Gitea)</li>
<li>Driver Kogger upstream : <code>cosma-tech/kogger_acousticAntenna</code> (GitHub privé), snapshot read-only dans le repo wrapper ci-dessus</li>
<li>Decoder USBL Kogger pour analyse de logs : <a href="http://192.168.0.82:3000/floppyrj45/cosma-nav/src/branch/main/extract/decode_kogger.py" style="color:var(--accent)">cosma-nav/extract/decode_kogger.py</a> (Gitea)</li>
</ul>
<footer>Poulpe 🐙 — pour Flag — 2026-04-27 — design conversation Discord <code>#ping-pong-ping</code></footer>
</main>
<script>