Web nejen o robotice

PID Regulace v robotice

Reklama:

Většina robotických systémů vyžaduje vysokou míru přesnosti, ať už jde o udržení konstantní rychlosti autonomního vozidla, nebo o precizní natočení servomotoru do požadované pozice. Taková preciznost není možná bez pokročilé formy řízení, které říkáme regulace.

Co je to regulace?

Je zásadní pochopit rozdíl mezi prostým řízením (Open-Loop) a regulací (Closed-Loop). Když pouze řídíme, vydáme systému příkaz (např. "Motor, spusť se na 50 % výkonu") a předpokládáme, že systém dosáhne cíle. Otevřená smyčka ale nedokáže reagovat na změny prostředí, jako je zvýšená zátěž nebo tření.

Regulace je naopak neustálý proces porovnávání požadovaného stavu s aktuálním stavem a aktivní odstraňování rozdílu.1 V tomto kontextu se používají tři základní pojmy:

  • Setpoint (Požadovaná hodnota): Stanovený cíl, kterého se systém snaží dosáhnout (např. rychlost 100 otáček za minutu).
  • Měřená hodnota: Aktuální stav systému, získaný pomocí senzorů (např. motor běží 85 otáček za minutu).
  • Regulační odchylka (Chyba ϵ): Rozdíl mezi Setpointem a Měřenou hodnotou (100 - 85 = 15 otáček za minutu). Tato chyba tvoří hlavní vstup pro PID regulátor.1

Proč PID, a ne jen ON/OFF termostat?

Nejjednodušší regulace je dvoustavová, neboli ON/OFF, kterou známe z termostatů.3 Tento systém zapne topení, když teplota klesne pod cíl, a vypne, když ho překročí. V praxi se to děje s tolerancí zvanou Hystereze.3 Pokud je hystereze 1 °C a cíl 20 °C, termostat sepne při 19 °C a vypne při 20 °C, což vede k neustálému kmitání (cyklování) kolem cíle.3

V robotice je dvoustavová regulace neakceptovatelná, jelikož by to znamenalo, že motor by neustále prudce zrychloval a brzdil. Místo toho používáme PID regulaci (Proporcionálně-Integračně-Derivační)3, což je forma spojité regulace.4 PID regulátor mění svůj výkon plynule (například pomocí PWM signálu u motoru), čímž zajišťuje vysokou jakost regulace a minimalizuje kolísání.4

Intuitivní Jádro PID: Tři pohledy na problém bez derivací a integrálů

PID regulátor je lineární regulátor 5, který kombinuje tři nezávislé složky, z nichž každá zpracovává chybu z jiné perspektivy: Proporcionální (P) řeší aktuální stav, Integrační (I) sčítá minulé chyby a Derivační (D) predikuje budoucí trend. Součet jejich akčních zásahů tvoří výsledný výkon, který se pošle řízenému systému.

Proporcionální Složka (P): Reakce na TEĎ (Konstanta Kp)

Proporcionální složka je nejpřímější reakcí na problém. Její akční zásah je přímo úměrný aktuální velikosti chyby.1 Čím je chyba větší (čím dál jsme od cíle), tím silnější je korekční zásah.

Analogie s gumovým pásem

Představme si, že motor se snaží dosáhnout pozice 90 stupňů. Pokud je motor na 0 stupních, guma je maximálně natažená a táhne motor k cíli maximální silou. Jakmile se motor blíží k 90 stupňům, guma se uvolňuje a síla tahu (výkon motoru) klesá proporcionálně s chybou (vzdáleností).1

Konstanta Kp (Proporcionální zesílení) určuje, jak "silně" guma táhne. Pokud je Kp příliš nízké, systém je líný. Pokud je Kp příliš vysoké, motor se k cíli žene tak rychle, že ho přejede a začne rychle oscilovat.6 To vytváří rychlou a velkou odezvu, ale může vést k nestabilitě.6

