this repo has no description
0
fork

Configure Feed

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

Continue rapport

+25 -13
+25 -13
rapport/gz-unitree.typ
··· 1 1 #import "@preview/zebraw:0.5.5" 2 2 #import "@preview/fletcher:0.5.8": diagram, node, edge 3 3 #import "@preview/cetz:0.4.2" 4 - #import "./utils.typ": dontbreak, todo 4 + #import "./utils.typ": dontbreak, todo, refneeded 5 5 #show figure: set block(spacing: 2em) 6 6 #let zebraw = (..args) => zebraw.zebraw(lang: false, background-color: luma(255).opacify(0%), ..args) 7 7 ··· 415 415 416 416 == `rt/lowstate` 417 417 418 + #todo[Parler de IMUHandler et TickHandler !! (topics gz)] 419 + 418 420 === Construction d'un message `rt/lowstate` 419 421 420 422 La documentation d'Unitree liste l'ensemble des champs disponibles dans un message `rt/lowstate`, c'est-à-dire l'ensemble des données que l'on doit récupérer afin de construire nos messages d'état @h1-rt-lowstate: 421 423 422 424 #table( 423 - columns: (1.5fr, 0.5fr, 3fr, 2fr), 425 + // columns: (1.5fr, 0.5fr, 3fr, 2fr), 426 + columns: 4, 424 427 stroke: none, 425 428 inset: 8pt, 426 429 427 430 "Champ", "Type", "Description", "Où récupérer la valeur", 428 431 table.hline(), 429 432 430 - `version`, $NN^2$, [Tuple représentation la version d'Unitree], [], 431 - `mode_pr`, ${0, 1}$, [Défini sur 0 par défaut], [], 432 - `mode_machine`, ${4, 6}$, [Défini sur 6 par défaut], [], 433 - `tick`, $NN$, [Non documenté], [], 434 - `wireless_remote`, ${0, 1}^(40)$, [Non documenté], [], 435 - `reserve`, $NN^4$, [Non documenté], [], 436 - `crc`, $NN$, [Somme de contrôle du message, utilisant _CRC32_. Une implémentation ad-hoc existe dans le code source de `unitree_sdk2` et de `unitree_mujoco` #todo[Mettre en annexe ?]], [Copié-collé de l'implémentation d'Unitree], 437 - `imu_state`, `IMUState`, [Valeurs des capteurs intertiels du robot], 438 - `imu_state.quaternion`, $RR^4$, [Posture dans l'espace du robot, dans l'ordre $(w, x, y, z)$], 439 - `imu_state.rpy`, $RR^3$, [Angle d'Euler du robot, dans l'ordre $(r, p, y)$], 440 - `imu_state.gyroscope`, $$ 433 + `version`, $NN^2$, [Tuple représentant la version d'Unitree], [Expérimentalement], 434 + `mode_pr`, ${0, 1}$, [Défini sur 0 par défaut], [0], 435 + `mode_machine`, ${4, 6}$, [Défini sur 6 par défaut], [6], 436 + `tick`, $NN quad ("ms")$, [Non documenté, proablement le temps écoulé depuis le début de la simulation], [Messages `gz::msgs::Clock` sur le topic Gazebo `/clock` ], 437 + `wireless_remote`, ${0, 1}^(40)$, [Non documenté], [_Laissé vide_], 438 + `reserve`, $NN^4$, [Non documenté], [_Laissé vide_], 439 + `crc`, $NN$, [Somme de contrôle du message, utilisant _CRC32_. ], [Implémentation de CRC32 par Unitree #footnote[ 440 + Une implémentation ad-hoc existe dans le code source de `unitree_sdk2` et de `unitree_mujoco` #todo[Mettre en annexe ?] #refneeded 441 + ]], 442 + `imu_state…`, "struct.", [Valeurs des capteurs intertiels du robot], [Messages `gz::msgs::IMU` sur le topic Gazebo `/imu`], 443 + ` .quaternion`, $RR^4$, [Posture dans l'espace du robot, dans l'ordre $(w, x, y, z)$], [$w$, $x$, $y$ et $z$ sur `.orientation()`], 444 + ` .rpy`, $RR^3$, [Angle d'Euler du robot, dans l'ordre $(r, p, y)$], `.linear_acceleration()`, 445 + ` .gyroscope`, $RR^3$, todo[], $"atan"_2(2(w x + y z), 1 - 2 (x^2 + y^2) )) \ "asin"(2 (w y - z x)) \ "atan"_2(2(w z + x y), 1 - 2(y^2 + z^2))$, 446 + ` .accelerometer`, $RR^3$, todo[], `.angular_velocity()`, 447 + `motor_state…`, [$"struct."^(35)$], [Etat de chaque moteur], `gz::sim::Model(…)→joints`, 448 + ` .mode`, ${0, 1}$, [$0$ pour "Brake" et $1$ pour "FOC" #todo[]], [0], 449 + ` .q`, $RR quad ("rad")$, [Angle en radians de rotation du moteur], `.Position()`, 450 + ` .dq`, $RR quad ("rad" dot "s"^(-1))$, [Angle de rotation du moteur], `.Velocity()`, 451 + ` .ddq`, $RR quad ("rad" dot "s"^(-2))$, [Angle de rotation du moteur], [_Laissé vide_], 452 + ` .tau_est`, $RR quad ("N" dot "m")$, [Estimation de la torque #todo[]], [_Laissé vide_], 441 453 ) 442 454 443 455