roboforum.ru

Технический форум по робототехнике.
Текущее время: 20 фев 2025, 05:06

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Вычисление кватерниона из данных компаса и акселерометра
СообщениеДобавлено: 19 сен 2017, 10:57 
Не в сети

Зарегистрирован: 19 дек 2016, 13:22
Сообщения: 10
Добрый день.
Копаю похожую проблему, уже несколько дней бьюсь не знаю с какой стороны подступиться. Может подскажет кто чего.
Итак имею китайский датчик MPU-9250, под него немного модифицировал код DMP MotionApps v4.1 чтобы можно было из буфера забирать данные магнитометра. Как бонус кватернионы из DMP после около 20 с. начинают вести себя стабильно - очень большой тест не делал но за 10 мин в спокойном состоянии по оси Z кватернион уезжает на несколько градусов.
Есть так же данные от магнитометра, которые после преобразования и фильтра низких частот совместно с акселерометром при спокойном положении довольно уверенно показывает на север (+Pi:-Pi), никак не могу придумать каким образом полученный мною угол рысканья совместить с полученным кватернионом.
Толкните в нужном направлении, тут многие "собаку съели" в датчиках положения в пространстве.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вычисление кватерниона из данных компаса и акселерометра
СообщениеДобавлено: 20 сен 2017, 10:43 
Не в сети

Зарегистрирован: 19 дек 2016, 13:22
Сообщения: 10
Ну вроде получилось совместить, осталась проблема корректного отображения при движении датчика и убрать "тряску" по оси Z.
https://youtu.be/7PBFrxIRjGU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вычисление кватерниона из данных компаса и акселерометра
СообщениеДобавлено: 20 сен 2017, 15:54 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
секрет смешивания кроется в том какие данные считать более верными и в какой момент времени.
как я понял под тряской вы подразумеваете девиацию значений оси Z в статическом положении?
Этот эффект связан с тем что гироскоп сильно врёт, и чтобы компенсировать ось Z используют компас, который тоже врёт.
Если уберёте тряску в статическом положении, будет заторможенная реакция в движении.
Можете попробовать пропустить выходные данные через небольшой медианный фильтр.

расскажите по подробнее как меняли код DMP MotionApps v4.1? правильно ли я понял, речь о коде который загружается в MPU-9250?

проблема компаса в том что в разных местах пространства у него будут разные критические значения магнитного поля, т.е. откалибровав в одном месте если перенести в другое получим неверное направление.
вот мои эксперименты https://www.youtube.com/watch?v=SXrsKto ... 77ZN7tLhV1
поэтому безоговорочно показаниям компаса верить нельзя.

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вычисление кватерниона из данных компаса и акселерометра
СообщениеДобавлено: 25 сен 2017, 14:31 
Не в сети

Зарегистрирован: 19 дек 2016, 13:22
Сообщения: 10
linvinus писал(а):
секрет смешивания кроется в том какие данные считать более верными и в какой момент времени.
как я понял под тряской вы подразумеваете девиацию значений оси Z в статическом положении?
Этот эффект связан с тем что гироскоп сильно врёт, и чтобы компенсировать ось Z используют компас, который тоже врёт.
Если уберёте тряску в статическом положении, будет заторможенная реакция в движении.
Можете попробовать пропустить выходные данные через небольшой медианный фильтр.

расскажите по подробнее как меняли код DMP MotionApps v4.1? правильно ли я понял, речь о коде который загружается в MPU-9250?

проблема компаса в том что в разных местах пространства у него будут разные критические значения магнитного поля, т.е. откалибровав в одном месте если перенести в другое получим неверное направление.
вот мои эксперименты https://www.youtube.com/watch?v=SXrsKto ... 77ZN7tLhV1
поэтому безоговорочно показаниям компаса верить нельзя.

Прошу прощения за несколько несвоевременный ответ, у меня чего-то не получается подписаться на тему, чтобы вовремя получать уведомления.
1. Да, под "тряской" подразумевалось именно вот то, что Вы написали (слово "девиация" пришлось загуглить - первый раз встречаю его) ;)
2. Применил обычный низкочастотный фильтр - "тряска" ушла. Да, появилась задержка в корректировке.
3. Про DMP MPU-9250 отдельная интересная история. Перепробовав кучу всевозможных скетчей и фильтров, вдоволь набаловавшись с калибровками всего и вся на одном корейском сайте нашелся код, который (О чудо!) корректно залился в 9250 и начал выдавать кватернионы, но без учета компаса. Перелопатив очень много документации по датчику и просмотрев много кода для него, немного поправил найденный код и получаемый кватернион начал вести себя более стабильно. Код на GitHub. Мои комментарии на русском, думаю там все понятно, но в исходном коде очень много "магии" и до конца разобраться что делать и как - непонятно.
4. Ваше видео очень познавательно. В принципе что-то такое я ожидал увидеть, особенно после этой картинки с хабра:
Изображение

