воскресенье, 30 ноября 2014 г.

Беспроводной трекер своими руками

Wireless Head Tracker
Сборка беспроводного трекера. Пока коротко, только самое главное. Про контроль напряжения аккумулятора и про использование GY-951 пока только упоминаю, подробности позже. Про зарядку аккумуляторов тоже.

Варианты сборки и их отличия

  1. Ардуино 5В: плюсы – можно контролировать напряжение батареи, плата 16МГц. Минусы: напряжение питания не менее 5В
  2. Ардуино 3.3В: плюсы – можно контролировать напряжение батареи, питание от литий-ионного аккумулятора 3.7В. Минусы: плата 8МГц – не все прошивки подойдут один в один
  3. GY-951: Плюсы: минимальный размер – процессор и датчики на одной плате. Минусы: всё те же 8МГц; нельзя проконтролировать напряжение питания аккумулятора

Железо

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

  • Nano
  • Pro Mini (3.3/5В)
  • Pro Micro

Датчики

  • GY-85
  • GY-86
  • GY521 + GY-271
  • GY-80
  • MPU-9150/MPU-9250

Аккумулятор

Для плат 3.3В:
  • Li-Ion 3.7В, ёмкость по желанию
Для плат 5В:
  • Крона или аккумулятор 9В, 6F22
  • Аккумуляторы 2х3.7В любого типоразмера

Беспроводной модуль

HC-05 + USB-Bluetooth (если на компьютере нет Bluetooth)

Остальное

  • Корпус
  • Выключатель
  • Провода и разъёмы
  • Переходник COM-USB (опасаемся FTDI)

Подготовка

Настройка модуля Bluetooth

Модуль HC-05 предварительно нужно немного донастроить. Для этого подключаем его к компьютеру с помощью переходника USB-COM:
VCC-VCC
GND-GND
TX-RX
RX-TX
KEY – на GND, т.е. присоединить к минусу. Нужно только для настройки.

При подключении синий светодиод должен медленно мигать. Запускаем терминальную программу, например, TeraTerm. В настройках указываем скорость 38400, передавать CR+LF – обязательно.

В терминале настраиваем имя устройства и скорость передачи (такую же, как в прошивке):

AT+NAME=HEADTRK
AT+UART=115200,0,0

После каждой строки должен прийти ответ «OK».

Прошивка

Всё, как в первом письме, кроме варианта с платой 3.3В. В прошивке придется изменить частоту срабатывания таймера и уменьшить скорость COM-порта (касается прошивки, Bluetooth и FTnoIR)

Сборка

Рассматриваю только вариант ардуино + датчики.

VIN – питание от батареи 3.3-12/5-12 в зависимости от процессора (8/16МГц)
GND – минус батареи
TX1 – RX Bluetooth
RX0 – TX Bluetooth
A4 – SDA датчика
A5 – SCL датчика

Bluetooth и датчик тоже должны получить свои GND и VCC. Конкретно откуда - в зависимости от компоновки.

Упаковка в корпус – по желанию. Главное условие – правильно расположить датчик относительно головы (горизонтально, стрелочка X в сторону монитора) и убрать подальше любое железо.

Натюрморт беспроводного трекера

Настройка

Тем, у кого нет Bluetooth в компьютере, подключить модуль USB Bluetooth. Включить собранный беспроводной трекер. Произвести спаривание, код по умолчанию – 1234.

В FacetrackNoIR выбрать COM-порт. Не забудьте настроить скорость порта, если меняли. COM-портов может оказаться два. В таком случае, придётся пробовать по очереди. Один из них должен заработать.

