Zum Inhalt springen

Regelung ​

Regelungstechnik sorgt dafür, dass ein System tut, was Sie ihm befehlen – trotz Lasten, Rauschen und Modellfehlern –, indem gemessen wird, was es tatsächlich tut, und die Differenz korrigiert wird. Diese Seite behandelt Steuerung und Regelung, PID- und PD-Regelung, Übertragungsfunktionen und Sprungantworten, Abtastraten, den internen Regelkreis des Hobbyservos und Nachgiebigkeit, mit den Servos von Strido und seinem MuJoCo-Modell als Beispielen.

In Strido

  • Raten: Die Firmware betreibt eine Regel- und IMU-Schleife mit 200Hz (kControlPeriodUs = 5000) und aktualisiert die Servos mit 200Hz (kServoFrequencyHz; der SPT5435LV akzeptiert bis zu 330Hz). Sie streamt den Zustand mit 100Hz an den Host (alles in firmware/strido_esp32s3/src/board_config.h). Der Gelenkbefehlsstrom läuft mit 100Hz (strido_sim/walk.py), die gelernte Policy mit 50Hz (strido/policy.py).
  • Servomodell in der Simulation: MuJoCo-Positionsaktuatoren mit kp="25" kv="0.4" forcerange="-3.432 3.432", dazu Gelenk-damping="0.25" armature="0.012" frictionloss="0.05" (models/mujoco/strido.xml).
  • Hardware: 12 SPT5435LV-180W-Positionsservos, angesteuert von einem PCA9685-PWM-Board (Servos, Firmware).

Steuerung und Regelung ​

Steuerung (offener Kreis) legt einen vorab berechneten Eingang an und prüft das Ergebnis nie. Ein Trot-Gait, der Fußtrajektorien über inverse Kinematik abspielt, ist bezüglich des Körpers eine Steuerung: Rutscht der Roboter, bemerkt der Gait es nicht.

Regelung (geschlossener Kreis, Rückkopplung) misst den Ausgang y, vergleicht ihn mit der Führungsgröße r und wirkt auf den Fehler e=r−y. Rückkopplung unterdrückt Störungen und verdeckt Modellfehler. Der Preis sind Stabilitätsprobleme, wenn die Verstärkung zu hoch oder die Verzögerung zu lang ist.

Strido stapelt mehrere Regelkreise, jeder schneller als der darüber:

Diagramm wird gezeichnet…

Die Servos geben dem Host keine Positionsrückmeldung (strido_sim/rl/env.py). Der einzige Regelkreis auf Gelenkebene schließt sich also innerhalb jedes Servos. Die Policy schließt den Regelkreis auf Körperebene über die IMU.

PID-Regelung ​

Der klassische Regler kombiniert drei Anteile:

u(t)=Kpe(t)+Ki∫0te(τ)dτ+Kde˙(t)
  • P drückt proportional zum Fehler, wie eine Feder.
  • I summiert vergangene Fehler auf und beseitigt bleibende Regelabweichungen, auf Kosten von Überschwingen und Wind-up.
  • D wirkt der Änderungsrate entgegen, wie ein Dämpfer. In der Praxis wirkt er auf −y˙ statt auf e˙, was einen Stoß bei einem Sprung der Führungsgröße vermeidet.

Für Gelenke ist die übliche Wahl PD mit Soll-Geschwindigkeit null:

τ=kp(q∗−q)−kvq˙

Das ist genau MuJoCos <position kp kv>-Aktuator. Das Ergebnis wird dann auf den Kraftbereich begrenzt, |τ|≤3.432Nm, das Blockiermoment des Servos.

Übertragungsfunktionen und die Sprungantwort ​

Modellieren Sie ein Gelenk als Trägheit I mit viskoser Dämpfung b. Im Laplace-Bereich gilt Is2Q=T−bsQ. Mit PD-Regelung lautet der geschlossene Kreis von Sollwert zu Winkel:

Q(s)Q∗(s)=kpIs2+(b+kv)s+kp=ωn2s2+2ζωns+ωn2,ωn=kpI,ζ=b+kv2kpI

