Niedawno zrobiłem małego robota gąsienicowego, który miał dwie nogi o dwóch stopniach swobody, czyli łącznie 4 serwa RC. Podczas programowania ruchu nóg zauważyłem, że poruszają się one raczej sztywno. Ma to sens, że wewnętrzny kontroler serwa RC miałby bardzo szybką reakcję na polecenia pozycji, ale chciałem, aby mój robot poruszał się w sposób, który wydaje się nieco bardziej płynny i podobny do życia.
Moim rozwiązaniem było stworzenie sześciennej funkcji czasu, która opisuje ścieżkę serwomechanizmów, a następnie ustalanie ich pozycji w małych odstępach czasu, co skutkuje bardziej płynnym ruchem. Zasadniczo rozwiązałem współczynniki w równaniu sześciennym, używając przedziału czasowego, pozycji początkowej i końcowej serwomechanizmu oraz prędkości początkowych i końcowych serwomechanizmu powinien się poruszać (co jest tylko pochodną pozycji):
Rozwiąż dla , , i :a 1 a 2 a 3
r a t e ( t ) = p o s i t i o n ′ ( t ) = a 1 + 2 a 2 t + 3 a 3 t
Biorąc pod uwagę: , , ,p o s i t i o n ( t f ) r a t e ( 0 ) r a t e ( t f )
Ustawiłem szybkość serwomechanizmu między parą ruchów na zero, jeśli ruchy były w przeciwnych kierunkach, i dodatnie lub ujemne, jeśli ruchy były odpowiednio w kierunku dodatnim lub ujemnym.
Działa to całkiem dobrze, ale to rozwiązanie jest ograniczone na kilka sposobów. Po pierwsze, trudno jest zdecydować, jakie dokładnie powinny być stawki między ruchami zmierzającymi w tym samym kierunku. Użyłem średniej nachylenia przed i za określoną pozycją między ruchami, ale nie jest dla mnie jasne, czy jest to optymalne. Po drugie, sześcienne krzywe mogą doprowadzić serwo do pozycji poza zakresem pozycji na początku i na końcu ruchu, co może być niepożądane. Na przykład, w pewnym momencie przedziału czasowego krzywa może spowodować, że serwo wyjdzie poza drugą pozycję lub poniżej pierwszej pozycji. Po trzecie, generowanie krzywej nie bierze pod uwagę maksymalnej prędkości, jaką serwo może obrócić, więc krzywa może powodować, że serwo porusza się z nierealistyczną prędkością. Z tym,
Zlekceważąc ten ostatni problem, te problemy można rozwiązać, zwiększając stopień wielomianu i dodając ograniczenia do rozwiązania dla współczynników, ale teraz zaczynam się zastanawiać ...
Czy istnieje lepszy sposób, aby ruch serwomechanizmu był płynny i wyglądał bardziej jak życie?