Jump to content
    

Кватернионы и реальная механика

Вы возьмете вектор [cos(a-va),sin(a-va),0], где а - референсный курс, а va - курс по результатам интегрирования, то это будет вектор ошибки по курсу в звездной системе координат. Преобразовав этот вектор в систему координат IMU как раз и получатся ошибки по каждой из осей. Дальше PI-регулятор и добавка к данным с гироскопа. Все.

 

Хорошо, рефренсный курс равен 0, va - курс по результатам интегрирования. Но повторюсь, если бы механика лежала на столе, это бы сработало, но сама механика на корабле тоже вращается, поэтому курс по результатам интегрирования - это сумма: поворот корабля + уплывание гироскопа. Как отсюда выделить уплывание чтобы вычислить собственно разницу между курсом механики и курсом по результатам интегрирования?

 

энкодеры на оси приделайте

 

Так они есть, что это дает?

Share this post


Link to post
Share on other sites

Как отсюда выделить уплывание чтобы вычислить собственно разницу между курсом механики и курсом по результатам интегрирования?

 

Да не надо ничего выделять. Оно просто будет всегда в нулевой курс утягивать. Это тоже самое, что просто с занулением данных гироскопа, но более культурно (меньше ошибка, если одновременно с креном происходит поворот по курсу). А рамка никуда у Вас не повернется. Углы Эйлера по крену и дифференту не зависят от курса, так что просто поворачиваете рамку на обратные углы и все.

Share this post


Link to post
Share on other sites

Да не надо ничего выделять. Оно просто будет всегда в нулевой курс утягивать. Это тоже самое, что просто с занулением данных гироскопа, но более культурно (меньше ошибка, если одновременно с креном происходит поворот по курсу). А рамка никуда у Вас не повернется. Углы Эйлера по крену и дифференту не зависят от курса, так что просто поворачиваете рамку на обратные углы и все.

 

Да, спасибо! Действительно если утягивать в нулевой курс проблема с рассинхронизацией вроде должна решиться. Все оказывается просто... Проверю на реальной железке.

Share this post


Link to post
Share on other sites

Чтобы не плодить новые темы, напишу тут. Я работаю уже продолжительное время с датчиком BNO055, реализую получение информации об абсолютной ориентации изделия на карте. У него есть возможность выдавать на выход кватернионы и углы Эйлера. Все пишут везде, что с углами Эйлера могут быть проблемы из-за эффекта "складывания рамок" и от того, что углы Эйлера зависят от выбора очерёдности поворота по углам. Мне с этим не всё ясно, не могу понять следующее:

1. Актуальна ли проблема Gimbal Lock (Складывание рамок) для MEMS гироскопов? Там же другая конструкция и рамок по сути нет.

2. Если ответ на 1 вопрос - да, то могу ли я надеяться, что Bosh уже решили эту проблему за меня внутри своего датчика с помощью данных магнетометра и акселерометра? Находил патенты, что такие алгоритмы есть, но разбираться в формулах нет времени, нужно делать изделие. Сам Bosh почему-то об этом в ДШ молчит.

3. Почему углы Эйлера это такая проблема, если можно узнать заранее в какой последовательности датчик и записывает и воспроизводить так же? Мы же не рандомно каждый раз их применяем, а по алгоритму. Почему обязателен переход на кватернионы?

Share this post


Link to post
Share on other sites

21.10.2021 в 16:17, Prizrak_Kommunizma сказал:

1. Актуальна ли проблема Gimbal Lock (Складывание рамок) для MEMS гироскопов? Там же другая конструкция и рамок по сути нет.

2. Если ответ на 1 вопрос - да, то могу ли я надеяться, что Bosh уже решили эту проблему за меня внутри своего датчика с помощью данных магнетометра и акселерометра? Находил патенты, что такие алгоритмы есть, но разбираться в формулах нет времени, нужно делать изделие. Сам Bosh почему-то об этом в ДШ молчит.

3. Почему углы Эйлера это такая проблема, если можно узнать заранее в какой последовательности датчик и записывает и воспроизводить так же? Мы же не рандомно каждый раз их применяем, а по алгоритму. Почему обязателен переход на кватернионы?

1. Актуальна. Это не проблема конкретных датчиков, а математическая проблема при использовании математики углов Эйлера. Если вы свое устройство повернете на неправильные углы, то и возникнет проблема складывания рамок - у вас 2 угла эйлера будут принимать одинаковые значения (это конечно так, в общем и целом).  

2. Будет видно из того как их вычисляют (сам не смотрел, лень). А с математикой все равно придется разобраться, если хотите точно знать как будет вести себя ваше устройство.