22 комментария:

  1. возможно ли добавить набор кнопок и использовать как геймпад?

    ОтветитьУдалить
  2. Можно, но будет нужен драйвер для того, чтобы игра узнала о геймпаде. Поскольку обмен данными идёт через виртуальный COM-порт.

    ОтветитьУдалить
  3. Вариант, как отделаться всего одним аккумулятором и малюсенькой платкой: https://forum.warthunder.ru/index.php?/topic/115548-inertcionnyj-treker-svoimi-rukami/?p=5209270

    ОтветитьУдалить
    Ответы
    1. У меня есть такие же или очень похожие платы, но на выходе они дают напряжение аккумулятора. У меня в более позднем варианте (см. выше) такая плата предусмотрена, с преобразователем в 5В.
      Если есть такие, которые действительно выдают на выходе 5В, хотелось бы ссылку на конкретного продавца.

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
    3. У меня такие платки по 40 рублей от одноячейной литиевой батарейки, снятой со старого мобильника, все 9В выдают (могут до 15-30В, но больше тока жрут). Например, для транзистортестера с графическим экраном с подсветкой (на нем автоотключение, но аккум от повышающей платки вручную клавишным выключателем надо). Платки со step-up DC-DC (повышающим) чипом MT3608 для маломощных применений (0,5А, 1А в пике) на али по ключевому слову MT3608
      И можно еще для равномерной регулировки-настройки выходного напряжения на обратной стороне платы кинуть соплю между двумя ножками подстроечника - центральной и ближней к краю короткой стороны платы. 40 рублей, Карл!

      Удалить
    4. Ссылку, где взять, Карл!

      Удалить
    5. Ну ладно, щас по 30 рублей...
      Для ленивых http://goo.gl/j1mHi8
      (аналогично вбиванию MT3608 в поиск али, опции сортировки по цене, бесплатная доставка)

      Удалить
  4. Я не понимаю, почему геймерские мыши 1000 раз в секунду опрашиваются, а ентот сенсор раз 50 (в подобной данной англоязычной статье, тоже со скетчами для ардуин на 328 атмеге - 128 раз). Вроде как можно и быстрее, но более быстрыми МК (типа STM32f103, в т.ч. ардуино-совместимыми). Мне пока лень прочитать исходники (хотя, если в статьях идет речь о снижении скорости опроса при печати в порт в дебаг-режиме, то, значит, в обычном режиме опрос всех датчиков до 128 раз в секунду с выдачей в порт бинарных данных, а не ASCII), но, думается, что драйверы большинства современных usb-uart микросхем позволяют скорости до 921кбод (да и УАРТы/УСАРТы мк 115,2 кбодами далеко и давно не ограничены)

    ОтветитьУдалить
    Ответы
    1. 1. максимальная частота выдачи данных от датчиков - около 200Гц, причём желательно не делать больше 100, иначе точность измерений резко падает
      2. В процессе обсчёта может происходить интерполяция, что ещё больше снижает частоту на выходе
      3. Скорость ардуины может оказаться недостаточна
      4.Единственная причина использования ардуины - под нее неспециалисту проще всего залить /поправить прошивку
      5. Зачем нужны частоты более 50Гц для контроля поворотов головы? Голова - это же не мышь :)

      Удалить
    2. Ну да, если частить, то точность пострадает. Мышь - да хотя бы для наведения в симуляторах (типа digital combat sim, dcs) с VR, если нет трекинга зрачков (как в FOVE).
      А если сервами камеру на БПЛА крутить - то и 50Гц за глаза. Для простых поворотов головы с целью смены обзора (не микромоторных) много не нужно в т.ч. из-за инерции зрительной системы (persistence of vision)
      Однако, дополнительная информация по ускорениям и векторам движений для нужд экстраполированного предсказания (для движка с поддержкой какой-нибудь OSVR) тоже лишней не была бы.

      Удалить
    3. Собственно, линейные и угловые ускорения - это и есть сырые данные.

      Удалить
  5. Вот статья http://www.rcgroups.com/forums/showthread.php?t=1677559

    ОтветитьУдалить
    Ответы
    1. Это один из первоисточников, в общем-то :)

      Удалить
  6. http://www.macs.hw.ac.uk/~ruth/year4VEs/Resources/AeroSense98.pdf
    теория, блин

    ОтветитьУдалить
  7. Мысли из разряда "датчиков много не бывает": вот тут https://inmagicwetrust.wordpress.com/2015/11/04/diy-project-wearable-imu-tracking-sensor/comment-page-1/#comment-128 говорящие по-немецки ребята на таких точно трекерах делали бюджетный моушн кэпчур (чтобы больше трекеров повесить на один БТ-приемник (не более 7 ведомых же) делали один HC-06 на две ардуинки, одну мастер и одну слейв друг с дружкой соединяя.
    Мне чудится, что большинство потребностей "симулянтов" можно решить увеличением числа осей (точек установки сенсоров), без необходимости применения позиционного трекинга. Что я имею в виду: такой сдвоенный беспроводной трекер, один датчик на голову, другой - "принять на грудь". При этом такие потребности: "выглянуть в форточку, нагнуться влево-вправо, наклониться ближе к приборной панели в кокпите/откинуться подальше" - удовлетворяются естественно, легко и непринужденно, без отрывания зада от кресла.

    ОтветитьУдалить
  8. Я планировал попрбовать интегрировать несколько показаний датчиков для уменьшения ошибки. Но времени нет

    ОтветитьУдалить
    Ответы
    1. Повышение точности - это тоже здорово, но я о другом. Я про два трекера (пусть даже не один сдвоенный, а два обычных, каждый со своими бт и батарейкой - хоть это и более расточительно), повешенных на разные части тела (между головой (черепом) и грудью (грудиной) ведь есть подвижное сочленение, шейный отдел позвоночника) для обхода необходимости в позиционном трекинге головы во всяких симуляторах (самолеты, авто, мото, гребля, лыжи и охота), если его можно заменить еще одним инерционным трекингом наклона-положения корпуса-туловища (придвинуть/отодвинуть передний план, высунуться-выглянуть из двери водителя и т.п.) Просто для этого нужно еще независимых осей (например, facetrackir на один компорт, и подобная ему шляпа на другой) для управления в игре.

      Удалить
  9. Это ж ак придётся изгибаться... Хуже йоги

    ОтветитьУдалить
    Ответы
    1. как пределы и кривые настроишь, так и придется.
      Хуже йоги лучше нет. Это всё позволит дополнительные ракурсы-виды получить, а основные виды из наиболее удобного для игры положения в кресле, крутя одной башкой. грудной отдел в сидячем положении очень даже подвижен. Только вот не надо огульного охаивания, коль скоро вы тут разработчик (я всегда считал умозрительную критику других, не подкрепленную эмпирическими данными, своей прерогативой). Лучше, конечно, прямой интерфейс в мозг, чтобы вообще не шевелиться, не то что головой вертеть. Только я и не липмоушен какой-то предлагаю, руки на весу, а вполне удобный и рабочий VR вариант (джойстик тоже не на 360 и даже не на 180 крутится, нелинейная кривая спасет гиганта мысли)

      Удалить