Debarolle

Инерционный трекер своими руками

Здравствуйте!

 

Хочу рассказать про свой опыт постройки и настройки инерционного датчика положения головы. Думал сначала назвать тему «инерционный трекер по-быстрому», но с учётом времени доставки деталей из поднебесной, «по-быстрому» вряд ли получится. Но, перехожу к делу.

Принцип действия

Широко известен и описан, в том числе на этом форуме. Представляет собой комбинацию гироскопа, акселерометра и магнитометра, устроенных в одной, двух или трёх микросхемах. Оцифрованные значения этих трёх датчиков отправляются на обработку в процессор, чаще всего Atmega в исполнении Arduino или клонов. Далее, выраженное в угловой форме, положение головы (или того, к чему прикрепили плату с датчиками) по USB передаётся на PC для дальнейшего употребления. Я пробовал заставить эту конструкцию изображать из себя джойстик, но решил, что это не так удобно, как протокол Freetrack или Trackir, поэтому решил (и предлагаю) использовать FaceTrackNoIR со специальным плагином.

За и против

+ Удобнее фритреков и трекиров, так как не нужна видеокамера и нет зависимости от освещения

+ Весь код в открытом доступе, простор для экспериментов

- По-прежнему нужны провода (но это решаемо, Bluetooth наше всё)

- Не умеет фиксировать сдвиг головы (работа в процессе)

Железо

Где взять

Aliexpress, DX, eBay. По ключевым словам.

 

Предупреждение: не покупайте ардуино и COM-USB переходники с чипами от FTDI: производитель встроил в свой новый драйвер закладку, которая убивает "левые" чипы. Как отличить: в описании товара будет написано RT232RL или FTDI. Если есть сомнения, лучше свяжитесь с продавцом. Я беру платы с чипом CH340.

Для тех, кто уже купил, восстановление: http://habrahabr.ru/post/241299/

 

Процессорная плата:

Arduino Nano: мой выбор

post-88625-0-96624100-1411158963_thumb.j

 

Arduino Pro Micro: приемлемо

post-88625-0-72244800-1411158956_thumb.j

 

Arduino Leonardo: можно использовать, но я не рекомендую

Датчики:

GY-85 – лучший из всех, что я пробовал, работает сразу и без калибровки

GY-86 – работает хорошо, но при каждом включении нужно дать ему время на автокалибровку ок. 1 минуты

GY-80 – работает; но на том коде, что я использовал, почему-то «пружинит», т.е. сам возвращается в нулевое положение

MPU-9150 – кода в открытом доступе нет. По идее работать должен, но у меня сильно пружинит

GY-521 – не надо использовать, у него нет магнитометра

Что с ними делать

Спаять, как на фото (или лучше). Обратите внимание, чтобы датчик не был расположен слишком близко к ардуино – иногда от этого начинает хуже работать (наводки на компас?)

 

Схема пайки:

Датчик->Arduino

VCC_IN->3.3v

SCL->A5

SDA->A4

GND->GND

Софт

Подготовка

Код для ардуино распаковать, открыть программой (п. 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 на основном экране).

 

Сохраняем настройки и взлетаем.

Спасибо, что прочитали.

Альтернативная версия инерциального трекера для сенсоров GY-85 от mega_mozg

AHRS Firmware for the SparkFun 9DOF Razor IMU and SparkFun 9DOF Sensor Stick

читаем родную страничку вникаем и разбираемся, особенно "wiki/Tutorial".

В пристегнутом архиве "RazorAHRS_FaceTrack.rar" версия "razor-9dof-ahrs-Release-v1.4.2" с добавленным модулем "FaceTrack.ino" так нужным нам выводом в формате HATIRE.

Использованы следующие версии программ:

"arduino 1.6.5"

"processing-2.2.1-windows32"

"opentrack-2.3-rc13p2"

Кому лень читать, кратко в картинках что да как:

1) ПРОШИВКА

В arduino открываем "Razor_AHRS.ino", зашиваем в нашу любимую платку и любуемся

post-59452-0-25009900-1436552810_thumb.p

Любоваться можно и в processing открыв файл "Razor_AHRS_test.pde"

post-59452-0-06460600-1436552817_thumb.p

Вот сейчас можно покрутить и проверить работу сенсора, я словил мощный эффект пружины по рысканию. нужно калиброваться.

2) КАЛИБРОВКА

Укладываем сенсор на мягкую поверхность и в мониторе ком порта вбиваем первую команду #oc старт калибровки.

post-59452-0-15043400-1436552823_thumb.p

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

снова аккуратно укладываем, чтобы не сбилась калибровка. копируем строчку "accel x,y,z (min/max) = X_MIN/X_MAX Y_MIN/Y_MAX Z_MIN/Z_MAX".

