Это измененная и дополненная версия моего исходного сообщения на форуме Warthunder.
Здесь описан мой опыт изготовления и настройки инерционного датчика положения головы. Изменения и дополнения я буду выделять, либо публиковать отдельными сообщениями.
Принцип действия
Широко известен и описан, в том числе на форуме (имеется в виду forum.warthunder.ru). Представляет собой комбинацию гироскопа, акселерометра и магнитометра, устроенных в одной, двух или трёх микросхемах. Оцифрованные значения этих трёх датчиков отправляются на обработку в процессор, чаще всего Atmega в исполнении Arduino или клонов. Положение головы (или того, к чему прикрепили плату с датчиками), выраженное в угловой форме, по USB передаётся на PC для дальнейшего употребления. Я пробовал заставить эту конструкцию изображать из себя джойстик, но решил, что это не так удобно, как протокол Freetrack или Trackir, поэтому решил (и предлагаю) использовать FaceTrackNoIR со специальным плагином.За и против
+ Удобнее фритреков и трекиров, так как не нужна видеокамера и нет зависимости от освещения+ Весь код в открытом доступе, простор для экспериментов
- По-прежнему нужны провода (но это решаемо, Bluetooth наше всё)
- Не умеет фиксировать сдвиг головы (работа в процессе)
Железо
Где взятьAliexpress, DX, eBay. По ключевым словам.
Предупреждение: не покупайте ардуино и COM-USB переходники с чипами от FTDI: производитель встроил в свой новый драйвер закладку, которая убивает "левые" чипы. Как отличить: в описании товара будет написано RT232RL или FTDI. Если есть сомнения, лучше свяжитесь с продавцом. Сам я беру платы с чипом CH340.
Для тех, кто уже купил, восстановление: http://habrahabr.ru/post/241299/
Процессорная плата:
Arduino Nano: мой выбор [на момент написания исходной статьи]
Arduino Pro Micro: приемлемо
Arduino Leonardo: то же самое, что и микро
Датчики:
GY-85 – [на момент написания статьи] лучший из всех, что я пробовал, работает сразу и без калибровки
GY-86 – работает хорошо, но при каждом включении нужно дать ему время на автокалибровку ок. 1 минуты. Плюс к тому, хорошее разрешение датчиков и умеет выдавать кватернион
GY-80 – работает; но на том коде, что я использовал, почему-то «пружинит», т.е. сам возвращается в нулевое положение
MPU-9150 –
GY-521 –
Что с ними делать
Спаять, как на фото (или лучше). Обратите внимание, чтобы датчик не был расположен слишком близко к ардуино – иногда от этого начинает хуже работать (наводки на компас?)
Схема пайки:
Датчик->Arduino Nano
VCC_IN->3v3 или 5v
SCL->A5
SDA->A4
GND->GND
Датчик | Arduino Pro Nano |
---|---|
VCC_IN | 3v3 или 5v |
GND | GND |
SCL | A5 |
SDA | A4 |
Датчик | Arduino Pro Micro (Leonardo) |
---|---|
VCC_IN | VCC |
GND | GND |
SCL | 3 |
SDA | 2 |
Софт
- FaceTrackNoIR https://sourceforge..../facetracknoir/ скачать, установить
- Плагин для инерционников: https://sourceforge....rojects/hatire/ скачать, положить в ту папку, куда установился FaceTrack
- Редактор и загручик для Ардуино (Arduino IDE) http://arduino.cc/en/Main/Software скачать, установить. Прошивка под GY-85 компилируется только версией 1.0.6
- Код для ардуино (в зависимости от датчика):
Код для ардуино распаковать, открыть программой (п. 3), подключить плату с припаянным датчиком, код скомпилировать и загрузить в процессор.
1. Подключить плату (с припаянным датчиком) к компьютеру с помощью шнура USB. Произойдёт автоматическое распознавание устройства и в системе появится новый COM-порт
2. Код для ардуино (из п.4) распаковать на диск. При распаковке образуется отдельная папка, где лежат все необходимые файлы
3. Запустить Arduino IDE (из п.3), в этой программе открыть (File->Open...) главный файл из распакованной папки. Главный - это с расширением .ino
4. В Arduino IDE выбрать тип платы Tools->Board и COM-порт, к которому подключена плата Tools->Serial Port
5. В IDE нажать круглую кнопку со стрелкой (Upload), дождаться, пока код скомпилируется и загрузится.
6. Закрыть IDE
Настройка FaceTrackNOIR
Цепляем конструкцию к наушникам, подключаем к компьютеру (если ещё не). Открываем программу, в разделе Tracker Source 1 выбираем «Hatire Arduino», в настройках (кнопка Settings) выбираем COM-порт, на котором находится Arduino, в закладке Command Serial parameters 115200/8/none/1/CTS-RTS, Delay init 1000, delay start 1000. Нажимаем Start.
Через пару секунд начнут приходить данные (зелёные и серые цифры начнут меняться), а лицо с желтым прицелом придёт в движение.
Заходим в Curves и настраиваем чувствительность по желанию. При этом полезно запустить Warthunder в пробный вылет, чтобы проверять настройки «в живую». Возможно, потребуется изменить конфигурацию осей (кнопка Settings) и их полярность (Global Settings на основном экране).
Arduino + Nano спаяны по схеме. Дрова поставил в винд7, ошибок в диспетчере устройств нет. При попытке Upload компиляции пишет:
ОтветитьУдалитьРазмер скетча в двоичном коде: 23 716 байт (из 30 720 байт максимум)
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x41
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x41
avrdude: stk500_initialize(): (a) protocol error, expect=0x14, resp=0x42
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
Судя по ошибке, прошивальщик не может подключиться к плате. Скорее всего, неправильно выбран COM-порт
Удалитьcom порт COM3 (панель управления), и в программаторе 1.0.6 Arduino nano w/ ATmega328 on COM3.
УдалитьЯ с таким не сталкивался. В сетях пишут, что, возможно, нужно перепрошить бутлоадер. Плата действительно Nano?
УдалитьКитайский аналог nano. arduino NANO CH340 USB. Сегодня пробовал на другом компе. Та же проблема. Даже при снятом датчике. Reset делал RST-GND. Ничего не помогает. Где то писали, что возможно коротыш на самом чипе (правда не понятно на каком). Короче заказал новый контроллер. А завтра еще на работе попробую с кучкой проводов и разных ОСях.
УдалитьЗаказал еще USBASP програматор 10 pin - 6 pin. Попробую перезалить bootloader. А потом может кому еще пригодится.
УдалитьЕсли хочется копать глубже, то советую прочитать описание avrdude - с его помощью можно попытаться провести диагностику
Удалитьпродолжение (уточнение):
ОтветитьУдалитьНа Arduini светится POW и мигает L. На датчике GY-85 светится диод.
Пробовал 3 вольта припаять, и 5 вольт припаять. И землю перепаивал на Arduano с одно стороны на другую (D -> A). Ошибка всё та же.
Прошу помочь решить проблему! Очень хочется собрать мечту.
Получил новую ардуино. Скетч залился сходу.
ОтветитьУдалитьОтлично. Скоро закончу беспроводной вариант , потом в планах переделать прошивку под возможность калибровки. Почему-то 3я версия Processing не работает с библиотеками, которые авторы калибровки использовали...
УдалитьНе закончили вы прошивку под MPU-9150?! А то я себе приобрел 9250, теперь думаю как присобачить)
ОтветитьУдалитьЕсть полурабочая версия (ссылка есть в блоге выше).
УдалитьПока нового ничего не пишу, но в ближайшем приоритете версия на матричном алгоритме с калибровкой. Туда, наверное, вставлю и поддержку наиболее ходовоых датчиков)
ок, спасибо, нашел буду пробовать. И ждать от вас новостей.
ОтветитьУдалитьу меня пишет ошибка компиляции, в чем проблема может быть
ОтветитьУдалитьСкорее всего версия Arduino не та. Точнее не могу сказать, т.к. непоянтно, что компилируется.
Удалитьпредыдущая 1.0.6. оказалась кривой, с какой то цифрой еще и взята не там где надо.
ОтветитьУдалитьТеперь ошибку компилации не пишет, пишет то что она фото. Наверное GY дохлая..
фото на форуме, сюда не знаю как прицепить
На форуме ответил
Удалитьне компилируется ардуино нано и гы85
ОтветитьУдалитьПрошивка под GY-85 компилируется только версией 1.0.6
ОтветитьУдалитьС чем это связано? Почему возникает ошибка? Исправить можно?
Исправить можно. Если знаете язык, то приглядитесь к сообщениям, станет понятно, что исправлять.
УдалитьВсем привет! Пришли платки и мне, нано с датчиком 85ым. В итоге припопытки залить прошивку 1.0.6 ардруиной пишет такую ошибку
ОтветитьУдалитьBinary sketch size: 23,716 bytes (of a 30,720 byte maximum)
avrdude: stk500_getsync(): not in sync: resp=0x00
Что это может быть?
Привет, программа не видит плату ардуино. Проверь, тот ли ты выставил ком-порт в программе
УдалитьВсе то, на форуме уточник, 1.6.0 порпобовал версию ардруины, выдает другую ошибку, по ней на форуме пишут что пробуйте Разор прошивку. Пробую, выдает ошибку от 0х01 до 0х10 вроде.
УдалитьИ самое обидное на форуме не могу писать, пишет типа у меня аккаунт не связан с warthuner, хотя играю. Вообще не понимаю что происходит))
Мне нужно конкретно видеть, что за ошибка, иначе непонятно.
УдалитьСпасибо автору! Сделал себе и товарищу такой трекер. Все довольны.
ОтветитьУдалитьПрошу автора дать ссылку на рабочую программу по калибровке GY-85.И если есть инструкцию как это сделать. Спасибо!
Хочу выложить исправленный вариант Razor с сохранением калибровочных данных в ППЗУ.
УдалитьВсем привет! Увидел эту тему, и сразу захотелось махнуть свой самодельный ИК трекер на инерционку. Компоненты закупил, но сразу же возник вопрос: На фото где GY-85 + Pro Micro не очень отчетливо видно что куда паять, поэтому прошу автора, если можно, написать подробнее что куда паять для вышеуказанной связки. Спасибо.
ОтветитьУдалитьДобавил для Pro Micro
УдалитьСпасибо за схему, все спаял. После запуска утсройство определилось как Леонардо (на деле плата ПроМикро). Отсюда вопрос: Это нормальное явление или я что то не так прошил?). 2-е при тестах работоспособности устройства в FaceTrackNoir иконка вращалась, правда хаотично, но после остановки (кнопкой STOP) и последующего перезапуска (кнопка Start)трекер отваливался напрочь, и начинал работать только после передергивания USB шнура. Отсюда 2й вопрос - где искать причину такого поведения трекера? Спасибо.
ОтветитьУдалитьЛеонардо вместо про микро - нормально
УдалитьПо второму вопросу - тоже нормально, надо передергивать шнур. Из-за того, что управление USB у про микро встроено в процессор, работа с ком-портом отличается от плат на Atmega328. Что там сделать, чтобы оно не отваливалось, я пока не разобрался.
Настроил и потестил в тундре - супер. Только вот почему то в крайних точках по Pitch (+/- 30) идет отклонение в сторону и чем дальше тем оно больше нарастает. В чем может быть причина?
УдалитьТочно не могу сказать, но первое, что я бы сделал, это я бы настройки кривых посмотрел
УдалитьА чем GY-86 лучше GY-87 (у последнего, вроде, только барометрический альтиметр другого производителя, а так все микрухи те же самые, что и у GY-86)? Тем более, GY-87 дешевле. И чем связка GY-521(MPU6050) + GY-271 хуже всех выше названных (кроме отсутствия в ней альтиметра все микрухи те же самые)? А то эта связка в два раза дешевле даже GY-87 (щас по сотне за каждую из двух плат). Тоже должна гиперкомплексные скалярно-векторные координаты выдавать (енти кватернионы)
ОтветитьУдалитьВсё верно, самый бюджетный вариант на тех же датчиках - это 521+271/273. Только габариты больше.
ОтветитьУдалитьА от кватернионов пользы нам нет, к сожалению.
Этот комментарий был удален автором.
ОтветитьУдалитьПри покупке на алиэкспресс смотрите внимательно и берите Nano 3.0 Atmega328 а не 168, а иначе просто вы не сможете загрузить данный программный код (памяти не хватит)
ОтветитьУдалитьДобрый день. Не нашел у вас скетча для связки GY-521 с GY-271.
ОтветитьУдалитьЕсть какие то мысли (или уже готовый результат) по проекту, где кроме поворотов работает сдвиг (вместо поворота опрос сдвига).
Сейчас очень нужен именно сдвиговый, если не сложно поделитесь пожалуйста своими разработками (что б не повторять что уже кто то делал). Я же, в свою очередь, отдам рабочий код (если осилю).
GY521+GY271=GY86
УдалитьПо сдвигам всё относительно просто, если есть квалификация и достаточно свободного времени. С датчиков берется линейное и угловое ускорение, из которого вычисляется фактическое ускорение, из него вычитается влияние гравитации Земли, интегрируем для получения скорости, проводим через высокочастотный фильтр и еще раз интегрируем - на выходе искомое смещение.
Привет собрал про микро и gy85 откалибровал работает нормально далее выдергиваю из юсб и обратно в юсб работает очень медленно в какой плате проблема?
ОтветитьУдалитьпотыкал помыкал минут 5 все заработало (ги85+нано)
ОтветитьУдалитьприехал еще ги9250 но не пробовал пока датчики разные оказывается есть их цела куча! даже с атмегой и стм32 встроенными прямо на датчике а чем интересно они лучше или хуже?и как их втыкать и
куда? если контроллер у них самих уже есть
Лучше или хуже - зависит от конкретной платы.
УдалитьЗачем их втыкать? Заливать прошивку и пользоваться.
от платы контроллера? ну - нано уно и тд? логика и протоколы вроде одни и те-же? что-то не пойму. ну да ладно . вопрос то про то что если на датчике есть атмега328 то зачем такомудатчику еще и ардуина? так на датчике никакого юсб нет все те же адо сда и т п
ОтветитьУдалитьЕсли на плате уже есть Atmega, то ещё одна ардуина не нужна, это совершенно точно.
УдалитьЕсли на плате нет USB, то нужен переходник USB-Serial.
Платы бывают разные по по виду и удобству, даже если процессор одинаковый. У раздельного подключения (датчики и процессор на разных платах) есть то преимущество, что датчики можно ставить разные.
По типам процессоров - Код для Atmega не подойдет для ESP8266 или для stm32. Датчики тоже не полностью совместимы.
просто заказать хочется лучший - т е точный шустрый а выбор оказывается есть и довольно широкий (и не очень понятный)
ОтветитьУдалитьЗдравы будьте! Вопросец тут возник. Спаял, подключил, порт поймал... Но, код не грузится, выдает такое:
ОтветитьУдалитьArduino: 1.8.5 (Windows 10), Плата:"Arduino Nano, ATmega328P"
sketch\Sensors.cpp:9:21: fatal error: Sensors.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Ошибка компиляции для платы Arduino Nano.
Вопрос снят... Читать надо было внимательнее :)
Удалитьну и отлично :)
Удалитьребята. кто пробовал вместо ардуино использовать STM 32? до боли интересно будет ли разница или нет?!
ОтветитьУдалитьВ чем разница-то должна быть?
УдалитьМой самый первый вариант был на stm32, но для люди-то и с ардуиной с трудом могут разобраться.
stm32 интересна тем, что у нее должно хватить мощности для обсчета сдвигов. 2 интегрирования + частотная фильтрация.
интересна скорость обмена данными. есть ощутимая разница между скоростью обработки данными между ардуино и стм в плане тракира? или не стоит забивать голову. И ещё вопрос. какой вариант лучше использовать для беспроводного исполнения. Через зуб или лучше использовать связку из esp-01?
УдалитьРазница в скорости обработки довольно большая. На stm32 удавалось обрабатывать 100Гц датчик, отправлять в порт данные и еще на экранчике рисовать.
УдалитьДля беспроводного мне больше понравился вариант ESP, на платах типа WeMos.
А есть готовый вариант скетча СТМки и в какие пины пхать gy-85? уж больно хочу попробовать работу на СТМ. И есть ли адекватная замена GY-85 желательно без магнитометра? Мои уши профессиональные, соответственно сделаны на совесть и с железным ободом. Калибровка датчика решает эту проблему, но не полностью. Более того появляется ряд других проблем =)
УдалитьГотового нет, есть вариант на ESP8266 (см. выше публикации). Альтернатива GY-85 - GY-86 или связка GY-521+GY-271/GY-273 (что по сути то же, что и GY-86)
УдалитьЧтобы железный обод не так мешал, я выносил датчики подальше от наушников.
залепил вчера прямо на обод и откалибровал магнитометр. всё работает исправно и назад не возвращает камеру. Только одна проблема осталась. при подъёме камеры вверх и вниз происходит смещение вправо и влево соответственно, смещение небольшое и не критичное, но хочется добиться эталона. И всё же искренне надеюсь что будет вариант на СТМ, пусть даже сырой. Возможно смогу допилить.
ОтветитьУдалитьНа stm32 пока не планирую ничего, смысла нет - ESP8266 достаточно мощный + с беспроводной связью.
УдалитьПо 8266 см. выше, если что-то непонятно - постараюсь описать подробнее. Или может видео лучше записать?
Был бы очень признателен. Сам вроде головастый, полдома уже в ардуино навешал. но в статье с ESP8266 непонятно ваще нихрена =) А спросить как-то стыдно чтоли =) (видимо не такой я уж и далёкий) и коментарии раз 20 перечитал, как-то туго всё воспринимаю. поэтому если есть возможность детального описания того какие пины куда паять и какие библиотеки вливать в ардуино IDE - буду весьма признателен. Даже задоначу, если попросишь ;-)
УдалитьХорошо, постараюсь сделать. Я сейчас пока что не летаю, поэтому придется из закромов вытаскивать железяки.
УдалитьДонат обязывает, поэтому воздержусь :) Но можешь крепление заказать, если нужно :)
не, крепление не нужно, я сам тысячу креплений наделал за всё время. и все на 3д принтере. но благодаря последней калибровке мне удалось его победить непосредственно рядом с ободом... главное очень жестко его зафиксировать, чтобы магнитное поле не менялось относительно датчика. и можно смело калибровать. правда не с первого раза получится. но получится! А донат я имел ввиду чисто символический. на пиво с рыбкой, когда материал писать будешь =)
Удалитьp.s. - а если рассмотреть не esp8266 а более новый вариант esp32? Или такие мощи не в кассу?
Ладно, запишу - обмоем может быть :)
УдалитьESP32 не пробовал, не могу сказать. Делал на WeMos и на NodeMCU. Расскажу, как делал сам, а там уже по желанию.
Здравствуйте, решил собрать связку nano+gy85 и с толкнулся с проблемой- не работает магнитометр. Купил другую gy85 и проблема осталась. Позже выяснилось, что на платах стоят чипы магнитометра не HMC5883L, а QMC5883. Можно их как то заставить работать? Или плюнуть и купить связку pro micro+MPU-9250 и спаять edtracker? Спасибо за ответ
ОтветитьУдалитьЗаставить можно, если вместо библиотеки для HMC5883L использовать код для QMC5883L. Если есть навыки программирования, то стоит попробовать, если нет - то edtracker будет проще.
УдалитьСпасибо за ответ, тогда лучше возьму edtracker. И такой еще вопрос, на чем лучше его собирать, на 9150 или 9250?
УдалитьКстати в теме тундры смотрю тоже у пары человек похожая проблема с магнитометрами
УдалитьПро edtracker ничего не могу сказать - надо смотреть на их рекомендации. Насколько я понимаю, у них и то, и другое поддерживается. Вообще не уверен, что подключении 9250 к ардуине есть практический смысл, т.к. у атмеги может не хватить мощности на обсчет результатов на скорости 32кГц. Лучшее решение на сегодняшний день, как мне кажется, это MPU6050+HMC5883L либо MPU9250 подключать к esp8266.
УдалитьТ.е. от ардуин типа atmega328p или про микро пора отказываться, по возможности.
В форум тундры писать не могу - отключили за то, что долго не заходил в их игру. Будет возможность - напишите, что магнитометры QMC требуют другого кода.
А к esp8266+MPU9250 есть прошивка? И по поводу pro micro+MPU-9250, там ардуинка может захлебнуться или она просто весь потенциал 9250 раскрыть не сможет? На форуме тундры писать тоже не могу, перевели в группу "без постов и создания тем")))
УдалитьДля ESP + 6050 обязательно сделаю, как только соберусь снова летать. Вряд ли раньше весны. Был у меня пробный вариант, показывал отличные результаты даже без магнитометра.
УдалитьДля 9250 не помню, был ли доступен код с режимом DMP.
Насчет ардуины+9250 - как пишут умные люди, 9250 выдает слишком много данных, ардуина не успевает, из-за этого происходят ошибки в позиционировании.
MPU-6050 это GY-521? На форумах по edtracker особо о косяках не пишут, по этому думаю тогда взять pro micro+MPU-9250 на сейчас и до кучи ESP + 6050 для сборки к весне-лету.
ОтветитьУдалитьДа, GY-521 это 6050. Можно к нему до кучи взять GY-271 или GY-273 - это магнитометр. Само собой, с учетом, что могут подсунуть QMC
УдалитьПривет, такой вопрос собрал трекер, на ардуино леонардо микро и 5060. скетч из поста выше. проблема в том что постоянно уплывает YAW. Куда копать не подскажете?
ОтветитьУдалитьСкорее всего где-то железяка недалеко. Чтобы избежать уплывания, нужна калибровка, но прошивка для 6050 старая, и калибровки там кажется нет.
Удалитьв 6050 нету магнитометра, так что сомнительно что наводки каки-то.
УдалитьВ коде нету каллибровки. уже просмотрел его.
В GY-86 есть магнитометр, в GY-521 Нету. Калибровка для MPU-6050 не такая, как для магнитометра. Заливается спец. скетч, потом датчик фиксируется 6 раз по сторонам и полученные данные записываются в основную программу.
Удалитья ведь и написал что 521 а не 86.
УдалитьЕсли есть спец скетч для каллибровки 521 и значения эти можно внести куда-то в пресставленный скетч от 86, можете ткнуть носом в ссылочку? ). Спасибо.
Ссылки под руками нет, просто помню, что где-то натыкался и скачивал. В целом там всё довольно просто - считываются данные и запоминаются максимум и минимум по всем осям, потом вычисляется разница и записывается в регистры offset по каждой оси.
Удалить#if MPU6050_CALIBRATEDACCGYRO == 1
Удалить#define MPU6050_AXOFFSET 0
#define MPU6050_AYOFFSET 0
#define MPU6050_AZOFFSET 0
#define MPU6050_AXGAIN 16384.0
#define MPU6050_AYGAIN 16384.0
#define MPU6050_AZGAIN 16384.0
#define MPU6050_GXOFFSET -42
#define MPU6050_GYOFFSET 9
#define MPU6050_GZOFFSET -29
#define MPU6050_GXGAIN 16.4
#define MPU6050_GYGAIN 16.4
#define MPU6050_GZGAIN 16.4
#endif
похоже, что тут каллибровочные данные. но скетч каллибровки не компилируется на ардуино леонардо...
Обязан компилироваться. Но если Arduino IDE старая, либо наоборот, скетч старый на новой IDE, то могут быть проблемы, да.
Удалитьа, и в "Мониторе", если открывать из среды Ардуино, идут иероглифы вместо цуфр. Но Опентрек подхватывает значения как надо.
ОтветитьУдалитьдля опентрека формат бинарный, так что иероглифы - это норма
Удалитьмне очень понравилось, может ли кто то подобное собрать на заказ?
ОтветитьУдалитьНа Win-7 64bit поставить FaceTrackNoIR не могу. Это у меня руки кривые или не ставится?
ОтветитьУдалить