Vrozený nedostatek P-složky

Největším problémem P-regulátoru je Trvalá odchylka (Offset). K tomu, aby P-složka vyvinula dostatečný výkon k překonání vnějšího odporu (tření motoru, zátěž), potřebuje nenulovou chybu. Motor se proto zastaví těsně před cílem a chybu zcela neodstraní.6

Integrační Složka (I): Poučení z MINULOSTI (Konstanta Ki)

Integrační složka byla vytvořena, aby odstranila trvalou odchylku P-regulátoru. Integrační složka neřeší, jak velká je chyba teď, ale jak dlouho a jak velká byla v minulosti.7 Funguje jako akumulátor chyby.

Kumulativní paměť

Představme si, že po ustálení P-regulace zůstala chyba 2°. P-regulátor na tuto malou chybu už nedokáže vyvinout dostatečný výkon. I-složka si ale chybu 2° pamatuje a neustále ji sčítá po dobu, co trvá (kumuluje ji). Čím déle tato malá chyba trvá, tím větší kontrolní zásah I-složka vygeneruje a pomalu ho přidává k výkonu P-složky. To se děje, dokud chyba neklesne na absolutní nulu.6

Cíl I-složky: Absolutní eliminace trvalé chyby (Offsetu). Integrační složka má větší vliv postupem času, kdy zajišťuje finální dotažení k cílové hodnotě.5

Riziko: Integrální nasycení (Wind-up)

Pokud systém nemůže reagovat (např. motor běží na 100 % výkonu, ale cíl je stále daleko), I-složka dál sčítá obrovskou chybu. Když se pak systém dostane do situace, kdy může reagovat, I-složka pošle do motoru obrovský, zpožděný impuls. To vede k masivnímu překmitu.8 Tomu se předchází mechanismy Anti wind-up.5

Derivační Složka (D): Předvídání BUDOUCNOSTI (Konstanta Kd)

Derivační složka je nejpokročilejší, protože se dívá na rychlost, s jakou se chyba mění.7 Slouží k tlumení překmitů a ke stabilizaci systému.

Analogie s brzdícím řidičem

Pokud se chyba rychle zmenšuje (motor rychle zrychluje k cíli), D-složka předpokládá, že dojde k překmitu. Stejně jako řidič, který vidí blížící se zeď, nečeká na srážku, ale aktivuje brzdící sílu úměrnou rychlosti.6 D-složka tedy do akčního zásahu přidává záporný (brzdící) výkon. Tím zvyšuje stabilitu a zrychluje čas usazení (Settling Time).10

Konstanta Kd (Derivační konstanta) určuje sílu tohoto tlumení.

Riziko: Citlivost na šum

D-složka je extrémně citlivá, protože i drobný šum ze senzorů (např. vibrace nebo elektrické rušení) se projeví jako velmi rychlá, i když malá, změna chyby. D-složka to interpretuje jako nutnost prudké reakce, což může vést k neustálému "drnčení" motoru.11 Při regulaci PID na počátku regulace často převládá vliv D-složky, jelikož systém začíná prudce reagovat na velkou chybu.5

Umění Ladění: Jak nastavit konstanty pro optimální chod

Nastavování konstant PID regulátoru je často nejpomalejší a nejsložitější část celého procesu.4 Špatně naladěný regulátor je často horší než žádný regulátor.12 K optimálnímu naladění je nutné dodržet sekvenční postup P → I → D, protože každá složka optimalizuje specifický problém, který vznikl v předchozím kroku.

Standardní metodika ručního ladění (P → I → D)