post-59452-0-57638100-1436552829_thumb.p

Переходим к калибровке магнитометра, команда #on

post-59452-0-84509600-1436552836_thumb.p

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

Копируем строчку "magn x,y,z (min/max) = X_MIN/X_MAX Y_MIN/Y_MAX Z_MIN/Z_MAX"

Снова аккуратно укладываем.

post-59452-0-49964800-1436552843_thumb.p

Переходим к калибровке гироскопа. жестко фиксируем (я лепил скотчем к столу). комманда #on.

post-59452-0-17587400-1436552850_thumb.p

Даем немного времени собрать статистику.

Копируем строчку "gyro x,y,z (current/average) = .../OFFSET_X .../OFFSET_Y .../OFFSET_Z".

razor_ahrs_08.png

post-59452-0-74683200-1436552856_thumb.p

Монитор порта можно закрывать. идем в arduino ищем "// SENSOR CALIBRATION"

Вписываем данные из наших строчек калибровки

razor_ahrs_09.png

post-59452-0-62968900-1436552862_thumb.p

Сохраняем скетч, записываем в устройство. В Processing, открыв файл "Razor_AHRS_test.pde", наблюдаем, как изменилась реакция сенсора.

Если всё плохо возвращаемся к калибровке: может быть что-то было не так, а еще лучше пересмотреть оригинальную инструкцию калибровки.

3) ИСПОЛЬЗУЕМ

Снова в arduino ищем строку "int output_format = OUTPUT__FORMAT_TEXT;" и меняем её на "int output_format = OUTPUT__FORMAT_FACETRACK;"

Сохраняем скетч, записываем в устройство.

post-59452-0-01387600-1436552869_thumb.p

Открываем opentrack и настраиваем

post-59452-0-69683800-1436552879_thumb.p

Улучшенная калибровка магнитометра

1) архив "EJML_libraries.rar" распаковываем в каталог программы "processing-2.2.1".

2) открываем программу "processing", меню "file -> preferencies" в первой графе "Sketchbook location" указываем каталог где лежит сама программа "processing.exe".

3) переоткрываем "processing"

3) архив "Magnetometer_calibration.rar" распаковываем

4) программой "processing" открываем файл "Magnetometer_calibration.pde",

если сенсор подключен и EJML библиотеки распакованы в правильное место, должна появится сфера и мы начинаем процесс калибровки.

Если сфера не появилась, ищем в консольном окошке Processing список COM-портов, и в скрипте выставляем порт нашей платы.

post-59452-0-97558700-1436889781_thumb.p

Я долго и много крутил сенсор во всех положениях и всех плоскостях пока не заполнились почти все точки сферы данных

5) после этого нажимаем клавишу пробел и получаем результат калибровки

post-59452-0-62635100-1436889788_thumb.p

Обратите внимание на подчеркнутые запятые: там должны быть точки (исправляем вручную, это скорее всего косяки локализации виндовс).

Эти три строчки копируем и вносим в основной скрипт.

6) Заливаем скрипт и смотрим, что получилось.

RazorAHRS_FaceTrack.rar

Magnetometer_calibration.rar

EJML_libraries.rar

 

Конец.

 

Дополнено.

Изменено пользователем MarkVader
medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

хм, а дальше, приспособить к голове дисплей от смартфона самсунга и получится такой себе окулус рифт )

medal medal medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

хм, а дальше, приспособить к голове дисплей от смартфона самсунга и получится такой себе окулус рифт )

Всё уже придумано до нас: http://www.durovis.com/

 

Экранчик HD 7" уже лежит на полочке, для опытов. С линзами непросто.

Изменено пользователем Debarolle
medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://www.cnet.com/news/googles-cardboard-vr-headset-is-no-joke-its-great-for-the-oculus-rift/

 

Всё уже придумано до нас: http://www.durovis.com/

 

Экранчик HD 7" уже лежит на полочке, для опытов. С линзами непросто.

 http://www.cnet.com/news/googles-cardboard-vr-headset-is-no-joke-its-great-for-the-oculus-rift/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
    •  

Подготовка

Код для ардуино распаковать, открыть программой (п. 3), подключить плату с припаянным датчиком, код скомпилировать и загрузить в процессор.

 

Вот с этого момента поподробнее пожалуйста.

medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот с этого момента поподробнее пожалуйста.

Привет,

подробнее:

1. Подключить плату (с припаянным датчиком) к компьютеру. Произойдёт автоматическое распознавание устройства и в системе появится новый COM-порт

2. Код для ардуино (из п.4) распаковать на диск. При распаковке образуется отдельная папка, где лежат все необходимые файлы

3. Запустить Arduino IDE (из п.3), в этой программе открыть (File->Open...) главный файл из распакованной папки. Главный - это с расширением .ino

