Jump to content
  • 0

pomoc Line Follower - NXT


The hidden face

Dotaz

Zdravím, 

 

hledám nějakou matematickou funkci nebo vychytávku, která by mi pomohla, při zdolání čáry při vyšší rychlosti.

Pro pohyb po čáře používáme PID regulátor. Který při správném nastavení konstant jede pěkně, ale bohužel pomalu a při zvýšení rychlosti se robot klepe jak osika.

 

Vysvětlení:

Celé to spočívá v tom, že zprvu přes senzor zjistíme hodnotu bílé a černé a to zprůměrujem (white+black/2) a vznikne nám "šedá", kterou by robot měl sledovat, takže jezdí po kraji čáry. Dále se počítá error (P), tj. vzdálenost od čáry (může být více na bíle, nebo více na černé --> tím se mění error), pak se počítá Integral, což je sečtení všech errorů dohromady, čímž robot ví, jaký tvar měla čára za ním a dokáže si odvodit, jak by měl pokračovat. A jako poslední se počítá Derivative. Který sečte vždy předchozí error s aktuálním, takže by měl dokázat předpovědět budoucí trasu. Z toho všeho se vypočítá zatáčka (turn), což je menšitel rychlosti jednoho z motoru, druhý jede vždy na 100%.

turn = ((Kp * error) + (Ki * integral) + (Kd * derivative));

Kp, Ki a Kd jsou konstanty, které je potřeba zkoušením nastavit na optimální hodnotu, vlastně říkají, jak velký zřetel se má na jednotlivé části z PID regulátoru brát. ;)

 

Náš problém je v tom, že potřebujeme, aby turn házel jak malé hodnoty, tak velké. Ale jakmile se vzdálí od čáry, tak to skočí ihned z 0 na 22, což je strašně moc, takže okamžitě se sníží rychlost z jednoho motoru o 22, což samozřejmě přejede zase moc na černou a to má za následek klepání tam a zpět. Při zatáčkách by se nám zase hodily větší hodnoty, aby to při nejlepším dokázalo snížit i na nulu. (Ano, šlo by to jednoduchou podmínkou, ale pak už tam dáváte hodnoty "na pevno" a né vždy to jede tak jak má, nebo se to pořád klepe.)

 

Takže ve zkratce potřebuji nějakou vychytávku nebo matematickou funkci, která dokáže malé hodnoty buď ještě zmenšit nebo neměnit a větší naopak ještě zvětšit. Bohužel nemám ještě tak vypracované myšlení, takže mě zatím nic nenapadlo. Pokud víte jak na to a je to složitější postup, uvítal bych kdyby jste mi to vysvětlili, jelikož nejsem nějaký genius v matematice, nebo mě alespoň navedli na správný směr. Za případné rady děkuji! :d;)

Link to comment
Share on other sites

2 odpovědí na tuto otázku

Recommended Posts

  • 0

Def. obor jsem měl dříve u erroru, stejně tak jsem si dal i intervaly, ovšem u erroru to blblo tím, že mohl dosáhnout toho intrvalu, kdy měl jet rovně klidně i v zatáčce, protože error pouze vrací vzdálenost od čáry, ale když o tom přemýšlím tak s turnem by to jít mohlo. ;)

Edited by GaRGoyLeS
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...