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

Содержимое карманов

суббота, 20 сентября 2014 г.

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

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

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

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

За и против

Железо

Где взять
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не надо использовать, у него нет магнитометра Можно использовать совместно с GY-271/GY-273

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

Схема пайки:
Датчик->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
  • Код для ардуино (в зависимости от датчика):
    • GY-85 http://sourceforge.n. 85.zip/download
    • GY-86 https://sourceforge. ojects/ftrgy86/
    • GY-80 https://sourceforge. s/gy80facetrack

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

Читайте также:  Идей свечей своими руками

Результат:

Источник

TrackerIR или EDTracker или же Инерционный трекер

NovicePie

TrackerIR или же EDTracker эти приблуды нужны для отслеживания положения головы в пространстве, в основном используется в симуляторных игрушках (Arma 2\3, War Thunder, Euro Truck Simulator 2, DCS и тд).

Принцип работы у них похож:
Для TrackerIR нужна веб-камера, которая настроена так, чтоб могла увидеть светодиоды, обычно добавляют фильтр к линзе. В основном используются 3 ИК-диода, для глаза спектр не видим и сам софт под это дело лучше работает от 3 точек. Так же есть версия с ИК отражателями. От камеры светят ик-диоды на вас, а отражатели, которые прикреплены на вас отражают обратно на камеру. К примеру, я попытался повторить данный девайс с этого сайта, придерживался концепции.
Минусы:
1) Надо сидеть всегда прямо перед камерой.
2) Сложно найти баланс между удачными размерами самого девайса, чтобы отслеживание было нормальным, и тяжестью самого девайса.
3) Крепление. Обычно оно крепиться сбоку наушников, а это не удобно, если конструкция девайса тяжелая или же оно работает через кабель, если через 3АА батарейки, то это вес и перекос наушников на одну сторону.
4) «Рабочее» место должно находиться так, чтобы не попадал на камеру какой-либо посторонний свет, особенно от солнца.
5) И, кмк самая важная, все вычисления делает ваш CPU! В некоторых симуляторах не критично, а в некоторых лишняя вычислительная мощность процессора нужна
6) На краях поворота головы может трястись изображение, так как камера перестаёт видеть какой-то из диодов.

Я использовал софт от сюда. Перепробовал разные типы ИК диодов, где-то специально их линзы напильником срезал, чтобы пятно на камеру попадало больше. С резистором тоже игрался, так как хотелось, чтоб светило ярко, но чтоб диоды не сгорали, а они сгорали часто :С да и провод слишком длинный у меня был к зарядке на 5V. С креплениями я намучился также, пытался максимально облегчить девайс. Самое легкое, что было это пробка из под 5Л бутылки + 3 стержня от гелевой ручки + пару болтов, чтобы прикрепить к наушикам (у моей модели наушников был удобный «дизайнерский» паз для этого), но жесткость такой конструкции желало быть лучшего А ну и термосопли (надо было использовать моментальный клей с содой, который АлеХГуйвер рекламировал в последних видосах, но я о таком раньше и не знал)

Штука прикольная, входной порог низкий, единственное, что дорогое это найти подходящую камеру, желательно на 120fps.
Вот ещё есть чертежи для желающих на 3D сделать.

Для EDTracker нужна платка Arduino и датчики гироскопы и скачать прошивку. Брал инфу отсюда

Для Инерционного трекера нужна так же Arduino и датчик GY-85 и скачать софт от сюда. Инфу брал отсюда и отсюда

К моему сожалению, я плохо понимающий в Ардуино и в всех этих датчиках модулях. И смог нарыть старые статьи 2014-2016 года, и я уверен, что прогресс на месте не стоит. Хотелось бы собрать трекер на ардуино ( я даже не уверен, есть ли разница между EDTracker и Инерционного трекера ), но хотелось бы услышать ответы экспертов, есть ли смысл больше 1 датчика ставить, к примеру слева, сверху и справа на наушники и какие сейчас датчики нормальные? :С

Вообще, было бы здорово, если бы АлеХГуйвер сделал контент видосик на тематику отслеживания тела в пространстве и сравнил бы эти все трекеры или же внёс что-то своё, но кто я такой, чтобы просить уважаемого и занятого человека с повторами из интернета!

Источник

Инерционный трекер на базе Arduino и GY-85

Привет Хабр. Head tracker, иногда его же называют инерционный трекер — устройство, которое отслеживает движение головы в пространстве, то есть в трёх осях — X,Y,Z.

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

