Zum Inhalt springen

Laufen mit Beinen ​

Wie ein vierbeiniger Roboter in Bewegung aufrecht bleibt: Gaits und ihr Timing, das Stützpolygon, statische und dynamische Stabilität sowie die Fußplatzierungsregel, die der Trot-Generator von Strido verwendet.

In Strido

Der skriptbasierte Gait ist TrotGait in packages/strido-core/src/strido/gait.py, gemeinsam genutzt von MuJoCo, Gazebo und dem realen Roboter (über ros2/strido_control/strido_control/gait_node.py). Die gelernte Policy (packages/strido-sim/) erhält einen Takt mit derselben Periode von 0.4s (GAIT_PERIOD_S in packages/strido-core/src/strido/policy.py). Die praktische Anwendung steht in Kinematik und Gaits.

Gaits als Timing-Muster ​

Ein Gait ist ein periodisches Muster von Fußkontakten. Jedes Bein i durchläuft einen Zyklus der Periode T und wird durch eine Phase ϕi∈[0,1) beschrieben:

ϕi(t)=(tT+δi)mod1

wobei δi der Phasenversatz dieses Beins ist. Das Bein ist in der Standphase (Fuß am Boden, schiebend), solange ϕi<β, andernfalls in der Schwungphase (Fuß in der Luft, zurückkehrend). Der Tastgrad (Duty Factor) β ist der Anteil des Zyklus in der Standphase:

β=TstanceT,Tstance=βT,Tswing=(1−β)T

Gaits unterscheiden sich nur in β und den Versätzen δi:

GaitTastgrad βVersätze (FL, FR, RL, RR)Füße am Boden
Schritt (Kriechgang)≥0.750,12,34,14immer ≥3
Trot≈0.50,12,12,02 (ein diagonales Paar)
Passgang≈0.50,12,0,122 (ein seitliches Paar)
Sprunggang≈0.50,0,12,122 (vorderes oder hinteres Paar)

Mit β≥0.75 ist immer nur ein Bein in der Luft, daher kann der Schritt statisch stabil sein. Mit β=0.5 sind immer zwei Beine in der Luft; der Trot beruht auf dynamischer Stabilität: Eingefroren würde der Körper kippen, doch jedes Paar landet, bevor er weit fällt.

Schwerpunkt und Stützpolygon ​

Der Schwerpunkt (CoM) von Körpern mit Massen mk an Positionen pk ist

pCoM=∑kmkpk∑kmk

Das Stützpolygon ist die konvexe Hülle der auf den Boden projizierten Kontaktpunkte. Ein stillstehender Roboter (oder einer, der sich so langsam bewegt, dass die Trägheit vernachlässigbar ist) ist statisch stabil, wenn die Bodenprojektion des CoM innerhalb dieses Polygons liegt: Die Schwerkraft erzeugt dann um keine Polygonkante ein resultierendes Kippmoment.

Die statische Stabilitätsreserve ist der kürzeste Abstand vom projizierten CoM zum Rand des Polygons:

S=mine∈edgesd(pCoMxy,e)

S>0 bedeutet stabil; ein größeres S toleriert stärkere Stöße und Modellierungsfehler. Im Trot entartet das Stütz-„Polygon“ zur Strecke zwischen den beiden Standfüßen, daher ist fast immer S≤0: Statische Stabilität ist unmöglich, und der Gait muss dynamisch sein.

Über die Statik hinaus: ZMP und Capture Point ​

Beschleunigt der Körper, kommen Trägheitskräfte zur Schwerkraft hinzu. Der Zero-Moment-Point (ZMP) ist der Punkt am Boden, an dem die horizontalen Momente aus Schwerkraft und Trägheit verschwinden. Für eine Punktmasse in Höhe h mit horizontaler Beschleunigung x¨ (das Modell des linearen inversen Pendels, konstante Höhe):

pZMP=xCoM−hgx¨CoM