4. В Arduino IDE выбрать тип платы Tools->Board и COM-порт, к которому подключена плата Tools->Serial Port

5. В IDE нажать круглую кнопку со стрелкой (Upload), дождаться, пока код скомпилируется и загрузится.

6. Закрыть IDE

Всё.

medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет,

подробнее:

1. Подключить плату (с припаянным датчиком) к компьютеру. Произойдёт автоматическое распознавание устройства и в системе появится новый COM-

Ок. А теперь вот это разжувать. Куда плату пихать или припаивать к ней усб? Или еще чего?

medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще конечно алес полный..... Я просто только сейчас понял какой потенциал в этих датчиках. Скажите, а для тех кто имеет старые телефоны. Не проще придумать каку-то держалку для головы ( на верхнюю дугу наушников) и к ней прикреплять айфоны или любые устройства с датчиками??? У меня валяется без дела и 2g, и 3g, и 4g... Их вес не проблема если по центру дуги расположить. А далеее или провод или блютус. Да и смартфоны же не единственные устройства. Есть еще просто плееры вроде с датчиками и еще что-то.

Да вообще ничего паять не надо . Софтинку надо придумать под эти устройства (распространенные в жизни) и всё. Сколько народу сразу купит. Это была просто панацея от всех этих камер, засветов и углов работы.

medal medal medal medal medal medal medal medal medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ок. А теперь вот это разжувать. Куда плату пихать или припаивать к ней усб? Или еще чего?

Не вопрос. На плате, в зависимости от модели, есть разъём mini- или micro-USB. Берешь шнурок, чтобы с одной стороны был обычный USB, а другой мини или микро. Им и подключаешь.

 

Приятного аппетита

medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще конечно алес полный..... Я просто только сейчас понял какой потенциал в этих датчиках. Скажите, а для тех кто имеет старые телефоны. Не проще придумать каку-то держалку для головы ( на верхнюю дугу наушников) и к ней прикреплять айфоны или любые устройства с датчиками???

См. ссылки выше на durovis и поделки от гугловцев. Попробуйте, расскажите, что получилось.

Во, вот теперь ясно. В голову темы добавь разъяснения.

Исходное сообщение закрыто для редактирования

medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хм, если брать на ебай адренонано и датчик gy-85 меньше тысячи по стоимости выйдет. Пару часиков работы с хорошим паяльником, неплохая альтернатива втраку, а трекиру когда наклоны головы обрабатывать научится. Хотя в характеристиках датчика написано что он таки 6доф а коегде пишут что и 9.

medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за темку, собрал на панельке, завелась.

Это гораздо интереснее классического трекира, ни те камер, ни те отражателей, ни те кепок )

 

 

Хм, если брать на ебай адренонано и датчик gy-85 меньше тысячи по стоимости выйдет. Пару часиков работы с хорошим паяльником, неплохая альтернатива втраку, а трекиру когда наклоны головы обрабатывать научится. Хотя в характеристиках датчика написано что он таки 6доф а коегде пишут что и 9.

9-ти, т.к. в нем акселерометр (3 оси), гироскоп (3 оси) и магнитометр (он тоже трехосный)

 

А вот в том, что перемещения добавят, да и наклон (наклон есть, а вот смещение, но будем верить), как-то сомневаюсь.

Код для ардуинки заточен под FPV полетов.

Изменено пользователем a___k___s
medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

См. ссылки выше на durovis и поделки от гугловцев. Попробуйте, расскажите, что получилось.

 

 

Нет. Я не совсем это имел ввиду. по ссылкам там какая-то фича с 3д, где смартфон исползуется как экран. Я имел ввиду немного другое. Все айфоны (например) начиная с самого (2g) первого имеют датчики. Помните самые простеqшие приложения "уровень" и тому подобные. Я вот и говорю, не один ли это из вариантов для такого рода тракиров? Качаем приложение какое-то на устройство, коннектим смартфон с компом посредством блютуса. А смартфон или какое-то другое ios/android устройство крепим на башке, но не перед глазами, а грубо говоря на темечке (например на дугу наушников плашмя). Собственно фишка в том, что аппартано делать ничгео не надо. Вопрос двух софтин (для устройства и для компа). Неужели никто еще так не пробовал делать. Ведь это интересный выход для тех у кого есть старые смартфоны, но при этом нет рук/мозгов чтобы самому что-то паять. Не уверен по поводу оси приближение но повороты в двух осях и наклоны должны четко работать.