Данное видео, по большей части, дублирует текст статьи.

Целевая аудитория у этого устройства, как я это вижу в данный момент, примерно будет такая:

  • Геймеры, это решение отлично подходит для всякого рода авиасимуляторов, будь то War Thunder или космических симуляторов, как например Elite Dangerous(чуть ниже будет пример использования), да и симуляторов вообще, где мышь по большей части используется для обзора, хотя говорят, что в Arma 2 тоже неплохо играется. Я же в начале ролика продемонстрировал работу в GTA5 с включённым видом от третьего лица, и скажу вам, что это совсем другие ощущения от игры, хотя и целится сложно, и есть ещё кое какие нюансы конкретно в этой игре, как например — всё же приходится немного «подруливать» мышкой;
  • Люди с ограниченными возможностями, я думаю если серьёзно развить эту тему, то можно облегчить пользование компьютером для людей, которым пользоваться им затруднительно;
  • Разработчики устройство VR(виртуальной реальности);
  • RC моделисты и коптероводы;
  • Такие же технологические гики, как и я.
Читайте также:  Как обшить арку гипсокартоном своими руками

Для того чтобы повторить этот девайс нам понадобятся следующее железо:

— Arduino, лучшее решение в данном случае это Arduino Nano V3(стоит недорого, относительно небольшие размеры), обязательно чтобы плата была с микроконтроллером ATmega328 на борту. Так же было бы не плохо, чтобы в ардуинке был USB to UART преобразователь на чипе CH340:

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

Код, как видно из скрина выше, занимает около 16-ти килобайт памяти микроконтроллера, чего точно не хватит, если ардуинка будет на базе ATmega168, хотя конечно можно и вырезать не совсем нужный функционал из прошивки и таким образом попытаться уместить. Правда, зачем?

Драйвера к чипу CH340G ищите в первых ссылках по запросу «ch340g driver» в гугле, или же в архиве к данной статье.

— Датчик GY-85, это трех осевой гироскоп MPU3200, акселерометр ADXL345 и магнитометр HMC5883L на одной плате. Этого более чем достаточно чтобы ориентироваться в пространстве в трёх осях.

Он лучше всего себя показал, не требует предварительных калибровок, подключили, прошили ардуинку и работает. Хотя AHRS(Курсовертикаль) прошивка и позволяет калибровку, но это отдельная тема, которая, как я считаю, раскрыта более чем полностью на форуме по игре WarThunder;

— Разная мелочь — провода, паяльник (без него не обойтись, потому, как Arduino Nano и GY-85 приходят из Китая в распаянном состоянии),USB удлинитель, Mini-USB кабель для Arduino Nano V3.

Сборка Head Tracker’а:

Подключаем Arduino и GY-85, в случае Arduino Nano это будет так:

Подаём питание на ардуино — на датчике должен засветился светодиод.

В случае Head Tracker’а датчик идеально прикрепить на ободок наушников, вот так по «криворукому» это сделал я:

Уверен, что вы это сделаете куда аккуратнее, чем меня.

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

По поводу не теребить плату, я просто скрутил USB кабель и провод наушника тем же проводком от витой пары.

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

Под датчик, как и под ардуинку, подложил кусочек вспененного полиэтилена, чтобы они не царапали мне наушники, да и так лучше держится всё это.

Правда тут есть кое-какие моменты, важно датчик располагать таким образом, чтобы стрелка Y указывала на монитор.

Так же надо датчик держать подальше от металлических предметов, рекомендуемое расстояние 5-10 см. В противном случае могут быть искажение показаний, глюки в работе датчика. Это актуально для тех, у кого металлический ободок наушников. Хотя искажать показания может не только металл, но и сама ардуинка или даже провода, что и было продемонстрировано на видео, так что постарайтесь отдалить всё это от датчика хотя бы на расстояние 5-10 см.

Самое простое решение с металлическим ободком наушников — губка для мытья посуды:

Так как у меня ободок пластиковый (было проверенно магнитом), я забил на всё это.

Прошивка:
Если у вас всё ещё не установлена последняя версия Arduino IDE — качаем и устанавливаем. На момент написания статьи это 1.6.8.