Die Kontaktkräfte können nur drücken, daher muss der ZMP innerhalb des Stützpolygons bleiben; verlangt die Planung einen ZMP außerhalb, rollt oder hebt ein Fuß ab und der Roboter kippt. ZMP-Planung ist das klassische Werkzeug für gehende Humanoide.

Dasselbe Pendel liefert den Capture Point (instantaner Capture Point, divergente Bewegungskomponente). Seine Dynamik x¨=ω2(x−p) mit ω=g/h hat einen instabilen Modus, und der Punkt

ξ=xCoM+x˙CoMω

ist die Stelle, an der ein Fuß aufgesetzt werden muss, damit der Körper darüber zur Ruhe kommt. Intuition: Je schneller man sich bewegt, desto weiter vorne muss man auftreten, um anzuhalten.

Rechenbeispiel. Die Standard-Körperhöhe von Strido ist h=0.17m (Hüftachse über den Füßen, GaitConfig.body_height). Dann

ω=9.810.17≈7.6s−1,1ω≈0.13s

Beim maximalen Vorwärtsbefehl v=0.30m/s liegt der Capture Point etwa 0.30×0.13≈0.04m vor dem CoM. Die Zeitkonstante des Pendels (0.13s) ist vergleichbar mit der Standzeit (0.2s, siehe unten), weshalb der Gait weiter Schritte machen muss: Ein eingefrorener Trot würde binnen Sekundenbruchteilen kippen.

Fußplatzierung nach Raibert ​

Marc Raiberts hüpfende und laufende Maschinen zerlegten die Regelung in drei Teile: Sprunghöhe, Körperlage und Vorwärtsgeschwindigkeit über die Fußplatzierung. Die Idee: Während der Standphase bewegt sich der Körper um die Strecke vTstance über den Fuß. Landet der Fuß in der Mitte dieses Wegs, passiert der Körper ihn symmetrisch und die Geschwindigkeit bleibt erhalten (der neutrale Punkt):

xf=vTstance2+k(v−vdes)

Der Rückführterm k(v−vdes) setzt den Fuß weiter nach vorne, um zu bremsen, und weiter nach hinten, um zu beschleunigen. Er ist eine verkappte Capture-Point-Regel.

So funktioniert der Trot-Generator von Strido ​

TrotGait ist eine bewusst einfache, deterministische, ungeregelte (Open-Loop-)Version des Obigen (kein Rückführterm, k=0). Seine Standardwerte in GaitConfig:

ParameterWertBedeutung
periodT=0.40svoller Zyklus
dutyβ=0.5Trot: Stand- und Schwungphase gleich lang
step_heighths=0.035mScheitel der Schwungphase
body_height0.17mHüftachse über den Füßen
max_linear|vx|≤0.30, |vy|≤0.15m/sBefehlsbegrenzung
max_yaw_rate|ωz|≤1.0rad/sBefehlsbegrenzung

PHASE_OFFSET gibt FL und RR δ=0 sowie FR und RL δ=12: Die Diagonalen wechseln sich ab.

Geschwindigkeit je Fuß. Für einen Befehl (vx,vy,ωz) und die Nennposition eines Fußes (px,py) im Körperkoordinatensystem bewegt sich der Körper mit der Starrkörpergeschwindigkeit v+ω×p über diesen Fuß, daher bewegt sich der Standfuß relativ zum Körper mit −vi:

vi=(vx−ωzpyvy+ωzpx0),si=viβT

wobei si die Schrittlänge über eine Standphase ist.

Standphase. Mit dem normierten Standfortschritt s=ϕ/β∈[0,1) gleitet der Fuß von einer halben Schrittlänge vorne zu einer halben Schrittlänge hinten:

pi=pinom+si(12−s)

Schwungphase. Mit s=(ϕ−β)/(1−β) kehrt der Fuß zurück und hebt auf einer Halbsinuskurve ab:

pi=pinom+si(s−12)+(00hssin⁡(πs))