Zajištění stability vyžaduje, aby konstanty byly laděny v pevném pořadí, přičemž neladěné složky jsou dočasně nastaveny na nulu.6

  • Start s P (Ki = 0, Kd = 0): Pomalu zvyšujeme Kp z nuly, dokud systém nezačne trvale a pravidelně kmitat. Tato hodnota je označována jako Ultimate Gain.7 Optimální Kp pro první pokus obvykle leží mezi třetinou a polovinou této kmitající hodnoty.7 Tím získáme rychlou reakci, ale stále s malým offsetem.6
  • Přidání I (Ki > 0): Při stabilním Kp začneme pomalu zvyšovat Ki. Sledujeme, jak rychle mizí trvalá odchylka. Zvyšování zastavíme předtím, než se objeví pomalé, táhlé kmitání. Pokud je Ki příliš vysoké, zvyšuje se riziko integrálního nasycení a zdlouhavého přehoupávání přes cílovou hodnotu.8
  • Přidání D (Kd > 0): Při fixních a stabilních Kp a Ki pomalu přidáváme Kd. Začínáme s velmi malými hodnotami, například 3 až 5krát menšími než Kp.11 D-složka má za úkol potlačit jakékoli překmity a zrychlit usazení.

Projevy špatně nastavených konstant: Hrozby v robotice

Vizuální hodnocení chování systému je klíčové pro diagnostiku, která konstanta způsobuje problém.

Konstanta Příliš malá hodnota Příliš velká hodnota Správně nastavená hodnota
Kp Pomalá, líná reakce; přetrvává offset. Rychlé, silné oscilace, nestabilita.6 Rychlá počáteční odezva, kontrola rychlosti náběhu.
Ki Přetrvává malá chyba (offset).6 Dlouhé, táhlé kmitání; masivní překmit (wind-up).8 Přesná eliminace trvalé chyby, usazení na setpointu.
Kd Velký překmit (přejede cíl).7 Nervozita, přehnaná reakce na šum; drnčení motoru.11 Tlumení překmitů, zvýšení stability a zrychlení usazení.

Kritéria správného naladění (Ideální odezva)

Správně naladěný systém se projevuje rychlým náběhem a rychlou stabilizací.10 Mezi klíčové ukazatele patří:

  • Rychlý náběh (Rise Time): Krátký čas potřebný k dosažení cílové hodnoty.
  • Rychlé usazení (Settling Time): Krátký čas potřebný k tomu, aby se systém ustálil v blízkosti cílové hodnoty a již nekolísal.10
  • Nulová chyba v ustáleném stavu: Systém se usadil přesně na setpointu (díky silné I-složce).10
  • Minimální překmit (Overshoot): Překročení cílové hodnoty je minimální nebo žádné (díky Kd).7

Praktický Tutoriál: PID řízení DC motoru s ESP32 a MicroPythonem

Aplikace PID v robotice vyžaduje digitální algoritmus, který se spouští v pravidelných intervalech. Použití MicroPythonu na desce ESP32 je ideální pro rychlou prototypizaci.

Hardware: ESP32, L298N a řízení motoru

Pro řízení DC motoru potřebujeme výkonový driver, který zajistí dostatečný proud a umožní regulaci rychlosti pomocí PWM. Používáme driver L298N.

Zapojení a napájení

DC motor vyžaduje externí zdroj napájení (doporučeno 6V-12V), který se připojí k pinům +12V a GND na L298N. Pin GND na L298N musí být vždy propojen s pinem GND na ESP32, aby byla zajištěna společná zem.[^13]

Řízení motoru

Motor A je ovládán pomocí tří pinů z ESP32:

  • IN1 a IN2 (GPIO 12 a GPIO 14): Řídí směr otáčení motoru logickými stavy (HIGH/LOW).[^13]
  • EN1 (GPIO 13): Řídí rychlost motoru pomocí PWM (Pulse Width Modulation). PWM signál (nastavený na duty cycle) je kontrolní výstup z PID regulátoru.[^13]

Tabulka Zapojení ESP32 a L298N (Motor A)

L298N Pin Funkce ESP32 GPIO Pin (Příklad)
Input 1 (IN1) Řízení směru A GPIO 12
Input 2 (IN2) Řízení směru A GPIO 14
Enable (EN1) Řízení rychlosti (PWM) GPIO 13
GND Zem GND

