Как я делал HeadTracker без проводов.
Braigan
Как я делал HeadTracker без проводов.
Всем привет, в этом посте я бы хотел поделиться своим скромным опытом по крафту Хэд Трекера в домашних условиях, возможно кому-то поможет Основным моментом при создании этого чуда являлось то, что я искал наиболее дешевый и простой вариант, что бы узнать нужно ли оно мне вообще, ибо готовые фабричные варианты стоят около 150$ ( TrackIr 5 ). Было решено остановиться на варианте с клипсой без проводов и дешевой веб-камере (внимание!) со встроенной ИК подсветкой. Если же найти такую камеру не удалось, а клипсу хотелось бы сделать беспроводной, то можно смастерить небольшую панельку из шести инфракрасных диодов, по три на сторону и расположить ее таким образом, чтобы светило оно на клипсу. Мне повезло, камеру найти удалось и это A4Tech PK-333E.
Материалов использовано:
1) Пластиковые трубки достаточной жесткости и радиуса — 3 штука
2) Основа. Тут включите фантазию.
3) Светоотрадающий материал. Подойдет любой, но с достаточным коэффициентом отражения.
4) Несколько старых добрых дискет 3.5
5) Клей и изолента. Ну куда без них то.
Первым делом нужно было подумать из чего лепить клипсу. Мной были найдены трубки от баллончиков с монтажной пеной. Они были относительно небольшого радиуса, плюс площади радиуса как раз хватило бы для светоотражающего материала. За основу лично я взял мини-диск, который был в коробке с этой самой камерой, но тут все ограничивается только фантазией и подручными материалами. Были мысли слепить основу на пластилине, потом залить это дело клеем и поместить в цилиндрический корпус, но внешний вид меня пока не сильно волновал. Зато в итоге моя конструкция получилась практически невесомой и без лишних проводов, чего я и добивался. В качестве отражающего материала послужили ленточки со строительного жилета, тут опять же все зависит от того чем вы располагаете, можно попробовать и другие варианты с отражателями. По материалам для клипсы это всё, остальное нужно только для внешнего вида.
И так по порядку. Берем бумагу и карандаш, и чертим границы нашей клипсы примерно вот по такой схеме.
Накладываем трубки, лишнее отрезаем и фиксируем их в этом положении, я использовал скотч.
И теперь нам нужно это дело закрепить на основе. Тут уже пошли в ход диск и клей.
Как только клей подсох, можно начать изготовление отражающих наконечников. Отпарываем ткань от жилетки, или что там у вас отражающее есть, ну и аккуратненько наклеиваем на концы трубок, тут важно не намотать слишком много, иначе свет от них будет слишком обширным, и указатели начнут налазить друг на друга, так что программа не сможет их адекватно воспринимать. Лишнее я просто закрыл все той же, любимой черной изолентой.
На обратной стороне я просто наклеил двусторонний скотч и посадил на правый наушник. Думаю в дальнейшем я сделаю более божеский вид этой конструкции, считайте это прототипом В итоге у меня это выглядело примерно вот так:
Далее модернизация камеры. Если у вас простая камера, то скорей всего у нее есть ИК-фильтр, который придется извлечь. Если у вас камера со встроенной ИК подсветкой, то идем дальше. Нам потребуются несколько дискет, можно откопать в закромах офиса например Почему несколько? Потому, что у них бывает разная степень прозрачности, придется на глаз и методом тыка выбрать наиболее оптимальный вариант. Мне лично хватило трех, две были совсем светлые, а вот третья оказалась достаточно темной, то что нужно. Зачем это, потом наглядно покажу.
И так, вытаскиваем диск и вырезаем кружочек, мои кривые руки позволили мне вот это
Вскрываем камеру, если у вас тоже A4Tech PK-333E, то там один маленький болтик и готово. Достаем все, приклеиваем пленку на место объектива, собираем и ставим обратно. И не забудьте закрыть датчик освещенности, чтобы наши ИК светодиоды постоянно горели.
Следующий пункт это софт. Для начала нужно установить FaceTrackNoIR, брать можно тут http://sourceforge.net/projects/facetracknoir/files/SetupFaceTrackNoIR_Full_v170.exe/download
Далее чтобы наша любимая Elite могла воспринимать прогу, желательно скачать обновленный файл списка поддерживаемых игр, берется тут http://sourceforge.net/projects/facetracknoir/files/FaceTrackNoIR Supported Games.csv/download Скаченный файл нужно заменить в папке с программой \FaceTrackNoIR\Settings
А так же желательно скачать обновленную версию плагина Point Tracker, берется тут http://sourceforge.net/projects/ftnoirpt/files/PointTracker_1_1.zip/download и копируется корень программы \FaceTrackNoIR
Все установлено? Отлично, идем дальше к настройкам. Надеваем наши модернизированные наушники, запускаем FaceTrackNoIR и первое что нужно — выбрать тот самый PointTracker 1.1 в пункте «Tracker Source», далее убираем все галки кроме «Yaw» и «Pitch» в пункте «Global Settings»
Теперь заходим в настройки Point Tracker 1.1, так же убираем все галочки кроме «Yaw» и «Pitch» и переходим в раздел «Camera».
Тут нам понадобятся только параметры «Point Extraction» которые мы будем крутить, пока камера не будет адекватно определять указатели нашей беспроводной клипсы. Соответственно ползунок отвечает за степень яркости воспринимаемых указателей, далее уровень минимального размера указателя в пикселях и уровень максимального размера. У меня это выглядит так.
В следствии указатели должны адекватно схватываться программой и помечаются красными крестиками.
Как только результат нас устраивает переходим к завершающей настройке. Открываем Elite: Dangerous, садимся в кабину и прогреваем трастеры. Пока ваш звездолет на парковке, сворачиваем игру, а лучше переводим ее в оконный режим т.к. делать это придется не однократно. Снова открывает FaceTrackNoIR и жмем кнопку «Curves» в нижнем правом углу, открываются кривые, которые нам придется крутить некоторое время, до достижения симбиоза с кораблем и впадения в полную нирвану. Здесь же нам понадобятся только три таблицы, первая — поворот головы вправо и влево, вторая — вверх и третья — вниз. Тут все исключительно по вкусу, двигаем кривую, смотрим в игре получили ли мы то, что хотели и т.д.
От себя рекомендую назначить горячие клавиши на:
1. «Центровку» калибровки, если вдруг собьется пока вы отворачивались попить чай, например.
2. «Старт\Стоп» слежения за указателями, когда например находитесь в маркете и мотать головой там бывает не очень удобно.
Источник
Инерционный трекер на базе 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 канале.
Источник