А я в настоящее время после того как применил фильтр к данным, понял что неправильно я мыслил - а подсказать некому. Так как при вращениях не только вокруг оси Z, у меня кубик ведет себя очень некорректно. Сейчас методом "научного тыка" пытаюсь понять необходимую математику правильности вычислений корректировки угла рысканья. Пока ничего лучше не придумал, чем корректировка когда кватернион горизонтален...

Добавлено спустя 1 час 45 минут 2 секунды:
Специально сделал видео получения кватерниона в спокойном положении на протяжении 5 минут без корректировки компаса:
https://youtu.be/cLF15Tmqx68
Видно как к 10 секундам кватернион стабилизируется и ведет себя достаточно стабильно. Начальные значения кватерниона по q.w/q.z составляют примерно 0,9165/0,3887, через 5 минут (300 секунд) эти же значения составляют 0,9103/0,4028, что равняется углу поворота вокруг Z примерно по q.w в начале 0,3043 и 0,3068 в конце и примерно по q.z 0.1895/0.196. Разумеется если датчик довольно сильно двигать - плаванье по оси Z будет гораздо сильнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вычисление кватерниона из данных компаса и акселерометра
СообщениеДобавлено: 09 ноя 2017, 01:28 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
Цитата:
Видно как к 10 секундам кватернион стабилизируется и ведет себя достаточно стабильно.


почему он в эту точку стабилизировался у вас понимание есть? :)

если компаса нет, то можно попробовать стабилизировать данные через интегрирование акселерометра по оси Z, но там тоже много камней.
если есть иные датчики, например камера, лидар, то можно брать с них данные для компенсации оси Z. т.е. кода камера или лидар говорят что угловая скорость 0 то компенсировать ошибку гироскопа, это если в лоб, а можно и калманом.

за код спасибо.

для андроида есть приложение https://play.google.com/store/apps/deta ... .sitesin3d
насколько я понял оно использует стандартные данные андроида, но ведёт себя очень стабильно, я пока не копал почему оно так работает.

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вычисление кватерниона из данных компаса и акселерометра
СообщениеДобавлено: 09 ноя 2017, 12:21 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Не очень оно и стабильно там всё ЭТО работает, можно помотать несколько раз головой и ещё сделать несколько оборотов с возвратом обратно. Будет видно как всё уплывает относительно реальных координат. ;) Это всё игрушки: дешевые, быстрые решения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вычисление кватерниона из данных компаса и акселерометра
СообщениеДобавлено: 24 сен 2018, 20:33 
Не в сети

Зарегистрирован: 24 сен 2018, 20:03
Сообщения: 1
Согласен с kharlashkin, тоже использовал этот алгоритм. На мой взгляд самый адекватный из всех найденных в сети. Все остальные точно игрушки. Также покопался в коде, допилил извлечение данных магнитометра из пакета. Так же столкнулся с дрейфом оси Z. Озадачился согласованием кватерниона с данными магнитометра. По дрейфу обратил внимание на постоянство направления и величины дрейфа. Несколько раз наблюдал. За 10 минут уходит примерно на 2,5 градуса, за час примерно на 15. Пришел к выводу, что по оси Z датчик чувствует вращение Земли, был немало удивлён ) Ближе к сути. На сайте Invensens (производитель MPU9255/65) не нашел ничего про Motion Apps 4.1. Нашел описание invensense-embedded-motion-api-specifications 5.1.1 на каком-то зарубежном форуме и пакет invensense-motion-driver-6.1 на сайте Invensens. Пакет MD 6.1 оказался довольно "тяжелым" по сравнению с MA 4.1, но из описания стало понятно, что DPM, выполняющий бинарный код из библиотеки пакета, вычисляет только 6-ти осевой кватернион, грузит его в пакет вместе с отфильтрованными показаниями всех 9-ти датчиков, из которого потом вычисляются углы Эйлера. И засунуть в этот готовый кватернион показания магнитометра невозможно. По крайней мере в DMP. Если у кого-то есть предложения на этот счет буду рад услышать (прочитать).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO