this repo has no description
0
fork

Configure Feed

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

Continue rapport

+28 -16
+28 -16
rapport/sdk2-study.typ
··· 171 171 Le fonctionnement d'un bridge est au final assez similaire, quelque soit le simulateur pour lequel on l'écrit: il s'agit d'envoyer l'état du robot au simulateur, et de réagir quand le simulateur envoie des ordres de commandes. 172 172 173 173 #figure(caption: "Fonctionnement usuel du SDK", diagram({ 174 - node((0, 0), "Politique") 174 + node((0, 0), $cal(P)$) 175 175 node((1, 0), "SDK") 176 176 node((2, 0), "Robot") 177 + 178 + edge((0,0), (0, 0), "<-", bend: 130deg, loop-angle: 180deg)[] 179 + edge((2.25,0), (2.25, 0), "->", bend: -130deg, loop-angle: -180deg)[] 180 + 177 181 178 182 for i in range(0, 2) { 179 - edge((i, 0), (i+1, 0), "->", bend: 30deg)[ordres]; 180 - edge((i, 0), (i+1, 0), "<-", bend: -30deg)[état]; 183 + edge((i, 0), (i+1, 0), "->", shift: 3pt)[ordres] 184 + edge((i, 0), (i+1, 0), "<-", shift: -3pt, label-side: right)[état] 181 185 } 182 186 })) 183 187 188 + Un bridge se substitue au Robot physique, interceptant les ordres du SDK et les traduisants en des appels de fonctions utilisant l'API du simulateur, et symmétriquement pour les envois d'états au SDK. On peut apparenter le fonctionnement d'un bridge à celui d'une attaque informatique de type "Man in the Middle" (MitM). 189 + 184 190 185 191 #figure(caption: [Fonctionnement via _unitree\_mujoco_ du SDK], diagram({ 186 - node((0, 0), "Politique") 192 + node((0, 0), $cal(P)$) 187 193 node((1, 0), "SDK") 188 194 node((2, 0))[`unitree_mujoco`] 189 195 node((3, 0), "Mujoco") 196 + 197 + edge((0,0), (0, 0), "<-", bend: 130deg, loop-angle: 180deg)[] 198 + edge((3.25,0), (3.25, 0), "->", bend: -130deg, loop-angle: -180deg)[] 190 199 191 200 for i in range(0, 3) { 192 - edge((i, 0), (i+1, 0), "->", bend: 30deg)[ordres] 193 - edge((i, 0), (i+1, 0), "<-", bend: -30deg)[état] 201 + edge((i, 0), (i+1, 0), "->", shift: 3pt)[ordres] 202 + edge((i, 0), (i+1, 0), "<-", shift: -3pt, label-side: right)[état] 194 203 } 195 204 196 205 edge((0, 1), (2, 1), "|-|", label-side: right)[API du SDK] ··· 203 212 204 213 205 214 #figure(caption: [Fonctionnement via _gz-unitree_ du SDK], diagram({ 206 - node((0, 0), "Politique") 215 + node((0, 0), $cal(P)$) 207 216 node((1, 0), "SDK") 208 - node((2, 0))[*`gz-unitree`*] 209 - node((3, 0))[*Gazebo*] 217 + node((2, 0))[`gz-unitree`] 218 + node((3, 0), text(fill: blue)[Gazebo]) 210 219 211 - for i in range(0, 2) { 212 - edge((i, 0), (i+1, 0), "->", bend: 30deg)[ordres] 213 - edge((i, 0), (i+1, 0), "<-", bend: -30deg)[état] 214 - } 220 + edge((0,0), (0, 0), "<-", bend: 130deg, loop-angle: 180deg)[] 221 + edge((3.25,0), (3.25, 0), "->", bend: -130deg, loop-angle: -180deg, stroke: blue)[] 215 222 216 - edge((2, 0), (2+1, 0), "->", bend: 30deg, extrude: (-1, 0, 1))[*ordres*] 217 - edge((2, 0), (2+1, 0), "<-", bend: -30deg, extrude: (-1, 0, 1))[*état*] 223 + for i in range(0, 3) { 224 + let col = if i == 2 { blue } else { black } 225 + edge((i, 0), (i+1, 0), "->", shift: 3pt, stroke: col, text(fill: col)[ordres]) 226 + edge((i, 0), (i+1, 0), "<-", shift: -3pt, stroke: col, label-side: right, text(fill: col)[état]) 227 + } 218 228 219 229 edge((0, 1), (2, 1), "|-|", label-side: right)[API du SDK] 220 - edge((2, 1), (3, 1), "|-|", label-side: right)[*API de Gazebo*] 230 + edge((2, 1), (3, 1), "|-|", stroke: blue + 1.25pt, label-side: right, text(fill: blue)[API de Gazebo]) 221 231 })) 232 + 233 + Le bridge de Mujoco fonctionne en