Dieses Standardsystem zweiter Ordnung erklärt das meiste, was Sie in einer Sprungantwort sehen:

  • ωn bestimmt die Geschwindigkeit. Anstiegszeit ≈1.8/ωn und Bandbreite ≈ωn für ζ nahe 0.7.
  • ζ bestimmt die Form. Unter 1 schwingt die Antwort über und klingt nach. Das Überschwingen beträgt exp⁡(−πζ/1−ζ2). Über 1 ist sie träge, aber monoton.
  • Eine Erhöhung von kp beschleunigt die Antwort, senkt aber ζ, also erhöhen Sie kv mit.
  • Die statische Steifigkeit ist kp: Eine konstante Last τL hinterlässt einen Fehler von τL/kp. Nur ein Integralanteil beseitigt ihn.

Rechenbeispiel: das MuJoCo-Knie ​

Aus models/mujoco/strido.xml: kp=25Nm/rad, kv=0.4Nms/rad, Gelenkdämpfung b=0.25, Armatur 0.012kgm2. Der Unterschenkel trägt mrc2≈0.0521⋅0.0482=1.2×10−4kgm2 bei, dazu seine eigenen 1.5×10−4kgm2 um seinen Schwerpunkt (mass_report.yaml), also I≈0.0123kgm2 für einen schwingenden Unterschenkel (die Armatur dominiert). Dann gilt:

ωn=250.0121=45rad/s (7.2Hz),ζ=0.25+0.4225⋅0.0121=0.59

Das sagt eine Anstiegszeit von etwa 40ms und rund 10% Überschwingen voraus. Das sind Schätzungen: Sie ignorieren Reibungsverluste, die Momentenbegrenzung und die anderen Glieder.

Im Stand trägt das Knie 0.70Nm (siehe Statik und Dynamik), also sackt das Modell ab um:

Δq=0.7025=0.028rad≈1.6∘

Die Policy kann lernen, leicht über den Sollwert hinaus zu kommandieren, um das auszugleichen. Da die RL-Umgebung die Servosteifigkeit in jeder Episode randomisiert (env.py), kann sich die Policy nicht auf einen exakten Wert verlassen.

Abtastung, Verzögerung und Bandbreite ​

Digitale Regler tasten ab. Die Nyquist-Grenze besagt, dass Sie mehr als zwei Abtastwerte pro Periode des schnellsten relevanten Signals brauchen. Für gute Regelung lautet die Faustregel: eine Schleife 10–20-mal schneller als die Bandbreite des geschlossenen Kreises. Verzögerung zählt genauso: Eine reine Totzeit Td fügt einen Phasenverzug φ=ωTd hinzu, der die Phasenreserve aufzehrt und einen Regelkreis mit hoher Verstärkung schließlich destabilisiert.

Für Strido:

SchleifeRatePeriode / zusätzliche Verzögerung im ungünstigsten Fall
Policy50Hz20ms
Gelenkbefehlsstrom100Hz10ms
ESP32-Regelung + IMU200Hz5ms
Servo-PWM-Frame200Hz (max. 330Hz)5ms (3.0ms)
MuJoCo-Physik500Hz2ms

Ein klassischer analoger Servo nimmt nur alle 20ms (50Hz) einen neuen Puls an. Bei der oben geschätzten Gelenkbandbreite von 7.2Hz kostet allein diese Verzögerung ωTd=45⋅0.02=0.9rad≈52∘ Phase. Bei 200Hz sind es 13∘. Vermutlich betreibt die Firmware den PCA9685 deshalb mit 200Hz. Die 50Hz-Policy ist ausreichend, weil sie nur die Gangart formt, deren Zyklus 0.4s beträgt (2.5Hz, GAIT_PERIOD_S in strido/policy.py). Das ergibt 20 Policy-Schritte pro Zyklus, während die schnellen Schleifen darunter die steife Arbeit leisten.

Der interne Regelkreis des Hobbyservos ​

