···11+#import "./utils.typ": todo
12#import "@preview/fletcher:0.5.8": diagram, node, edge
2334#show figure: set block(spacing: 3em)
···230231 edge((2, 1), (3, 1), "|-|", stroke: blue + 1.25pt, label-side: right, text(fill: blue)[*API de Gazebo*])
231232}))
232233233233-Le bridge de Mujoco fonctionne en
234234+Le bridge de Mujoco fonctionne en interceptant les messages sur les canaux `rt/lowcmd` et `rt/lowstate`, qui correspondent respectivement aux commandes envoyées au robot et à l'état (angles des joints, moteurs, valeurs des capteurs, etc) renvoyé par le robot. Le `low` indique que ce sont des messages bas-niveau: par exemple, `rt/lowcmd` correspond directement à des ordres de tension pour les moteurs, et non pas à des messages plus avancés du type "avancer de $x$ mètres" #todo[ces messages plus haut-niveau = sport mode non? dire quand ils servent]
235235+236236+Les ordres dans `rt/lowcmd` sont ensuite traduits en appels de fonctions de Mujoco pour mettre à jour l'état du robot simulé, et de messages `rt/lowstate` sont créés à partir des données fournies par Mujoco
237237+238238+#figure(caption: [Cycle de vie de la simulation avec le bridge], diagram({
239239+ node(name: <sdk>, (0, 0))[SDK]
240240+ node(enclose: ((1, 1), (-1, 1)), stroke: blue, inset: 10pt, snap: false, text(fill: blue)[Canaux \ DDS])
241241+ node(name: <lowcmd>, (1, 1))[`rt/lowcmd`]
242242+ node(name: <lowstate>, (-1, 1) )[`rt/lowstate`]
243243+ node(name: <bridge>, enclose: ((1, 2), (-1, 2)), stroke: black, inset: 10pt)[Bridge]
244244+ node(name: <mujoco>, (0, 3))[Mujoco]
245245+246246+247247+ edge(<sdk>, <lowcmd>, "->", bend: 30deg)[pub]
248248+ edge(<lowcmd>, (1, 2), "..>", bend: 20deg)[sub]
249249+ edge((1, 2), <mujoco>, "->", bend: 20deg, todo[])
250250+251251+ edge(<sdk>, <lowstate>, "<..", bend: -30deg)[sub]
252252+ edge(<lowstate>, (-1, 2), "<-", bend: -20deg)[pub]
253253+ edge((-1, 2), <mujoco>, "<-", bend: -20deg, todo[])
254254+}))