this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Continue rapport

+99 -33
+7
bib.yaml
··· 1111 1111 value: https://github.com/Gepetto/h1v2-Isaac 1112 1112 date: '2025-06-02' 1113 1113 1114 + gzu-cmakelists: 1115 + type: web 1116 + title: gz-unitree/CMakeLists.txt at main · Gepetto/gz-unitree · GitHub 1117 + url: 1118 + date: '2025-11-05' 1119 + value: https://github.com/Gepetto/gz-unitree/blob/main/CMakeLists.txt 1120 +
+1 -1
pages_count
··· 1 - 49 1 + 50
+7 -7
rapport/nix.typ
··· 186 186 187 187 == Packaging Nix pour _gz-unitree_ 188 188 189 - Le packaging pour Nix de _gz-unitree_ lui-même n'est pas très complexe: il s'agit d'un projet C++ / CMake standard. 189 + Le packaging pour Nix de _gz-unitree_ lui-même n'est pas très complexe: il s'agit d'un projet C++ / CMake standard @gzu-cmakelists. 190 190 191 - Cependant, _gz-unitree_ a deux principales dépendances 191 + Cependant, _gz-unitree_ a deux dépendances principales: 192 192 193 193 - Gazebo lui-même, à travers `gz-sim`, `gz-sensors`, `gz-common`, `gz-plugin`, `gz-cmake`, etc. 194 - - Le SDK2 d'Unitree 194 + - Le SDK d'Unitree, `unitree_sdk2` 195 195 196 - En ce qui concerne le SDK2 d'Unitree, une déclaration de paquet Nix a pu être écrite sans trop de soucis, la bibliothèque étant également un projet C++ standard: 196 + En ce qui concerne le SDK d'Unitree, un paquet Nix a pu être écrit sans trop de soucis, la bibliothèque étant également un projet C++ standard: 197 197 198 198 ```nix 199 199 { ··· 231 231 232 232 Par contre, en ce qui concerne Gazebo, la situation est plus complexe: étant un simulateur système, le projet est bien plus conséquent, et donc plus dur à packager. 233 233 234 - Il existe plusieurs tentaives de packaging de Gazebo pour Nix: 234 + Il existe plusieurs tentatives de packaging de Gazebo pour Nix: 235 235 236 236 - Un _overlay_ ROS (Robot Operating System), qui inclut notamment Gazebo @nixros 237 - - Un package pour nixpkgs (registry officielle de Nix) @nixgz @nixgz2 @nixgz3 237 + - Un package pour _Nixpkgs_ @nixgz @nixgz2 @nixgz3 238 238 - Un outil de génération de paquets Nix à partir de paquets ROS ou Gazebo, développé par Guilhem Saurel au sein de l'équipe Gepetto, _gazebros2nix_ @gazebros2nix 239 239 240 240 Au début du développement de _gz-unitree_, des essais d'utilisation des paquets Nix pour le développement et la compilation ont été réalisés, mais des erreurs subsistaient, en particulier avec Gazebo. 241 - 241 + Des efforts supplémentaires sont nécéssaires pour empaqueter _gz-unitree_. 242 242
+84 -25
rapport/sdk2-study.typ
··· 11 11 - 6 dans chaque jambe (3 à la hanche, 2 au talon et un au genou), 12 12 - 7 dans chaque bras (3 à l'épaule, 3 au poignet et un au coude) @h1v2 13 13 14 - Unitree met à disposition du public un _SDK_#footnote[Kit de développement logiciel (Software Development Kit)] permettant de le contrôler. 14 + Unitree met à disposition du public un _SDK_#footnote[Kit de développement logiciel (Software Development Kit)] permettant de le contrôler, `unitree_sdk2` @unitree_sdk2 15 15 16 16 == Canaux DDS 17 17 18 - 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. Les messages sont envoyées sur le réseau via UDP et IP. 18 + 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. DDS est 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. Les messages sont envoyés sur le réseau via UDP et IP. 19 19 20 20 Les données contenues dans chacun des messages sont spécifiées via un autre format, IDL, également standardisé par l'OMG @omgidl. 21 21 22 - L'intérêt d'un format indépendant du langage de programmation est que l'on peut générer du code décrivant ces données pour plusieurs langages, ce que fait Unitree en distribuant du code C++ et Python. 22 + L'intérêt d'un format indépendant du langage de programmation est que l'on peut générer du code décrivant ces données dans plusieurs langages de programmation, ce que fait Unitree en distribuant un SDK en C++ et en Python. 23 23 24 24 Par exemple, les messages permettant de contrôler les moteurs du H1v2 sont définis ainsi 25 25 26 26 #figure( 27 - caption: [`LowCmd.idl`, traduit depuis sa conversion en C++ @lowcmd_hpp], 28 - ```c 29 - struct MotorCmd 30 - { 31 - uint8 mode; 32 - float q; 33 - float dq; 34 - float tau; 35 - float kp; 36 - float kd; 37 - unsigned long reserve; 38 - }; 27 + caption: [`LowCmd.idl`, traduit depuis sa conversion en C++ @lowcmd_hpp], 28 + ```c 29 + struct MotorCmd 30 + { 31 + uint8 mode; 32 + float q; 33 + float dq; 34 + float tau; 35 + float kp; 36 + float kd; 37 + unsigned long reserve; 38 + }; 39 + 40 + struct Cmd 41 + { 42 + uint8 mode_pr; 43 + uint8 mode_machine; 44 + MotorCmd motor_cmd[35]; 45 + unsigned long reserve[4]; 46 + unsigned long crc; 47 + }; 48 + ```) 49 + 50 + 51 + #grid( 52 + columns: 2, 53 + ```python 54 + @dataclass 55 + @annotate.final 56 + @annotate.autoid("sequential") 57 + class MotorCmd_(idl.IdlStruct, typename="MotorCmd"): 58 + mode: types.uint8 59 + q: types.float32 60 + dq: types.float32 61 + tau: types.float32 62 + kp: types.float32 63 + kd: types.float32 64 + reserve: types.uint32 65 + 66 + @dataclass 67 + @annotate.final 68 + @annotate.autoid("sequential") 69 + class LowCmd_(idl.IdlStruct, typename="Cmd"): 70 + mode_pr: types.uint8 71 + mode_machine: types.uint8 72 + motor_cmd: types.array['MotorCmd_', 35] 73 + reserve: types.array[types.uint32, 4] 74 + crc: types.uint32 75 + 76 + ```, 77 + ```cpp 78 + class LowCmd_ 79 + { 80 + private: 81 + uint8_t mode_pr_ = 0; 82 + uint8_t mode_machine_ = 0; 83 + std::array<::MotorCmd_, 35> motor_cmd_ = { }; 84 + std::array<uint32_t, 4> reserve_ = { }; 85 + uint32_t crc_ = 0; 39 86 40 - struct Cmd 41 - { 42 - uint8 mode_pr; 43 - uint8 mode_machine; 44 - MotorCmd motor_cmd[35]; 45 - unsigned long reserve[4]; 46 - unsigned long crc; 47 - }; 48 - ```, 49 - ) 87 + public: 88 + LowCmd_() = default; 89 + 90 + explicit LowCmd_( 91 + uint8_t mode_pr, 92 + uint8_t mode_machine, 93 + const std::array<::MotorCmd_, 35>& motor_cmd, 94 + const std::array<uint32_t, 4>& reserve, 95 + uint32_t crc) : 96 + mode_pr_(mode_pr), 97 + mode_machine_(mode_machine), 98 + motor_cmd_(motor_cmd), 99 + reserve_(reserve), 100 + crc_(crc) { } 101 + 102 + uint8_t mode_pr() const { return this->mode_pr_; } 103 + uint8_t& mode_pr() { return this->mode_pr_; } 104 + void mode_pr(uint8_t _val_) { this->mode_pr_ = _val_; } 105 + uint8_t mode_machine() const { return this->mode_machine_; } 106 + ``` 107 + ) 108 + )) 50 109 51 110 DDS groupe les mesages dans des _topics_. Les messages sont échangés sur un topic de la manière suivante 52 111