Implementace PID v MicroPythonu

Pro MicroPython existuje robustní port knihovny simple-pid.13 Pro účely demonstrace principu budeme simulovat čtení aktuální rychlosti (current_value), které by v reálné aplikaci pocházelo z enkóderu.

A. Inicializace a nastavení (kód)

from machine import Pin, PWM
from time import sleep
from PID import PID  # Predpoklada se, ze PID.py je nahrano na ESP32

# Hardware Setup (L298N - Motor A)
EN_PIN = 13
PWM_FREQ = 15000 # 15 kHz frekvence pro PWM
enable_pwm = PWM(Pin(EN_PIN), freq=PWM_FREQ, duty=0)
PWM_MAX_DUTY = 1023

# Nastaveni smeru (Motor vpřed)
in1 = Pin(12, Pin.OUT)
in2 = Pin(14, Pin.OUT)
in1.value(0)
in2.value(1)

# PID Parametry a Setpoint
SETPOINT = 50.0 # Pozadovana virtualni rychlost
Kp = 1.5
Ki = 0.05
Kd = 0.1

# Inicializace PID  
pid = PID(Kp, Ki, Kd, setpoint=SETPOINT, scale='ms')
# Omezeni vystupu na fyzicke limity PWM (0-1023).
# TOTO ZAJISTUJE ANTI WIND-UP.
pid.output_limits = (0, PWM_MAX_DUTY)

# Simulace rizeného systemu (V realu by se cetlo z enkoderu)
current_value = 0.0
inertia_factor = 0.05

def controlled_system_update(control_input):
  """Simuluje setrvacnost motoru a reakci na PWM."""
  global current_value  
  target_speed = control_input * (100 / PWM_MAX_DUTY)
  error_v = (target_speed - current_value) * inertia_factor
  current_value += error_v
  return current_value

def set_motor_speed(control_output):
  """Aplikuje kontrolni vystup (duty cycle) na PWM pin."""  
  duty_cycle = int(control_output)
  enable_pwm.duty(duty_cycle)

#... Hlavni smycka je nize

B. Hlavní regulační smyčka

V hlavní smyčce se cyklicky provádí měření aktuálního stavu a výpočet kontrolního výstupu, který se aplikuje na motor.13

# Hlavni regulacni smycka  
print(f"Start PID regulace, Cíl: {SETPOINT} (Virtualni rychlost)")

try:
  while True:
    # VYPOCET: Vypocita novy vystup PID na zaklade aktualni hodnoty
    # Zavolani objektu pid jako funkce vraci kontrolni signal (0-1023)
    control_output = pid(current_value)

    # AKCE: Aplikuje vystup na motor
    set_motor_speed(control_output)

    # AKTUALIZACE STAVU: Ziska novou aktualni hodnotu (simulaci)
    current_value = controlled_system_update(control_output)

    # Sledovani stavu
    print(f"Chyba: {pid.error:.2f}, Aktuální V: {current_value:.2f}, Výkon PWM: {control_output:.0f}")

    # ZAJISTENI KONSTANTNIHO SAMPLE TIME (10 ms)
    sleep(0.01)

except KeyboardInterrupt:
  set_motor_speed(0)
  print("Regulace zastavena.")

Důležité aspekty diskrétního PID

V digitální implementaci PID, kde se výpočet provádí v diskrétních krocích5, je klíčové zajistit stabilní a rychlé vzorkování.

  • Stabilita a Vzorkovací čas (Sample Time): D-složka počítá rychlost změny chyby v závislosti na čase. Pro přesný výpočet D-složky je nezbytné, aby interval mezi jednotlivými voláními pid(current_value) byl co nejkonstantnější a rychlý. Jakákoli nepravidelnost v Sample Time vede k nestabilitě D-složky.
  • Anti Wind-up Implementace: Největším praktickým rizikem PID je integrální nasycení (Wind-up), kdy se I-složka přebije, pokud je motor na maximálním výkonu a nemůže se zrychlit. Elegantním řešením v MicroPythonu je digitální omezení pomocí pid.output_limits = (0, 1023). Tímto systém brání integrační sumě v neomezeném růstu, když je fyzický akční zásah omezen limitem PWM.13

