this repo has no description
0
fork

Configure Feed

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

Format code

+108 -22
+3 -3
rapport/context.typ
··· 44 44 45 45 Cette technique est particulièrement adaptée au problèmes qui se prêtent à une modélisation type "jeu vidéo", dans le sens où l'agent représente le personnage-joueur, et le coût un certain score, qui est condition de victoire ou défaite. 46 46 47 - En robotique, une approche similaire explore l'espace d'action (en général un courant à envoyer aux moteurs) de façon à optimiser le coût. 47 + En robotique, une approche similaire explore l'espace d'action (en général un courant à envoyer aux moteurs) de façon à optimiser le coût. 48 48 49 49 En robotique, on a des correspondances claires pour ces quatres notions: 50 50 ··· 139 139 140 140 Expérimentalement, on sait que des tendances "tricheuses" émergent facilement pendant l'entraînement #refneeded: l'agent découvre des séries d'actions qui causent un bug avantageux vis à vis du coût associé, soit parce qu'il y a un bug dans le calcul de l'état de l'environnement post-action, soit parce que la fonction coût ne prend pas suffisemment bien en compte toutes les possibilités de l'environnement (autrement dit, il manque de contraintes). 141 141 142 - Dans le cas de la robotique, cela arrive particulièrement souvent, et il faut donc un simulateur qui soit suffisamment réaliste. 142 + Dans le cas de la robotique, cela arrive particulièrement souvent, et il faut donc un simulateur qui soit suffisamment réaliste. 143 143 144 144 ==== Sous-spécification de la fonction coût 145 145 ··· 529 529 530 530 $ 531 531 argmax_(Pi') & exp_((s, a) in cal(S)) L(s, a, Pi, Pi', R) \ 532 - "s.c." & top 532 + "s.c." & top 533 533 $ 534 534 535 535 ==== Avec pénalité _(PPO-Penalty)_
+105 -19
rapport/gz-unitree.typ
··· 235 235 )[SDK d'Unitree] 236 236 237 237 238 - node(name: <gzclock>, (1, 5), subtitled(`::TickHandler`, [topic Gazebo `/clock`])) 239 - node(name: <gzimu>, (2, 5), subtitled(`::IMUHandler`, [topic Gazebo `/imu`])) 238 + node(name: <gzclock>, (1, 5), subtitled( 239 + `::TickHandler`, 240 + [topic Gazebo `/clock`], 241 + )) 242 + node(name: <gzimu>, (2, 5), subtitled( 243 + `::IMUHandler`, 244 + [topic Gazebo `/imu`], 245 + )) 240 246 node(name: <lowstate>, (1, 2), `::LowStateWriter`) 241 247 node(name: <lowcmd>, (2, 2), `::CmdHandler`) 242 248 node(name: <statebuf>, (1, 3), subtitled("State buffer", `statebuf`)) 243 249 node(name: <cmdbuf>, (2, 3), subtitled("Commands buffer", `cmdbuf`)) 244 - group((<lowstate>, <lowcmd>, <statebuf>, <cmdbuf>, <gzclock>, <gzimu>))[Plugin internals] 250 + group(( 251 + <lowstate>, 252 + <lowcmd>, 253 + <statebuf>, 254 + <cmdbuf>, 255 + <gzclock>, 256 + <gzimu>, 257 + ))[Plugin internals] 245 258 246 259 node(name: <policy>, (0, -1), $Pi$) 247 260 ··· 275 288 edge(<publisher>, "<->", <lowstate>)[`std::bind`] 276 289 edge(<subscriber>, "<->", <lowcmd>)[`std::bind`] 277 290 edge(<configure>, "d,d,d,r", <gzclock>, "->", label-pos: 85%)[démarre] 278 - edge(<configure>, "d,d", (0, 3.75), "r,r", <gzimu>, "->", label-pos: 75%)[démarre] 291 + edge( 292 + <configure>, 293 + "d,d", 294 + (0, 3.75), 295 + "r,r", 296 + <gzimu>, 297 + "->", 298 + label-pos: 75%, 299 + )[démarre] 279 300 }) 280 301 281 302 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] ··· 551 572 [Etat de chaque moteur], 552 573 `gz::sim::Model(…)→joints`, 553 574 554 - ` .mode`, ${0, 1}$, [$0$ pour "Brake" et $1$ pour "FOC#footnote[Field-Oriented Control]", deux modes de contrôle pour le moteur électrique], [0], 575 + ` .mode`, 576 + ${0, 1}$, 577 + [$0$ pour "Brake" et $1$ pour "FOC#footnote[Field-Oriented Control]", deux modes de contrôle pour le moteur électrique], 578 + [0], 555 579 556 580 ` .q`, 557 581 $RR quad ("rad")$, ··· 586 610 587 611 #architecture([Phase d'envoi de l'état], { 588 612 edge(<preupdate>, "d", <statebuf.west>, "->", label-pos: 70%)[(1A): Joints] 589 - edge(<gz.west>, (-0.75, 1.5), (-0.75, 6), (2,6), <gzimu>, "@..>", label-pos: 25%)[(1D)] 590 - edge(<gz.east>, (0.5, 1.5), (0.5, 5), <gzclock.west>, "@..>", label-pos: 25%)[(1C)] 613 + edge( 614 + <gz.west>, 615 + (-0.75, 1.5), 616 + (-0.75, 6), 617 + (2, 6), 618 + <gzimu>, 619 + "@..>", 620 + label-pos: 25%, 621 + )[(1D)] 622 + edge( 623 + <gz.east>, 624 + (0.5, 1.5), 625 + (0.5, 5), 626 + <gzclock.west>, 627 + "@..>", 628 + label-pos: 25%, 629 + )[(1C)] 591 630 // edge(<gz>, "d,d,d,d,d,r", <gzclock>, "@..>", label-pos: 30%)[(1D)] 592 631 // edge(<gz>, "d,d,d,d,d,r,r", <gzimu>, "@..>", label-pos: 30%)[(1C)] 593 632 edge(<statebuf>, "@->", <lowstate>)[(1B)] 594 633 edge(<lowstate>, "->", <publisher>)[(2)] 595 634 edge(<publisher>, "->", (1, 0))[(3)] 596 635 edge(<policy>, (1, -1), (1, 0), "<--@", label-pos: 20%)[(4) subscription] 597 - edge(<gzclock>, "@->", <statebuf>, label-pos: 30%, label-side: right)[(2C): Tick] 598 - edge(<gzimu.west>, (1.5, 5), (1.5, 3), <statebuf.east>, "->", label-pos: 40%)[(2D): IMU] 636 + edge( 637 + <gzclock>, 638 + "@->", 639 + <statebuf>, 640 + label-pos: 30%, 641 + label-side: right, 642 + )[(2C): Tick] 643 + edge( 644 + <gzimu.west>, 645 + (1.5, 5), 646 + (1.5, 3), 647 + <statebuf.east>, 648 + "->", 649 + label-pos: 40%, 650 + )[(2D): IMU] 599 651 edge( 600 652 <policy>, 601 653 (1, -1), ··· 631 683 Un cycle correspond donc à cinq boucles indépendantes, représentées ci-après: 632 684 633 685 / Bleu: Simulation, qui doit englober l'entièreté d'un cycle 634 - / Rouge: `ChannelPublisher` 635 - / Rose: Politique $Pi$ 636 - / Vert: Mise à jour de l'IMU 637 - / Orange: Mise à jour du tick de simulation 686 + / Rouge: `ChannelPublisher` 687 + / Rose: Politique $Pi$ 688 + / Vert: Mise à jour de l'IMU 689 + / Orange: Mise à jour du tick de simulation 638 690 639 691 #architecture( 640 692 [Cycle complet. Un cycle commence avec la flèche "update" partant de `::PreUpdate`], ··· 692 744 policy-edge("update", <lowcmd>, "->", <cmdbuf>) 693 745 694 746 // imu loop 695 - imu-edge("update", <gzimu>, (1.5, 5), (1.5, 3), <statebuf>, "->", label-pos: 45%) 696 - for _ in range(2) { // XXX hack to increase thickness of dotted line 697 - imu-edge("", <gz.west>, (-0.75, 1.5), (-0.75, 6), (2,6), <gzimu>, "@..>", label-pos: 45%) 747 + imu-edge( 748 + "update", 749 + <gzimu>, 750 + (1.5, 5), 751 + (1.5, 3), 752 + <statebuf>, 753 + "->", 754 + label-pos: 45%, 755 + ) 756 + for _ in range(2) { 757 + // XXX hack to increase thickness of dotted line 758 + imu-edge( 759 + "", 760 + <gz.west>, 761 + (-0.75, 1.5), 762 + (-0.75, 6), 763 + (2, 6), 764 + <gzimu>, 765 + "@..>", 766 + label-pos: 45%, 767 + ) 698 768 } 699 769 700 770 // clock loop 701 - clock-edge("update", <gzclock>, <statebuf>, "->", label-pos: 25%, label-side: right) 702 - for _ in range(3) { // XXX hack to increase thickness of dotted line 703 - clock-edge("", <gz.east>, (0.5, 1.5), (0.5, 5), <gzclock.west>, "@..>", label-pos: 45%) 771 + clock-edge( 772 + "update", 773 + <gzclock>, 774 + <statebuf>, 775 + "->", 776 + label-pos: 25%, 777 + label-side: right, 778 + ) 779 + for _ in range(3) { 780 + // XXX hack to increase thickness of dotted line 781 + clock-edge( 782 + "", 783 + <gz.east>, 784 + (0.5, 1.5), 785 + (0.5, 5), 786 + <gzclock.west>, 787 + "@..>", 788 + label-pos: 45%, 789 + ) 704 790 } 705 791 }, 706 792 )