Я работаю над квадротором. Я знаю его позицию - , куда я хотел бы пойти - целевую позицию , и из этого я вычисляю вектор - единичный вектор, который приведет меня к моей цели:б в
c = b - a
c = normalize(c)
Так как квадротор может вращаться в любом направлении без вращения, я попытался сделать следующее:
- повернуть на угол рыскания роботов
- разбить его на его компонентов
- передать их роботу как углы крена и тангажа.
Проблема в том, что если рыскание составляет 0 ° ± 5, то это работает, но если рыскание близко к +90 или -90, оно терпит неудачу и поворачивает в неправильных направлениях. Мой вопрос: я что-то упускаю здесь очевидное?
quadcopter
uav
navigation
slam
kinect
computer-vision
algorithm
c++
ransac
mobile-robot
arduino
microcontroller
machine-learning
simulator
rcservo
arduino
software
wifi
c
software
simulator
children
multi-agent
ros
roomba
irobot-create
slam
kalman-filter
control
wiring
routing
motion
kinect
motor
electronics
power
mobile-robot
design
nxt
programming-languages
mindstorms
algorithm
not-exactly-c
nxt
programming-languages
mindstorms
not-exactly-c
raspberry-pi
operating-systems
mobile-robot
robotic-arm
sensors
kinect
nxt
programming-languages
mindstorms
sensors
circuit
motion-planning
algorithm
rrt
theory
design
electronics
accelerometer
calibration
arduino
sensors
accelerometer
Хамза
источник
источник
Ответы:
Повторно внедряя ваше решение, я получаю это:
Угол между векторами
Во-первых, вам нужен угол между точкамиA и В а не единичный вектор.
Угол поворота автомобиля
Заголовок против Yaw
90-градусное перекрытие между этими измерениями в сочетании с добавлением (вместо вычитания) рыскания транспортного средства от желаемого рыскания может быть причиной того, что все работало, когда ваша цель находилась в пределах ± 5 ° и плохо себя вел при ± 90 °.
Преобразование в Компонент X и Y
ПИД-контроль
Возможно, вам лучше всего использовать петли ПИД-регулятора для крена и шага автомобиля. То есть, как только вы исправите свой код и сможете достичь своей цели, я предполагаю, что вместо этого вы начнете выходить за его пределы - колебаться взад и вперед. Правильно настроенный PID предотвратит это, но позволит быстро приблизиться к цели.
источник
Я предполагаю, что вы говорите о трехмерном векторе здесь. Вы можете просто так обобщить
normalize()
? Это так часто (я никогда не видел это так, если это так, то новости для меня). В противном случае очевидные проблемы с компасом относятся к каждому из компонентов X и Y. Почему бы не назвать их креном и / или тангажом и / или рысканием? (Смешение 3D и 2D номенклатуры ставит вопрос в тупик).Моя 2D нормализация выглядит примерно так;
Если это действительно квад, я предполагаю, что ваши компоненты X и Y действительно YAW, Altitude ((X, Y) и Z). Вам нужно будет обработать
YAW(X, Y)
в 2D и просто сбросить или набрать высоту для Z (и опять же, поэтому я подозреваю, что нормализация - это больше, чем у вас).источник