Závěr: Odemknutí preciznosti v robotice

PID regulace představuje základní pilíř moderní robotiky a automatizace, poskytující nezbytnou kontrolu nad rychlostí, stabilitou a přesností řízených systémů. Kombinací reakce na současnou chybu (Kp), eliminace minulé chyby (Ki) a předvídání budoucího pohybu (Kd) dokážeme dosáhnout optimální odezvy.

Pro studenty a začínající tvůrce je klíčové pochopit intuitivní roli každé složky a osvojit si systematickou metodiku ladění P → I → D, protože špatné nastavení konstant může způsobit horší výsledky než absence regulace. Implementace v MicroPythonu na ESP32, demonstrovaná na řízení DC motoru, ukazuje, že s moderními mikrokontroléry a knihovnami je možné tuto komplexní techniku aplikovat i na domácí robotické projekty.

Úspěch aplikace PID v praxi závisí na pečlivém vyvážení všech tří sil. Správně naladěný PID regulátor v robotice znamená efektivní a přesné dosažení cílové hodnoty bez zbytečného kolísání nebo překmitů. Po zvládnutí základního ladění mohou tvůrci přejít k reálné zpětné vazbě (enkodéry) a dále experimentovat s pokročilými modifikacemi PID pro ještě rychlejší a stabilnější řízení.

Citovaná díla


  1. Řízení pohybu (Robotika.cz > Průvodce) https://robotika.gitlab.io/guide/control/cs 

  2. Řízení pohybu (Robotika.cz > Guide) https://robotika.cz/guide/control/en 

  3. Vysvětlení pojmů regulace - ELEKTROBOCK MTF s.r.o. https://www.elektrobock.cz/vysvetleni-pojmu-regulace/c117 

  4. Regulace https://hotset.cz/wp-content/uploads/2020/07/pid_regulace_zaklady.pdf 

  5. PID regulátor - Wikipedie https://cs.wikipedia.org/wiki/PID_regul%C3%A1tor 

  6. Plynulá regulace PID https://ucebnaaut.wz.cz/wp-content/uploads/2017/11/Plynul%C3%A1-regulace-PID.pdf 

  7. PID Controller & Tuning Explained in 1 Minute - Easy & Fast! - YouTube https://www.youtube.com/watch?v=Elnp9FfZU3o 

  8. Řídicí systém vysokoteplotní tavné pece - IS MUNI https://is.muni.cz/th/io8h8/Bc_prace.pdf 

  9. Plynulá regulace PID https://jvalter.cz/plynula-regulace-pid 

  10. Jak implementovat PID regulaci otáček v regulátorech BLDC motoru - Wonderful PCB https://www.wonderfulpcb.com/cs/blog/how-to-implement-pid-speed-regulation-in-bldc-motor-controllers/ 

  11. Regulace PID paster https://jvalter.cz/regulace-pid-paster 

  12. O /OFF a PID REGULACE Pro jednoduchost se budeme zabývat regulací na konstantní hodnotu [^13]: Logitron https://cdn.logitron.cz/data/user-content/dokumenty/podpora/ON_OFF_PID_regulace.pdf 

  13. MicroPython: ESP32/ESP8266 DC Motor (L298N Driver | Random Nerd Tutorials https://randomnerdtutorials.com/micropython-esp32-esp8266-dc-motor-l298n/ 

  14. Welcome to MicroPython simple-pid's documentation! - micropython-simple-pid 1.1.0 documentation https://micropython-simple-pid.readthedocs.io/