Ein Hobbyservo ist ein kleines Regelsystem in einer Box: ein Gleichstrommotor, ein Getriebe, ein Potentiometer am Abtrieb und ein Regler-Chip. Die Pulsbreite kodiert den Sollwinkel. Der Chip vergleicht ihn mit dem Potentiometerwert und treibt den Motor mit annähernd proportionaler (oft PD-ähnlicher) Regelung an, begrenzt durch das Blockiermoment. Sie können weder seine Position auslesen noch seine Verstärkungen einstellen. Von außen verhält er sich wie ein steifes PD-Gelenk mit Momentbegrenzung, Geschwindigkeitsbegrenzung (im Leerlauf 0.14s/60∘ bei 6V, etwa 7.5rad/s) und etwas Totzone. Genau diese Abstraktion modelliert MuJoCos Positionsaktuator. Die Firmware fügt zusätzlich eine Ratenbegrenzung von 6rad/s hinzu (MAX_JOINT_SPEED_RAD_S), damit plötzliche Sprünge keinen Strom nahe dem Blockierstrom ziehen.

Impedanz und Nachgiebigkeit ​

Ein Positionsregler mit den Verstärkungen kp und kv lässt das Gelenk sich wie ein Feder-Dämpfer-System in Richtung Sollwert verhalten:

τext=kpΔq+kvq˙

Über τ=J⊤F und δp=Jδq auf den Fuß abgebildet, ergibt sich die kartesische Steifigkeit des Fußes:

Kx=J−⊤KqJ−1

Impedanzregelung wählt diese Steifigkeit gezielt. Ein Laufroboter will seine Füße beim Aufsetzen nachgiebig, damit Stöße absorbiert werden und kleine Geländefehler den Körper nicht erschüttern, und steif während der Standphase. Roboter mit drehmomentgeregelten Motoren (zum Beispiel der MIT Cheetah) setzen Kx in Software. Ein Hobbyservo ist steif und fest eingestellt, daher entsteht die Nachgiebigkeit bei Strido durch niedrigere kommandierte Geschwindigkeit, die Ratenbegrenzung, die Fußpolster und eine mit randomisierter Steifigkeit trainierte Policy.

Selbstkontrolle ​

  1. Warum erreicht ein PD-geregeltes Gelenk unter konstanter Last seinen Sollwert nicht exakt?
  2. Was passiert mit ωn und ζ, wenn Sie kp verdoppeln und kv beibehalten?
  3. Warum würde ein 50Hz-Servo-Frame mehr schaden als eine 50Hz-Policy?
  4. Wo befindet sich am realen Roboter der einzige Rückkopplungskreis für die Gelenkposition?
Antworten
  1. Im stationären Zustand muss der P-Anteil das Lastmoment aufbringen, also ist e=τL/kp≠0. Nur ein Integralanteil beseitigt ihn.
  2. ωn wächst um den Faktor 2. ζ sinkt um den Faktor 2, es gibt also mehr Überschwingen.
  3. Die Frame-Verzögerung liegt innerhalb der schnellen, steifen Gelenkschleife, deren Bandbreite mehrere Hertz beträgt. Die Policy formt langsamere Körperbewegungen (den 2.5Hz-Gangzyklus) und stützt sich auf die Gelenkschleifen darunter.
  4. Innerhalb jedes Servos, zwischen seinem Potentiometer und seinem Regler-Chip. Host und ESP32 sehen den Gelenkwinkel nie.

Weiterführende Literatur ​

  • K. J. Åström und R. M. Murray, Feedback Systems: An Introduction for Scientists and Engineers, 2. Aufl., Princeton University Press, 2021. Kostenlos online
  • K. M. Lynch und F. C. Park, Modern Robotics, Cambridge University Press, 2017, Kap. 11 (Roboterregelung, einschließlich Impedanzregelung).
  • N. Hogan, „Impedance Control: An Approach to Manipulation“, ASME J. Dynamic Systems, Measurement, and Control, 107(1), 1985.
  • MuJoCo-Dokumentation: Aktuatoren.
  • Servos und Firmware in diesem Wiki.

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