Wyobraź sobie, że programujesz trójkołowego robota piłkarskiego. Jakiego rodzaju kontrolera użyłbyś do jego zakręcenia? P PID?
Celem tego kontrolera jest ustawienie robota pod określonym kątem (0 stopni) i odwrócenie go, jeśli zostanie obrócony ręką lub innym robotem.
Używam silników krokowych do mojego robota, a nie serwa, więc muszę to zaimplementować w moim oprogramowaniu!
Napisałem już przykładowy kontroler typu P, a ruch jest dość dobry. Ale chciałbym to poprawić, jeśli to możliwe. Kod jest następujący:
void spinSpeed(int devidedValue, int addedValue, int correction) {
if(degree<correction && degree>-correction) {
motorSpeed = 0;
} else {
if(degree > 0) {
motorSpeed = ((degree)/(devidedValue) + (addedValue));
} else {
motorSpeed = ((degree)/(devidedValue) - (addedValue));
}
}
}
correction
to zakres, w którym robot nie porusza się.
degree
to liczba od -127 do 128, która jest zwracana z kompasu.
motorSpeed
to liczba od 0 do 255, która jest stosowana do PWM.
degree
?Odpowiedzi:
Ważną rzeczą do zapamiętania na temat pętli sterowania PID jest to, że każdy termin ma dominować nad kontrolą w różnych momentach podczas ruchu.
Określenie proporcjonalne ma dominować i zapewniać większy moment obrotowy (lub w twoim przypadku prędkość), im dalej jesteś od swojej pozycji docelowej.
Termin pochodna ma dominować podczas fazy „rejsowej” typowego ruchu trapezoidalnego. Pomaga przywrócić bardzo wysoki współczynnik proporcjonalności i ograniczyć niekontrolowane przyspieszenie, gdy jesteś daleko od miejsca docelowego, ale może również pomóc zwiększyć prędkość, z jaką zbliżasz się do miejsca docelowego, gdy się do niego zbliżysz, a współczynnik proporcjonalny przyczynia się znacznie mniej .
Jeśli używasz regulatora prędkości zamiast regulatora momentu, to pochodna może faktycznie być ukryta w regulatorze prędkości i niedostępna bezpośrednio dla twojej pętli PID. Może to uprościć kontrolę (zwykle przyspiesza tak szybko, jak to możliwe, aż do żądanej prędkości lub prędkości maksymalnej, w zależności od tego, która wartość jest niższa), ale może również uczynić ją mniej przewidywalną. Często zbyt agresywny termin D (lub P) może doprowadzić do wejścia w cykl graniczny (często niepoprawnie nazywany rezonansem lub oscylacją z powodu dźwięku szumu silnika, a nawet krzyku w tym stanie, chociaż cykl graniczny jest znacznie dokładniejszym opisem ).
Pojęcie integralne służy do skorygowania resztkowego błędu stanu ustalonego , to znaczy tam, gdzie istnieje trwała, długofalowa różnica między miejscem, w którym poproszono cię, abyś poszedł i gdzie jesteś. Twoja aktualna wartość
correction
(tak naprawdę tylko tolerancja) działa jak przeciwieństwo integralnego terminu, całkowicie odcina silnik, gdy znajdujesz się w strefie nieczułości wokół żądanej pozycji.Z powodu tych czynników niewiele zyskasz na wdrożeniu pełnej pętli PID, chyba że planujesz również w profilu prędkości z wyraźnymi fazami przyspieszania, poruszania się i zwalniania.
Pamiętaj również, że strefa nieczułości i brak terminu I będą oznaczać, że ostateczna pozycja będzie zawsze nieco losowa i najprawdopodobniej będzie się różnić w zależności od kierunku, w którym podchodzisz do żądanej pozycji. W związku z tym twoja dwukierunkowa powtarzalność może być znacznie gorsza niż standardowa powtarzalność.
Aby uzyskać więcej informacji na temat różnicy między dokładnością, powtarzalnością i rozdzielczością, zobacz ten doskonały opis . W twoim przypadku rozdzielczość jest czujnikiem kompasu, podczas gdy zarówno dokładność, jak i powtarzalność są najprawdopodobniej ograniczone przez twoją
correction
wartość, ponieważ jeślicorrection
wartość jest większa niż rozdzielczość kompasu, tracisz część swojej dokładności pozycjonowania w zamian za możliwość wyłącz silnik, gdy będziesz blisko.źródło
Najlepszym rozwiązaniem byłby kontroler PID. Korzystanie z kompasu jest stosunkowo prostym zadaniem polegającym na uzyskaniu namiaru robota i porównaniu go z łożyskiem, które chcesz osiągnąć, oraz zastosowaniu niektórych technik strojenia PID w celu uzyskania płynnego obrotu żądany kurs. To podejście można również zastosować do dokładnego obracania o określoną wartość.
Zrobiłem już trochę robotyki w tej dziedzinie, tego właśnie użyliśmy w naszym robocie, wykonując niezbyt podobne zadanie do ciebie ...
źródło