···2233Unitree met à disposition du public un _SDK_#footnote[Kit de développement logiciel (Software Development Kit)] permettant de contrôler ses robots (dont le H1v2).
4455+== Canaux DDS
66+77+Pour communiquer avec le robot via le réseau, Unitree utilise CycloneDDS, une implémentation par Oracle du standard DDS#footnote[pour Data Distribution Service] @cyclonedds, une technologie de communication bidirectionnelle#footnote[dite "_pub-sub_" pour _publish_/_subscribe_ ] en temps réel, standardisée par l'Object Management Group, OMG @dds.
88+99+DDS fonctionne sur la base de _topics_. Les messages sont échangés sur un topic de la manière suivante
1010+1111+/ Lecture: En s'abonnant au topic, on reçoit en temps réel les messages qui sont envoyés dessus
1212+/ Écriture: En publiant des messages sur le topic, on les rend disponibles aux abonnés en
1313+1414+Les données contenues dans chacun des messages sont spécifiées via un autre format, IDL, également standardisé par l'OMG @omgidl.
1515+1616+Par exemple, les messages permettant de contrôler les moteurs du H1v2 sont définis ainsi
1717+1818+#figure(
1919+ caption: [`LowCmd.idl`, traduit depuis sa conversion en C++ @lowcmd_hpp],
2020+```c
2121+struct MotorCmd
2222+{
2323+ uint8 mode;
2424+ float q;
2525+ float dq;
2626+ float tau;
2727+ float kp;
2828+ float kd;
2929+ unsigned long reserve;
3030+};
3131+3232+struct Cmd
3333+{
3434+ uint8 mode_pr;
3535+ uint8 mode_machine;
3636+ MotorCmd motor_cmd[35];
3737+ unsigned long reserve[4];
3838+ unsigned long crc;
3939+};
4040+```
4141+)
4242+543== Une base de code partiellement open-source
644745Le code source du SDK d'unitree est disponible sur Github @sdk2_source_today. Cependant, le dépôt git comprend des fichiers binaires déjà compilés:
···113151114152Ces constats ont motivé une première tentative de décompilation de ces `libunitree_sdk2.a` pour comprendre le fonctionnement du SDK2, via _Ghidra_ @ghidra.
115153116116-Cependant, l'existance d'une implémentation existante d'un bridge SDK $arrow.lr$ Mujoco a rendu
117117-118118-== Canaux DDS bas niveau
154154+Cependant, l'existance d'une implémentation existante d'un bridge SDK $arrows.lr$ Mujoco a rendu cette piste non nécéssaire.
119155120156== Un autre bridge existant: `unitree_mujoco`
121157158158+159159+