В нашем инерционном трекере будем использовать кастомную прошивку проекта AHRS Firmware for the SparkFun 9DOF Razor IMU and SparkFun 9DOF Sensor Stick(архив со всем необходимым в низу статьи). В Arduino IDE открываем файл Razor_AHRS.ino, который лежит в архиве по пути DIY headtracker\RazorAHRS_FaceTrack\Razor_AHRS:

Читайте также:  Домашний аквариум с водопадом своими руками

И загружаем прошивку в ардуино:

OpenTrack — это бесплатная программа с открытым исходным кодом, предназначена для отслеживания движений головы пользователя и их преобразование в координаты. Умеет работать с разными устройствами ввода, включая ИК-рамку и Oculus Rift или же со смартфонами.

На видео, чувак играет в культовую игру Elite Dangerous, используя свой Android смартфон в качестве мыши:

Это позволило задействовать обе руки для игрового процесса. Согласитесь, выглядит очень круто. Правда мне в этой реализации не нравится несколько нюансов, а именно, смартфон относительно громоздкий и тяжёлый, GY-85 явно занимает места и весит меньше, к тому же от него не долбит в голову излучение от WiFi передатчика смартфона.

Но давайте вернёмся к нашим баранам Arduino и GY-85. Для начала нужно скачать и установить последнюю версию программы(на данный момент это opentrack-2.3 rc21p11), запускаем:

Теперь нам надо настроить программу — в поле «Tracker» выбираем «Hatire Arduino» и нажимаем кнопку «. » и мы увидим что-то типа этого:

Здесь надо изменить «Serial port» на COM порт нашей ардуинки, в моём случае это COM42. Дальше переходим во вкладку «Command», прописываем там, в полях «Init» и «Start» 1000, затем выставляем «BaudRate» 115200, и напоследок жмём «Save» и «OK».

Дальше в главном окне программы нажимаем кнопку «Start», начинаем вращать датчик в разных осях и следить за осьминогом. Скорее всего, движения датчика и осьминога будут отличаться, по крайней мере, в моём случае так получилось, не останавливая трекинг жмём кнопку «. » в поле «Tracker». Здесь нам нужно настроить «Axis Configuration» таким образом, чтобы движения датчика совпадали с движениями осьминога в программе — выставляем для «Yaw», «Pich» и «Roll» значения RotX/RotY/RotZ в нужной последовательности, в этом нам поможет вот эта картинка:

Как получилось у меня, можете увидеть на скрине настроек «Hatire Arduino» что выше. Ось «Roll» пришлось инвертировать, потому что осьминог крутился в обратные стороны.

Так же программа позволяет настраивать чувствительность для каждой из осей — кнопка «Mapping» в главном окне программы:

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

Вкладка «Filter» в головном окне программы позволяет изменять тип фильтра, или же вообще его отключить, в этом случае показания будут очень нестабильными и резкими. У меня тип фильтра стоит «Accela» вот с такими настройками:

При желании можете поиграться с настройками.

Переходим к настройке эмуляции мыши, для этого во вкладке «Protocol» выбираем «mouse emulation» и нажимаем кнопку «. «, там надо выставить «Yaw» и «Pich» для осей X, Y:

Нажимаем кнопку старт и вуаля — профилактика шейного остеохондроза. И напоследок добавлю, что перед нажатием кнопки старт надо ровно установить голову относительно монитора, потому что датчик в этот момент производит калибровку.

Плюсы перед вариантом с использованием веб камеры и ИК светодиодами:

  • Скорость, данная прошивка выдаёт примерно 60 чтений на секунду, что примерно равно с веб камерой на 60 fps, но мне кажется, что вебка на 60 кадров на секунду стоит явно дороже GY-85 и Arduino платы;
  • Нет зависимости от освещения;
  • Так как почти всё вычисления производить ардуино, то разгружаются ресурсы процессора компа, то есть меньше глюков в играх;
  • Можно использовать не только для игр, но и облегчить пользование ПК для людей с ограниченными возможностями.

Минусы:

  • Проводное подключение, что в принципе решаемо при помощи Bluetooth модуля, например как HC-05/HC-06. Прошивка поддерживает такую возможность.
  • Датчик относительно дорогой, я свой покупал за 8 долларов, что считаю завышенной ценой;
  • Портиться эстетичный вид наушников, но я уверен, что вы сделаете лучше, чем я.

Наверняка у многих появится вопрос, какой смысл крутить голову вокруг монитора если тот стоит на месте? Как было мною сказано на видео, это всего лишь начало темы VR на на моём YouTube канале.

Источник

Оцените статью