Çözümünüzü yeniden uygulayarak şunu elde ederim:
Vektörler Arası Açı
İlk olarak, noktalar arasındaki açıyı istiyorsunuz bir ve B - özellikle birim vektörü değil.
( Fx Programlama ile ):
θ = m a t h . a t a n 2 (Bx-birx,By-biry)
Araç Sapma Açısı
Sonraki (ve bu sorunu olduğunu sanıyorum) yapmanız gerekir çıkarma aracın sapma açısıψ hesapladığınızdan θ.
Heading vs Yaw
Aracınızın "yalpa açısı" için bir pusula kullanıyorsanız, bu da sizin hatanız olabilir; yön ve sapma aynı değil . Pusula yönü pozitif boyunca sıfıryekseni, saat yönünde döndükçe artar :
Pozlama boyunca yaw sıfır xsaat yönünün tersine döndükçe artan eksen :
Bu ölçümler arasındaki 90 derece üst üste binme, aracın istenen yalpadan sapmasını (çıkarmak yerine) eklemekle birleştiğinde, hedefiniz ± 5 ° içinde olduğunda ve ± 90 ° 'de kötü davrandığında neden olabilir.
X ve Y Bileşenlerine Dönüşüm
Oradan, bu sonucu dönüştürdüğünüzü söylüyorsunuz ( θ - ψ ) onun içine x ve ybileşenleri, onları rulo ve eğim açıları olarak robota geçirir. Yukarıdaki düzeltmelerle, bu noktada istenen sonucu almalısınız. Bununla birlikte, bu bileşenleri eğim açılarına doğrudan eşlemek sorunlu olabilir, çünkü aracın hızını (gerçekten, momentumu) değil, sadece konum farkını düşünürsünüz.
PID Kontrolü
En iyi şekilde aracın rulo ve eğimi için PID kontrol döngüleri kullanılarak servis yapılabilir. Yani, kodunuzu düzelttikten ve hedefinize vurabildiğinizde, tahminim bunun yerine onu aşmaya başlayacaksınız - ileri geri salınıyor. Doğru ayarlanmış bir PID, hedefe hızlı bir şekilde yaklaşmanıza izin verirken bunun olmasını önler.
Takmak yerine x ve yyuvarlanma ve eğimde, bunları yuvarlanma ve eğim PID'lerinin girdi olarak kabul ettiği hata değerleri olarak düşünün .