Jeder Fuß landet also bei +si/2: genau Raiberts neutraler Punkt vTstance/2. Die Fußziele werden dann per inverser Kinematik in 12 Gelenkwinkel umgerechnet (siehe Kinematik) und auf die Gelenk- und Kniekurbelgrenzen begrenzt (clamp_leg). Bei Nullbefehl bleiben die Füße in ihrer Nennstellung.

Rechenbeispiel. Vorwärtsbefehl vx=0.30m/s:

Tstance=0.5×0.40=0.20s,sx=0.30×0.20=0.06m

Jeder Fuß bewegt sich von +30mm bis −30mm um seine Nennposition und schwingt dann in 0.20s zurück, mit einem Scheitel 35mm über dem Boden. Seine Schwunggeschwindigkeit relativ zum Körper beträgt im Mittel 0.06/0.20=0.30m/s und vertikal maximal π2×0.035/0.10≈0.55m/s.

Für eine reine Drehung, ωz=1.0rad/s: Der vordere linke Fuß sitzt bei px≈0.120m, py≈0.039+0.038=0.077m (Hüft- und Oberschenkelversatz aus packages/strido-core/src/strido/geometry.py), also v=(−0.077,0.120)m/s, und die Schrittlänge ist (−15,24)mm: Die Füße bewegen sich entlang eines Kreises um die Körpermitte.

Diagramm wird gezeichnet…

Grenzen. Als ungeregelter Generator reagiert er nicht auf Stöße, Rutschen oder Neigung: Nichts setzt den Fuß weiter nach vorne, wenn der Körper zu schnell ist. Diese Lücke füllt die gelernte Policy – sie sieht die IMU und kann Rückführung lernen (siehe Reinforcement Learning).

Selbsttest ​

  1. Ein Gait hat β=0.8. Wie viele Füße sind zu jedem Zeitpunkt am Boden, und kann sie statisch stabil sein?

    Antwort

    Jedes Bein ist 20 % des Zyklus in der Luft; mit versetzten Phasen schwingt immer nur ein Bein, daher sind mindestens drei Füße am Boden. Ja, wenn der CoM innerhalb des Stützdreiecks bleibt.

  2. Warum ist die statische Stabilitätsreserve eines Trots fast immer nicht positiv?

    Antwort

    Nur zwei diagonale Füße stützen den Körper, daher ist das Stützpolygon eine Strecke; die CoM-Projektion liegt nur zufällig darauf, nie echt innerhalb.

  3. Wie groß ist in TrotGait die Schrittlänge bei vx=0.15m/s, und wo landet der Fuß?

    Antwort

    s=0.15×0.20=0.03m; der Fuß landet 15mm vor der Nennposition.

  4. Was bewirkt eine Erhöhung von body_height bei der Capture-Point-Zeitkonstante?

    Antwort

    1/ω=h/g wächst, der Körper kippt also langsamer, aber der Capture Point liegt bei gleicher Geschwindigkeit weiter vorne.

  5. Welcher Raibert-Term fehlt im Trot von Strido, und was bedeutet das?

    Antwort

    Der Geschwindigkeits-Rückführterm k(v−vdes). Der Gait kann Geschwindigkeitsfehler oder Störungen nicht korrigieren.

Weiterführende Literatur ​

  • M. H. Raibert, Legged Robots That Balance, MIT Press, 1986.
  • B. Siciliano und O. Khatib (Hrsg.), Springer Handbook of Robotics, 2. Aufl., 2016 — Kapitel über Laufroboter und Gehen.
  • J. Pratt, J. Carff, S. Drakunov und A. Goswami, „Capture Point: A Step toward Humanoid Push Recovery“, IEEE-RAS Humanoids, 2006.
  • M. Vukobratović und B. Borovac, „Zero-Moment Point — Thirty Five Years of Its Life“, International Journal of Humanoid Robotics, 2004.
  • R. B. McGhee und A. A. Frank, „On the stability properties of quadruped creeping gaits“, Mathematical Biosciences, 1968.

MIT-Lizenz. Mechanik abgeleitet von Yertle (Jerome Graves). CAD, Simulation und native Tests sind kein Hardware-Nachweis – siehe Verifikation.