Ponownie wdrażam twoje rozwiązanie, otrzymuję to:
Kąt między wektorami
Po pierwsze, chcesz kąt między punktami i - nie konkretnie wektor jednostek.
AB
( poprzez programowanie Fx ):
θ=math.atan2(Bx−Ax,By−Ay)
Kąt odchylenia pojazdu
Następnie (i podejrzewam, że to jest twój problem), musisz odjąć kąt odchylenia pojazdu od obliczonej . ψθ
Heading vs Yaw
Jeśli używasz kompasu do „kąta odchylenia” pojazdu, może to być również twój błąd; kierunek i ziewanie nie są takie same . Kierunek kompasu wynosi zero wzdłuż dodatniej osi , zwiększając się, gdy obraca się w prawo :y
Odchylenie wynosi zero wzdłuż dodatniej osi , zwiększając się, gdy obraca się w lewo :x
90-stopniowe nakładanie się tych pomiarów, w połączeniu z dodawaniem (zamiast odejmowaniem) odchylenia pojazdu od pożądanego odchylenia, może być powodem, dla którego rzeczy działały, gdy cel był w zakresie ± 5 ° i źle zachowywał się przy ± 90 °.
Konwersja na komponent X i Y
Stamtąd, można powiedzieć, że jest to wynik konwersji w jego i składników, przekazując je do robota jako kątów przechyłu i nachylenia. Dzięki powyższym poprawkom powinieneś uzyskać pożądany wynik w tym momencie. Jednak bezpośrednie mapowanie tych komponentów do kątów pochylenia może być problematyczne, ponieważ bierze się pod uwagę tylko różnicę położenia, a nie prędkość (naprawdę pęd) pojazdu.(θ−ψ)xy
Kontrola PID
Możesz być najlepiej obsługiwany za pomocą pętli kontrolnych PID dla przechyłu i nachylenia pojazdu. Oznacza to, że gdy naprawisz kod i będziesz w stanie trafić swój cel, domyślam się, że zamiast tego zaczniesz go przesadzać - oscylując w tę iz powrotem. Prawidłowo dostrojony PID zapobiegnie temu, a jednocześnie pozwoli szybko zbliżyć się do celu.
Zamiast podłączając swoje i w rolce i boiska, uważają je za tych błędach wartości, rolki i pitch PID przyjąć jako wejście.xy