this repo has no description
0
fork

Configure Feed

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

Continue rapport

+221 -22
+1 -2
rapport/gz-unitree.typ
··· 53 53 54 54 Voici une trace wireshark d'un échange usuel entre commandes (`rt/lowcmd`) et états (`rt/lowstate`) 55 55 56 - #let img = image("./wireshark-trace.png") 57 56 // https://forum.typst.app/t/how-to-blend-a-color-with-an-image-and-make-the-image-transparent/1677/5 58 57 #let overlayed-img = (contents, img) => layout(bounds => { 59 58 let size = measure(img, ..bounds) ··· 63 62 64 63 #figure( 65 64 caption: [Trace de paquets RTPS sur _Wireshark_], 66 - overlayed-img([ 65 + overlayed-img(image("./wireshark-trace.png"))[ 67 66 #diagram(spacing: (4.54pt, 2.75pt), { 68 67 node((0, 0))[] 69 68 let annotations-x = 80
slides/main.pdf

This is a binary file and will not be displayed.

+220 -20
slides/main.typ
··· 1 1 #import "../rapport/utils.typ": dontbreak, todo 2 2 #import "../rapport/context.typ": argmax, cL, definitions_paths_set, exp 3 - #import "../rapport/gz-unitree.typ": overlayed-img 3 + #import "../rapport/gz-unitree.typ": overlayed-img, zebraw 4 4 #import "@preview/touying:0.6.1": * 5 5 #import themes.simple: * 6 6 ··· 243 243 #super[1]Software Development Kit 244 244 ] 245 245 246 - == DDS 247 246 248 - #overlayed-img[ 249 - #diagram(spacing: (4.54pt, 2.75pt), { 250 - node((0, 0))[] 251 - let annotations-x = 80 252 - let annotate = (y-start, y-end, label) => edge( 253 - (annotations-x, y-start), 254 - "|-|", 255 - (annotations-x, y-end), 256 - label-fill: white, 257 - label-side: left, 258 - label, 259 - ) 260 - 261 - annotate(3, 20)[Attente] 262 - annotate(20, 60)[Initialisation] 263 - annotate(60, 100)[Échange `rt/` \ `lowstate` $arrows.lr$ `lowcmd`] 264 - }) 265 - ] 266 247 267 248 == Le SDK d'Unitree 268 249 ··· 337 318 == Développement de _gz-unitree_ 338 319 Un bridge pour Gazebo 339 320 ] 321 + 322 + #centered[ 323 + #diagram({ 324 + node((0, 0), $Pi$) 325 + node((1, 0), "SDK") 326 + node((2, 0))[*gz-unitree*] 327 + node((3, 0), "Gazebo") 328 + 329 + edge((0, 0), (0, 0), "<-", bend: 130deg, loop-angle: 180deg)[] 330 + edge((3.25, 0), (3.25, 0), "->", bend: -130deg, loop-angle: -180deg)[] 331 + 332 + for i in range(0, 3) { 333 + let dash = if i == 1 { "--" } else { "-" } 334 + edge((i, 0), (i + 1, 0), dash + ">", shift: 7pt)[ordres] 335 + edge((i, 0), (i + 1, 0), "<" + dash, shift: -7pt, label-side: right)[état] 336 + } 337 + 338 + edge((0, 1), (2, 1), "|-|", label-side: right)[API du SDK] 339 + edge((2, 1), (3, 1), "|-|", label-side: right)[API de Gazebo] 340 + }) 341 + ] 342 + 343 + #pagebreak() 344 + 345 + #centered(scale(75%, reflow: true, ```cpp 346 + #include <gz/sim/System.hh> 347 + namespace gz_unitree 348 + { 349 + class UnitreePlugin : 350 + public gz::sim::System, 351 + public gz::sim::ISystemPreUpdate 352 + { 353 + public: 354 + UnitreePlugin(); 355 + public: 356 + ~UnitreePlugin() override; 357 + public: 358 + void PreUpdate(const gz::sim::UpdateInfo &_info, 359 + gz::sim::EntityComponentManager &ecm) override; 360 + }; 361 + } 362 + ```)) 363 + 364 + #pagebreak() 365 + 366 + #centered(scale(75%, reflow: true, grid( 367 + columns: 2, 368 + gutter: 2em, 369 + ```cpp 370 + #include <gz/plugin/Register.hh> 371 + 372 + ... // class implementation 373 + 374 + GZ_ADD_PLUGIN( 375 + UnitreePlugin, 376 + gz::sim::System, 377 + UnitreePlugin::ISystemPreUpdate) 378 + ```, 379 + 380 + zebraw( 381 + numbering: false, 382 + highlight-lines: (..range(3, 5),), 383 + ```xml 384 + <sdf version='1.11'> 385 + <world name="default"> 386 + <plugin filename="gz-unitree" name="gz_unitree::UnitreePlugin"> 387 + </plugin> 388 + </world> 389 + <model name='h1_description'> 390 + <link name='pelvis'> 391 + <inertial> 392 + ... 393 + ```, 394 + ), 395 + ))) 396 + 397 + #pagebreak() 398 + 399 + 400 + #let legend = ( 401 + ..descriptions, 402 + ) => grid( 403 + columns: (1fr, 3fr), 404 + align: left, 405 + row-gutter: 0.5em, 406 + ..descriptions 407 + .pos() 408 + .map(((arrow, desc)) => ( 409 + diagram(edge((0, 0), arrow, (0.75, 0))), 410 + desc, 411 + )) 412 + .flatten() 413 + ) 414 + 415 + #let architecture = ( 416 + caption, 417 + group-inset: 12pt, 418 + group-color: luma(80), 419 + show-legend: true, 420 + ..edges, 421 + ) => { 422 + let group = ( 423 + nodes, 424 + label, 425 + alignment: bottom + center, 426 + name: none, 427 + ) => node( 428 + name: name, 429 + enclose: nodes, 430 + snap: if name == none { false } else { 1 }, 431 + inset: group-inset, 432 + stroke: group-color.lighten(75%) + 2pt, 433 + align(alignment, move( 434 + dy: 3.5 * group-inset * if alignment.y == bottom { 1 } else { -1 }, 435 + text(fill: group-color, label), 436 + )), 437 + ) 438 + 439 + let subtitled = (title, subtitle) => [#title \ #text( 440 + size: 0.8em, 441 + subtitle, 442 + )] 443 + 444 + diagram( 445 + debug: false, 446 + node-stroke: 0.5pt, 447 + edge-corner-radius: 6pt, 448 + ( 449 + node(name: <configure>, (0, 1), `::Configure`), 450 + node(name: <preupdate>, (0, 2), `::PreUpdate`), 451 + group( 452 + name: <gz>, 453 + (<configure>, <preupdate>), 454 + `gz::sim::System`, 455 + alignment: top + center, 456 + ), 457 + node( 458 + name: <channelfactory>, 459 + enclose: ((1, 0), (2, 0)), 460 + inset: 8pt, 461 + subtitled(`ChannelFactory`, [domaine 1, interface `lo`]), 462 + ), 463 + node(name: <publisher>, (1, 1), inset: 8pt, subtitled( 464 + `ChannelPublisher`, 465 + [canal `rt/lowstate`], 466 + )), 467 + node(name: <subscriber>, (2, 1), inset: 8pt, subtitled( 468 + `ChannelSubscriber`, 469 + [canal `rt/lowcmd`], 470 + )), 471 + group( 472 + name: <dds>, 473 + (<channelfactory>, <publisher>, <subscriber>), 474 + alignment: top + center, 475 + )[Unitree SDK], 476 + node(name: <gzclock>, (1, 5), subtitled( 477 + `::TickHandler`, 478 + [topic Gazebo `/clock`], 479 + )), 480 + node(name: <gzimu>, (2, 5), subtitled( 481 + `::IMUHandler`, 482 + [topic Gazebo `/imu`], 483 + )), 484 + node(name: <lowstate>, (1, 2), `::LowStateWriter`), 485 + node(name: <lowcmd>, (2, 2), `::CmdHandler`), 486 + node(name: <statebuf>, (1, 3), subtitled("State buffer", `statebuf`)), 487 + node(name: <cmdbuf>, (2, 3), subtitled("Commands buffer", `cmdbuf`)), 488 + group( 489 + ( 490 + <lowstate>, 491 + <lowcmd>, 492 + <statebuf>, 493 + <cmdbuf>, 494 + <gzclock>, 495 + <gzimu>, 496 + ), 497 + [Plugin internals], 498 + ), 499 + node(name: <policy>, (0, -1), $Pi$), 500 + ..edges.pos(), 501 + if show-legend { 502 + node((0, 5), stroke: none, width: 15em, fill: white, legend( 503 + ("-->", "Message DDS"), 504 + ("..>", "Message Gazebo"), 505 + ("@->", "Désynchronisation"), 506 + )) 507 + }, 508 + ), 509 + ) 510 + } 511 + 512 + #centered-slide(scale(56%, reflow: true, architecture([Phase d'initialisation du plugin], show-legend: false, ( 513 + edge( 514 + <configure>, 515 + "u", 516 + <channelfactory>, 517 + "->", 518 + label-side: left, 519 + label-pos: 50%, 520 + )[appelle], 521 + pause, 522 + edge(<configure>, "d,d,d,r", <gzclock>, "->", label-pos: 85%)[démarre], 523 + edge( 524 + 525 + <configure>, 526 + "d,d", 527 + (0, 3.75), 528 + "r,r", 529 + <gzimu>, 530 + "->", 531 + label-pos: 75%, 532 + )[démarre], 533 + pause, 534 + edge(<channelfactory>, "->", <publisher>)[initialise], 535 + edge(<channelfactory>, "->", <subscriber>)[initialise], 536 + pause, 537 + edge(<publisher>, "<->", <lowstate>)[`std::bind`], 538 + edge(<subscriber>, "<->", <lowcmd>)[`std::bind`], 539 + ))))