medal medal medal medal medal medal medal medal medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нет. Я не совсем это имел ввиду. по ссылкам там какая-то фича с 3д, где смартфон исползуется как экран. Я имел ввиду немного другое. Все айфоны (например) начиная с самого (2g) первого имеют датчики. Помните самые простеqшие приложения "уровень" и тому подобные. Я вот и говорю, не один ли это из вариантов для такого рода тракиров? Качаем приложение какое-то на устройство, коннектим смартфон с компом посредством блютуса. А смартфон или какое-то другое ios/android устройство крепим на башке, но не перед глазами, а грубо говоря на темечке (например на дугу наушников плашмя). Собственно фишка в том, что аппартано делать ничгео не надо. Вопрос двух софтин (для устройства и для компа). Неужели никто еще так не пробовал делать. Ведь это интересный выход для тех у кого есть старые смартфоны, но при этом нет рук/мозгов чтобы самому что-то паять. Не уверен по поводу оси приближение но повороты в двух осях и наклоны должны четко работать.

 

Можно, осталось найти решение.

Мне не удалось найти нормального.

Да и не ВСЕ смарты (на андройде) имеют необходимые датчики.

Опять же вес такого устройства слишком большой.

Ардуина куда интереснее, софтовое решение имеется, я сегодня приехал на работу, сунул все в платку и заработало, потратил 15 минут на все.

Изменено пользователем a___k___s
medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1, Как я понял: единственное что нужно сделать руками это припаять к плате юсб? правильно? 

или надо еще датчик припаивать к плате? (есть ли в сборе)

 

2. Все остально делается программным методом, трекер на базе Ноира?

 

3. в Бзс полет нормальный?

 

4. Сдвиги не работают по датчикам. Но на кнопки через игру их можно оставить работающими?

medal medal medal medal medal medal medal medal medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сдвиги всё же будут похоже скоро.

БзС не смотрел, на работе только WT, но в нем очень порадовала работа.

 

Покупается контроллер arduino или клон и датчик,

Можно припаивать, можно и извернуться, но там всего 4 провода, я взял старую мышь и тупо оттуда провод возьму, т.к. ардуина у меня большая, пусть она на столе лежит, потом может беспроводный вариант придумаю (мелкие ардуинки уже в пути).

 

А полет прекрасный, оптическим трекирам такого не снилось.

Изменено пользователем a___k___s
medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А я на ебае в продаже видел уже с мини усб припаяном вроде.

Это такая ардуина, можно и её.

Но датчики отдельно идут.

medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще конечно интересная тема. Думаю тоже попробовать. Еще один вопрос альтернативного передатчика. Вспомнил что джои от Плейстейшн 3 также оборудованы гироскопами(уменя их гора дома) Их никто никогда не ковырял? На сколько у них чувствителньые гироскопы (вообще с них во многих играх для пс3 можно играть именно по датчикам). Более того они могут подключаться через юсб, и даже есть драйвера для подключения их к компу. Вопрос можно ли вытащить с них инфу от датчиков. По механике там как раз вопрос плевый, корпус разобрать и всю ненужную пластмассу выкинуть. Еще один вариант второй жизни девайсов.

medal medal medal medal medal medal medal medal medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

припаять нужно только датчик к контроллеру, usb втыкается в готовый припаянный разъем (на промикро так). 

 

В БЗС у меня так:

 

Сдвиги на кнопки настраиваются 

 

Все применительно к DFRobot Beetle + MPU-6050 + софт MMtracker

http://forum.warthunder.ru/uploads/monthly_07_2014/post-59452-0-08609700-1405585510.jpg

Изменено пользователем Economist
medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сдвиги, как костыль, можно сделать автоматическими по углу отклонения в newview.

medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всем привет,

кратко по накопившимся вопросам:

 

Для упрощения процесса поиска, ссылки на датчики и ардуины:

 GY-85

GY-86

GY-80

MPU9150

 

Arduino Nano

 

Припаивается датчик к ардуине, а ардуина подключается к компьютеру через USB, который на ней уже есть (Не надо паять USB, смотрите на фото в первом сообщении!).

 

Относительно сдвигов (головы). Как уже упоминали выше, возможность передавать перемещение в протоколе плагина имеется, но никто из разработчиков этим пока, похоже, не заморачивался. Мне лично такие сдвиги нужны, поэтому я сам провожу эксперименты над имеющимся в руках кодом и железяками. Если получится - обязательно напишу.

Пока что повесил приближение на одну из свободных осей.

 

Касательно использования смартфонов и гироскопов от PS3. Да, это возможно. Да, это интересно. Нет, я этим заниматься не буду. Гироскопами от ПС3 - потому что у меня их нет, смартфонами, потому что неохота.

 

А охота мне собрать каркас для моего HD экранчика о семи дюймов и подключить его через HDMI. Но это задача третьей важности. Вторая важность - имплантировать ардуине синий зуб (и избавиться от проводов), а первая, как уже говорил, запрограммировать сдвиги.

 

 
medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

medal medal medal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу