Обсуждаем цифровые устройства...
Ответить

Re: Работа с MPU9250

Пн дек 19, 2016 10:45:14

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

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

Re: Работа с MPU9250

Пн дек 19, 2016 11:29:35

Я даже не пытался добиваться какой-то высокой точности, просто получил некий результат, а потом подогнал под визуально примерно подходящий.

По логике, гироскоп и акселерометр дают относительные данные, а магнетометр - абсолютные.

При калибровке магнетометра сохранял его начальное положение и потом вычитал из результата измерения. При этом после фильтра получал сильное вращение вокруг оси Z и болтанку по XY. Без такой калибровки - просто добавочный угол по Z. В одной статье видел упоминание о необходимости вычитать из показаний магнетометра некую фиксированную величину, зависящую от текущей географической координаты.
Сейчас я получил результат, который меня вполне устраивает, поэтому я скорее всего глубже копать не буду. Просто подберу оптимальную чувствительность и правильные направления осей поворота при окончательном положении сенсора в конструкции и всё. Прошивку ещё подчищу и выложу здесь исходники.

Re: Работа с MPU9250

Вт дек 20, 2016 10:13:25

Выкладываю исходники. Проект под Coocox и есть Makefile. Всё Rift-специфичное вычистил за ненадобностью. Есть 2 варианта HID устройств - 3-осевой джойстик и мышка с 2 кнопками №7 и №8. Такие номера кнопок выбраны для того, чтобы не дублировались кнопки основной мышки. "Нажимаются" наклоном сенсора влево/вправо. Перемещение курсора - наклон вперёд/назад, поворот влево/вправо. Так сделано для применения в качестве трекера головы для шлема ВР. Пока нажатие кнопок не проверил.
Возможны 2 варианта расположения платы модуля - плашмя, ось Х смотрит вправо, и вертикально, ось Х смотрит влево. Возможна сборка с и без использования магнетометра. С магнетометром пока есть проблемы. При работе с магнетометром есть 2 варианта формул - одна из них яко бы с устранением ошибки, но я большой разницы не заметил.
Направления вращения осей можно менять в одном из 2 файлов - в invensense.c при сохранении значений сенсоров или в filter.c при вычислении углов.
Для выбора нужных вариантов при сборке есть следующие параметры: USE_MAGNETOMETER, HID_JOYSTIK, X_RIGHT.
Пока всё.

P.S. По сравнению с базовой схемой Rift поменял 2 ножки - USB_DISCONNECT_PIN на РА15 и INV_SPI_SS на РА1.
Вложения
Joystik.rar
(288.33 KiB) Скачиваний: 257

Re: Работа с MPU9250

Сб дек 24, 2016 10:44:26

Решил доразобраться с магнетометром. В общем работает почти нормально - в начальном положении джойстика есть небольшое смещение по одной из осей, вероятно влияет географическое смещение. При работе как мышка в начале даёт движение курсора, но если немного подвигать, то курсор успокаивается.
Сами оси магнетометра более чувствительные, когда располагаются в вертикальной плоскости - раза в 2-3. В горизонтальной плоскости максимум находится при ориетации оси с севера на юг. При ориентации запад-восток - 0.
Уточнил направления вращений вокруг осей. Сейчас знак совпадает с документацией - положительный против часовой стрелки. Применительно к джойстику и мышке для получения нужных направлений нужно выбирать требуемые знаки для каждой оси.
Выкладываю новые исходники.
Вложения
Joystik.rar
(399.93 KiB) Скачиваний: 245

Re: Работа с MPU9250

Сб дек 24, 2016 11:00:15

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

Re: Работа с MPU9250

Сб май 06, 2017 18:21:54

Serj_K писал(а):Чтобы получить кватернион пришлось разбираться с входными данными для фильтра Мэджвика - оказалось, что ему нужно данные гироскопа именно в радианах давать.

Апну темку, если конечно это реально. Не поделитесь информацией что к чему? С осени прошлого года тоже пробовал корректно использовать MPU 9250, но сразу не получилось. Сейчас хочу всё-таки вернуться к этому вопросу, дай думаю спрошу ещё у Вас - "За спрос не бьют в нос" ;)

Re: Работа с MPU9250

Сб май 06, 2017 19:01:39

Serj_K писал(а):Чтобы получить кватернион пришлось разбираться с входными данными для фильтра Мэджвика - оказалось, что ему нужно данные гироскопа именно в радианах давать.

Апну темку, если конечно это реально. Не поделитесь информацией что к чему? С осени прошлого года тоже пробовал корректно использовать MPU 9250, но сразу не получилось. Сейчас хочу всё-таки вернуться к этому вопросу, дай думаю спрошу ещё у Вас - "За спрос не бьют в нос" ;)

Присоединяюсь
Последний раз редактировалось aen Сб май 06, 2017 19:36:34, всего редактировалось 1 раз.
Причина: Нарушение Правил форума п. 2.7

Re: Работа с MPU9250

Сб май 06, 2017 20:30:36

Нужно наверное более корректно раскрыть что у меня есть и что хотелось бы получить. Что есть:
1. Собрал из подручных материалов платформу Гью-Стюарта (скрепки, 6 серв, несколько кусков упаковочного полиэтилена).
2. Перепаял немного сервоприводы (добавил проводок снимать данные с потенциометра), чтобы снимать угол поворота серв.
Что хочется получить:
1. На основу и подвижную часть платформы добавить датчики положения в пространстве, уже есть два 9250.
2. Завести показания датчиков и управление в Blender для визуализации.
С чем сейчас борюсь - пробовал код для 9250 подключенный в Blender через pyserial, который вроде должен отдавать кватернионы для вращения кубика (простой модели), но пока всё что пробовал некорректно этот самый кубик вращает. Правда я сразу старался использовать все возможности 9250 по максимуму (AHRS + алгоритм Маджвика/Махони), сейчас буду пробовать с низов. Адекватный и понятный похожий код есть у Амперки.
Используемое железо - датчики от дядюшки Ляо, ардуинка Uno R3 (чип 328р) от него же.

Re: Работа с MPU9250

Пн май 08, 2017 16:02:23

kharlashkin писал(а):Не поделитесь информацией что к чему?
А в чём проблема? Исходники фильтра стандартные. Нужно просто подобрать коэффициент для требуемой скорости реакции.
Я в фильтр данные непосредственно не передаю - они находятся во внешней структуре и берутся из неё.
Проблема может быть в неправильной привязке осей магнетометра к осям акселерометра/гироскопа. Они не совпадают и это нужно учитывать. В мануале на чип оси указаны.
Вложения
filter.c
(11.96 KiB) Скачиваний: 545

Re: Работа с MPU9250

Пн май 08, 2017 16:26:47

Проблема может быть в неправильной привязке осей магнетометра к осям акселерометра/гироскопа. Они не совпадают и это нужно учитывать. В мануале на чип оси указаны.

Именно за это Вам большое спасибо, к сожалению явно это нигде не указано. Пойду копать даташит. Вижу что в Вашей реализации фильтра уже есть корректировка. Было бы неплохо описать Ваш опыт пошагово и с более простым кодом под ардуинку ;) но это так - мечты...
Изображение

Re: Работа с MPU9250

Пн май 08, 2017 18:18:12

Я под ардуину не пишу. Но фильтр - это математика и она под ардуиной будет такая же, не проще. Я так понял, что под корректировкой Вы понимаете исправленную ошибку. Исправленный код у меня закоментирован - используется старый вариант, так как особой разницы я не заметил, может я не прав в этом. Просто у меня углы поворота меленькие - в трекере головы. Для этой задачи я даже калибровку не делаю, так как результат меня устраивает.
А на ориентацию осей я сам был напоролся. Им бы в доке это выделить более явно, а то народ по диагонали читает.

Re: Работа с MPU9250

Пн май 08, 2017 18:44:08

А на ориентацию осей я сам был напоролся. Им бы в доке это выделить более явно, а то народ по диагонали читает.

Вы бы успели на пару часов раньше - я бы правильно наклеил направления осей на коробок, для калибровки компаса по этой инструкции. Ну хоть не успел с калибровкой :)

Re: Работа с MPU9250

Сб июн 10, 2017 12:20:26

Вдоволь наигравшись с фильтрами и не получив внятного результата - попробовал ардуиновский код с dmp для 9250. Результат более чем устраивает:

Думаю использовать и далее полученные таким образом кватернионы + добавить коррекцию по компасу.

Re: Работа с MPU9250

Чт ноя 02, 2017 17:36:48

Приветствую всех участников темы. Прочитав тему, понял, что есть люди которые хорошо разабрались с магнитометром. Хотел использовать этот чип (только магнитометром) по spi с частотой опроса 20 MHz. Но как я понял магнитометр работает только по i2c с частотой 400 kHz. Так ли это?
В кратце опишу, что хотел сделать. Есть двигатель с магнитом на валу. Магнитометром хотел определять абсолютное положение вала и его скорость. Двигатель будет вращаться с max скоростью 600 об/мин. Готовые данные нужно будет получать с частотой, примерно 40кГц. По i2c все вроде получилось, но при малой скорости вращения. По spi как я понимаю не судьба. Прошу подтвердить или опровергнуть мои предположения.

Re: Работа с MPU9250

Пн янв 20, 2020 18:44:15

А как обстоят дела у датчика с компенсация линейного ускорения? У меня на 9250 с фильтром Маждвика по сравнению с комплементарным фильтром на 6050 что-то работает, но если взять например BNO 055 то там вообще нет реакции тонгажа на линейное ускорение (при условии конечно что тонгаж действительно не менялся а датчик просто двигался вперёд). Вопрос, это проблемы датчика или математики фильтра? В теории т.к. этот датчик очень маленький акселерометр и гироскоп аппаратно могут быть одним устройством и данные ускорения могут пересчитываться в угловую скорость, это бы объяснило его чувствительность к вибрациям и линейному ускорению но тогда не понятно как-же на нём делают полётные контроллеры (для дронов) там ведь компенсация вибраций и линейного ускорения нужна обязательна, возможно они используют только акселерометр и магнитометр а гироскоп используют другой?


З.Ы. Вижу здесь выложен исправленный вариант кватернионного фильтра отличный от версии на офф сайте, я использую немного другой вариант кода но тоже с исправлениями может проблемы в этом?
Ответить