···11111212Une première tentative a été de suivre la documentation de CycloneDDS pour écouter sur le canal @cyclonedds-helloworld `rt/lowcmd`, en récupérant les définitions IDL des messages, disponibles sur le dépot `unitree_ros2`#footnote[`unitree_mujoco` n'avait pas encore été découvert] @unitree_ros2
13131414-Malheureusement, cette solution s'est avérée infructueuse, à cause de (ce qui sera compris bien plus tard) un problème de numéro de domaine DDS.
1414+Malheureusement, cette solution s'est avérée infructueuse, à cause d'une inadéquation sur les domaines DDS (ce qui sera compris plus tard).
15151616On change d'approche en préférant plutôt utiliser les abstractions fournies par le SDK de Unitree (cf @receive-lowcmd et @send-lowstate)
1717···2222sudo ufw allow in proto udp to 224.0.0.0/4
2323```
24242525-Pour arriver à ces solutions, du débuggage du traffic RTPS (le protocole sur lequel est construit DDS @dds) s'est avéré utile.
2525+#dontbreak(grid(
2626+ columns: (1.5fr, 1fr),
2727+ gutter: 2em,
2828+ [
2929+3030+Pour arriver à ces solutions, du débuggage du traffic RTPS (le protocole sur lequel est construit DDS @dds), _Wireshark_ @wireshark s'est avéré utile.
3131+3232+3333+ C'est notamment grâce à ce traçage des paquets que le problème d'ID de domaine a été découvert: notre _subscriber_ DDS était réglé sur le domaine anonyme (ID 0) alors que le SDK d'Unitree communique sur le domaine d'ID 1.
3434+3535+ C'est aussi Wireshark qui nous a permis de voir quels étaient les types IDL utilisés pour les messages.
3636+ ],
3737+ figure(caption: [_Wireshark_ permet de visualiser des méta-données sur les paquets RTPS],
3838+ stack(
3939+ spacing: 1em,
4040+ image("./wireshark-wrong-domain.png"),
4141+ image("./wireshark-message-type.png"),
4242+ ))
4343+))
26442727-_Wireshark_ @wireshark supporte le décodage de paquets RTPS
4545+Voici une trace wireshark d'un échange usuel entre commandes (`rt/lowcmd`) et états (`rt/lowstate`)
28462947#let img = image("./wireshark-trace.png")
3048// https://forum.typst.app/t/how-to-blend-a-color-with-an-image-and-make-the-image-transparent/1677/5
···3755#figure(
3856 caption: [Trace de paquets RTPS sur _Wireshark_],
3957 overlayed-img[
4040- #diagram({
4141- set math.equation(numbering: none)
4242- import "@preview/fletcher:0.5.8": shapes
4343- node(enclose: ((5, 2), (5, 5)), shape: shapes.bracket.with(dir: right))[Initialisation]
5858+ #diagram(spacing: (4.54pt, 2.58pt), {
5959+ node((0, 0))[]
6060+ let annotations-x = 80
6161+ let annotate = (y-start, y-end, label) => edge((annotations-x, y-start), "|-|", (annotations-x, y-end), label-fill: white, label-side: left, label)
6262+6363+ annotate(3, 20)[Attente]
6464+ annotate(20, 60)[Initialisation]
6565+ annotate(60, 100)[Échange `rt/` \ `lowstate` $arrows.lr$ `lowcmd`]
4466 })
4567 ]
4668)
6969+477048714972== Installation du plugin dans Gazebo