Jakie jest właściwe podejście do napisania kontrolera obrotu dla robota piłkarskiego?

14

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));  
        }
    }
}

correctionto zakres, w którym robot nie porusza się. degreeto liczba od -127 do 128, która jest zwracana z kompasu. motorSpeedto liczba od 0 do 255, która jest stosowana do PWM.

Miro Markaravanes
źródło
Przypuszczalnie ta procedura jest uruchamiana za każdym razem, gdy kompasy generują nową wartość degree?
Mark Booth
@MarkBooth Mam już swój kod (1), więc w każdym cyklu pobiera wartość z kompasu, podaje go funkcji, a następnie stosuje wynik do silników.
Miro Markaravanes
Zbadam, jakiego rodzaju kontrolera używa serwomechanizm, ponieważ próbujesz powielić zachowanie serwomechanizmu w oprogramowaniu.
Chris Laplante,
Nie używam serwomechanizmów. Używam silników krokowych, więc nie ma już takiego zachowania w silniku.
Miro Markaravanes
2
Cześć Miro, przy wymianie stosu lepiej jest edytować swoje pytanie w odpowiedzi na pytania w komentarzach, w ten sposób można uporządkować (usunąć) komentarze, aby nie odwracały uwagi od samego pytania.
Mark Booth

Odpowiedzi:

7

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ą correctionwartość, ponieważ jeśli correctionwartość 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.

Mark Booth
źródło
8

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 ...

Njdart
źródło
1
Dziękuję za odpowiedź. Chciałem zaakceptować odpowiedź, ale chciałbym zobaczyć więcej odpowiedzi, więc zaakceptuję, gdy będzie więcej odpowiedzi;)
Miro Markaravanes