this repo has no description
0
fork

Configure Feed

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

Continue rapport

+34 -15
+1 -1
pages_count
··· 1 - 42 1 + 43
+33 -14
rapport/gz-unitree.typ
··· 183 183 edge-corner-radius: 6pt, 184 184 { 185 185 if show-legend { 186 - node((2, 4.5), stroke: none, width: 15em, legend( 186 + node((0, 5), stroke: none, width: 15em, legend( 187 187 ("--", "Message DDS"), 188 188 ("@->", "Désynchronisation"), 189 189 )) ··· 219 219 alignment: top + center, 220 220 ) 221 221 222 + 222 223 node( 223 224 name: <channelfactory>, 224 225 enclose: ((1, 0), (2, 0)), ··· 240 241 )[SDK d'Unitree] 241 242 242 243 244 + node(name: <gzclock>, (1, 5), subtitled(`::TickHandler`, [topic Gazebo `/clock`])) 245 + node(name: <gzimu>, (2, 5), subtitled(`::IMUHandler`, [topic Gazebo `/imu`])) 243 246 node(name: <lowstate>, (1, 2), `::LowStateWriter`) 244 247 node(name: <lowcmd>, (2, 2), `::CmdHandler`) 245 248 node(name: <statebuf>, (1, 3), subtitled("State buffer", `statebuf`)) 246 249 node(name: <cmdbuf>, (2, 3), subtitled("Commands buffer", `cmdbuf`)) 247 - group((<lowstate>, <lowcmd>, <statebuf>, <cmdbuf>))[Plugin internals] 250 + group((<lowstate>, <lowcmd>, <statebuf>, <cmdbuf>, <gzclock>, <gzimu>))[Plugin internals] 248 251 249 252 node(name: <policy>, (0, -1), $cal(P)$) 250 253 ··· 268 271 edge(<channelfactory>, "->", <subscriber>)[initialise] 269 272 edge(<publisher>, "<->", <lowstate>)[`std::bind`] 270 273 edge(<subscriber>, "<->", <lowcmd>)[`std::bind`] 274 + edge(<configure>, "d,d,d,r", <gzclock>, "->")[] 275 + edge(<configure>, "d,d,d,r,r", <gzimu>, "->", label-pos: 75%)[démarre] 271 276 }) 272 277 273 278 On commence par instancier un contrôleur dans le domaine DDS n°1, sur l'interface réseau `lo`#footnote[interface dite "loopback", qui est locale à l'ordinateur: ici, le simulateur et la politique de contrôle tournent sur la même machine, donc les messages DDS n'ont pas besoin de "sortir" de celle-ci] ··· 490 495 491 496 `version`, 492 497 $NN^2$, 493 - [Tuple représentant la version d'Unitree], 494 - [Expérimentalement], 498 + [_Non documenté_], 499 + [_Laissé vide_], 495 500 496 501 `mode_pr`, ${0, 1}$, [Défini sur 0 par défaut], [0], 497 502 ··· 499 504 500 505 `tick`, 501 506 $NN quad ("ms")$, 502 - [Non documenté, proablement le temps écoulé depuis le début de la simulation], 507 + [_Non documenté_, proablement le temps écoulé depuis le début de la simulation], 503 508 [Messages `gz::msgs::Clock` sur le topic Gazebo `/clock` ], 504 509 505 - `wireless_remote`, ${0, 1}^(40)$, [Non documenté], [_Laissé vide_], 510 + `wireless_remote`, ${0, 1}^(40)$, [_Non documenté_], [_Laissé vide_], 506 511 507 - `reserve`, $NN^4$, [Non documenté], [_Laissé vide_], 512 + `reserve`, $NN^4$, [_Non documenté_], [_Laissé vide_], 508 513 509 514 `crc`, 510 515 $NN$, ··· 516 521 `imu_state…`, 517 522 "struct.", 518 523 [Valeurs des capteurs intertiels du robot], 519 - [Messages `gz::msgs::IMU` sur le topic Gazebo `/imu`], 524 + [Messages `gz::msgs::IMU` sur le topic Gazebo `/imu` (nécéssite d'avoir un capteur IMU#footnote[Inertial Measurement Unit, appelée "Centrale intertielle" en français] sur le modèle], 520 525 521 526 ` .quaternion`, 522 527 $RR^4$, ··· 530 535 531 536 ` .gyroscope`, 532 537 $RR^3$, 533 - todo[], 534 - $"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))$, 538 + [Gyroscope], 539 + [ 540 + En utilisant les valeurs de `.orientation()`: \ 541 + $"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))$ 542 + ], 535 543 536 - ` .accelerometer`, $RR^3$, [Accélération selon les 3 axes], `.angular_velocity()`, 544 + ` .accelerometer`, $RR^3$, [Accéléromètre], `.angular_velocity()`, 537 545 538 546 `motor_state…`, 539 547 [$"struct."^(35)$], 540 548 [Etat de chaque moteur], 541 549 `gz::sim::Model(…)→joints`, 542 550 543 - ` .mode`, ${0, 1}$, [$0$ pour "Brake" et $1$ pour "FOC" #todo[]], [0], 551 + ` .mode`, ${0, 1}$, [$0$ pour "Brake" et $1$ pour "FOC#footnote[Field-Oriented Control]", deux modes de contrôle pour le moteur électrique], [0], 544 552 545 553 ` .q`, 546 554 $RR quad ("rad")$, ··· 559 567 560 568 ` .tau_est`, 561 569 $RR quad ("N" dot "m")$, 562 - [Estimation de la torque #todo[]], 570 + [Estimation de la torque exercée par le moteur], 563 571 [_Laissé vide_], 564 572 ) 565 573 ··· 574 582 #let transparent = luma(0).opacify(0%) 575 583 576 584 #architecture([Phase d'envoi de l'état], { 577 - edge(<preupdate>, "d,d,r", <statebuf>, "->")[(1A)] 585 + // #todo[Fix wonky starting segment of arrow because of shift] 586 + edge(<preupdate>, "d,d,r", <statebuf>, "->", shift: -5pt)[(1A)] 578 587 edge(<statebuf>, "@->", <lowstate>)[(1B)] 579 588 edge(<lowstate>, "->", <publisher>)[(2)] 580 589 edge(<publisher>, "->", (1, 0))[(3)] 581 590 edge(<policy>, (1, -1), (1, 0), "<--", label-pos: 20%)[(4) subscription] 591 + edge(<gzclock>, "->", <statebuf>, label-pos: 30%)[(1C)] 592 + edge(<gzimu>, "u,l", <statebuf>, "->", shift: 5pt)[(1D)] 582 593 edge( 583 594 <policy>, 584 595 (1, -1), ··· 627 638 ) 628 639 let sim-edge = (label, ..args) => colored-edge(blue, label, ..args) 629 640 let publisher-edge = (label, ..args) => colored-edge(red, label, ..args) 641 + let imu-edge = (label, ..args) => colored-edge(fuchsia, label, ..args) 642 + let clock-edge = (label, ..args) => colored-edge(orange, label, ..args) 630 643 let policy-edge = (label, ..args) => colored-edge( 631 644 olive.darken(30%), 632 645 label, ··· 673 686 policy-edge("", <channelfactory.east>, (2, 0), <subscriber>, "->") 674 687 policy-edge("", <subscriber>, "-", <lowcmd>) 675 688 policy-edge("update", <lowcmd>, "->", <cmdbuf>) 689 + 690 + // imu loop 691 + imu-edge("update", <gzimu>, (2, 4.5), (1, 4.5), <statebuf>, "@->", shift: 5pt) 692 + 693 + // clock loop 694 + clock-edge("update", <gzclock>, <statebuf>, "@->", shift: 5pt, label-pos: 25%) 676 695 }, 677 696 ) 678 697