Al volver a implementar su solución, obtengo esto:
Ángulo entre vectores
Primero, quieres el ángulo entre los puntos UNA ysi , no específicamente el vector unitario.
θ = m a t h . a t a n 2 ( BX- AX, By- Ay)
Ángulo de guiñada del vehículo
ψθ
Encabezado vs Yaw
y
X
La superposición de 90 grados entre estas mediciones, combinada con la suma (en lugar de restar) la guiñada del vehículo de la guiñada deseada, puede ser la razón por la cual las cosas funcionaron cuando su objetivo estaba dentro de ± 5 ° y se comportó mal a ± 90 °.
Conversión a Componente X e Y
( θ - ψ )Xy componentes , pasándolos al robot como los ángulos de balanceo y cabeceo. Con las correcciones anteriores, debería obtener el resultado deseado en este punto. Sin embargo, mapear directamente estos componentes a los ángulos de inclinación puede ser problemático ya que solo está considerando la diferencia de posición y no la velocidad (realmente, el impulso) del vehículo.
Control PID
Puede ser mejor servido usando bucles de control PID para el balanceo y el cabeceo del vehículo. Es decir, una vez que arregle su código y pueda alcanzar su objetivo, supongo que comenzará a sobrepasarlo, oscilando de un lado a otro. Un PID sintonizado correctamente evitará que eso suceda mientras le permite acercarse rápidamente al objetivo.
Xy