3. Тот же ответ что и п.1.

 

Share this post


Link to post
Share on other sites

1, А если моя цель просто показывать юзеру текущие углы крена, рысканья и тангажа без необходимости воспроизводить по ним положение датчика на компе или где-то ещё, то проблема сохраняется? Или она только при воспроизведении и пересчёте координат будет возникать?

Edited by Prizrak_Kommunizma

Share this post


Link to post
Share on other sites

On 11/1/2021 at 2:48 PM, Prizrak_Kommunizma said:

1, А если моя цель просто показывать юзеру текущие углы крена, рысканья и тангажа без необходимости воспроизводить по ним положение датчика на компе или где-то ещё, то проблема сохраняется? Или она только при воспроизведении и пересчёте координат будет возникать?

Проблема складывания рамок только тогда когда эти рамки физически существуют. Значения углов могут меняться сколько угодно быстро в окрестности сингулярной точки (тангаж ±90°) и по отдельности не отражать угловой скорости датчика. То есть если медленно провернуть ось X вокруг оси Y, то в нижней/верхней точке два других угла "мгновенно" сменят значения на 180°. Конкретные оси и углы могут меняться, в зависимости от принятых систем координат и последовательности поворотов.

Share this post


Link to post
Share on other sites

Добрый день. Продолжу тему. Столкнулся с проблемой складывания рамок на IMU датчике BNO055. Считываю квантерионы с датчика и перевожу в углы Эйлера, на что получаю следующий результат:

1. На рисунке 1 датчик в изначальном положении.

2. На рисунке 2 датчик поворачиваю на 90 градусов относительно оси roll, проблем не возникает.

3. На рисунке 3 датчик поворачиваю на 90 градусов относительно оси pitch, после 60 градусов roll начинает увеличиваться. При этом pitch не увеличивается больше 89 градусов, а уменьшается, место него увеличивается roll.

Не вполне понимаю от куда начинать искать решение проблемы. Квантерионы вроде должны решать проблему складывания рамок.

Screenshot from 2024-12-25 11-25-07.png

Screenshot from 2024-12-25 11-25-32.png

Screenshot from 2024-12-25 11-25-50.png

Share this post


Link to post
Share on other sites

5 часов назад, trojninalex сказал:

Не вполне понимаю от куда начинать искать решение проблемы. Квантерионы вроде должны решать проблему складывания рамок.

Они (кватернионы) успешно эту проблему решают: при любом положении рамок будет существовать соответствующий кватернион, а, вот, с углами Эйлера такое не прокатит.

Share this post


Link to post
Share on other sites

30 минут назад, Палыч сказал:

Они (кватернионы) успешно эту проблему решают: при любом положении рамок будет существовать соответствующий кватернион, а, вот, с углами Эйлера такое не прокатит.

Да, но углы у меня расчитываются как раз по кватерионам. Не вполне понимаю почему, но кватерионы из датчика идут с этой проблемой

Share this post


Link to post
Share on other sites

Если найдете точное определение углов Эйлера, от чего до чего измеряется угол и в каком диапазоне, то полагаю сможете проверить, что никакой проблемы нет и углы рассчитаны правильно.

Share this post


Link to post
Share on other sites

.. кватерионы из датчика? Это как? Их посчитать процем нужно, беря данные из датчика. Вы хоть почитали даташит на этот BNO055? Где там написано что он выдаёт кватернионы? Читаем тогда про Меджевика.

Share this post


Link to post
Share on other sites

В кватернионе X^2+Y^2+Z^2+W^2 должно быть =1.

У вас не сходится. Наверное что то с ценой деления напутали.

Перечитайте внимательно документацию.

Share this post


Link to post
Share on other sites

10 часов назад, Aner сказал:

.. кватерионы из датчика? Это как? Их посчитать процем нужно, беря данные из датчика. Вы хоть почитали даташит на этот BNO055? Где там написано что он выдаёт кватернионы? Читаем тогда про Меджевика.

Пункт 3.6.5.5 Orientation (Quaternion) так-же 4.3.33-4.3.40

12 часов назад, amaora сказал:

Если найдете точное определение углов Эйлера, от чего до чего измеряется угол и в каком диапазоне, то полагаю сможете проверить, что никакой проблемы нет и углы рассчитаны правильно.

Кстати да не обратил внимание, в пункте 3.6.2 Data output format указано что pitch -180..180 roll -90..90 и yaw 0..360.

23 минуты назад, dOb сказал:

В кватернионе X^2+Y^2+Z^2+W^2 должно быть =1.

У вас не сходится. Наверное что то с ценой деления напутали.

Перечитайте внимательно документацию.

Перепроверю 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...