четверг, 10 августа 2017 г.

Беспроводной терекер. Софт

Выкладываю код в состоянии "как оно работало" до того, как спалил модуль сенсоров. Так что проверить работоспособность пока не могу.

Ссылка: HTWIFI

Краткая инструкция:

  1. файл netconfig_sample.h переименовать в netconfig.h и отредактировать: добавить название сети и пароль
  2. тем, у кого динамические адреса wifi (таких большинство, я думаю), вместо строки IPAddress selfIp(192, 168, 1, 100); прописать IPAddress selfIp(0, 0, 0, 0);
  3. в строке IPAddress destIp(192, 168, 2, 5); прописать адрес своего компьютера
  4. компиляция. Моя среда редактирования - Eclipse с плагином Arduino, но и в обычном Arduino IDE должно компилироваться без проблем
  5. в Opentrack выбрать протокол "UDP Over Network", порт 5550

80 комментариев:

  1. Затестил. Ругается на отсутствие файла "networking.h". Я так понял это файл со всеми заголовками "networking.cpp" - так что попробую сам написать его.

    ОтветитьУдалить
    Ответы
    1. Кстати, а есть возможность заставить скетч работать без WiFi? По USB.

      Удалить
    2. по USB - #ok в терминале

      Удалить
    3. Действительно пропущен. Добавил в репозиторий

      Удалить
    4. Теперь все ок. Прошился, к WiFi подключился. Но на выводе "#YPR=nan,nan,nan". Датчик вроде живой, с простым, проверочным скриптом работает.

      Удалить
    5. Сейчас нечем протестировать, GY-85 испортился. Правда, и в таком виде, выдавал цифры, не nan

      Удалить
  2. Странно, заметил, что после подключения в WiFi одна строка с цифрами, а за ней все NaN.
    "Starting output stream
    #YPR=-133.36,33.51,0.49
    #YPR=nan,nan,nan"

    ОтветитьУдалить
    Ответы
    1. возможно, прошивка не видит плату. надо попробовать какой-нибудь i2cscan, убедиться, что разъемы для I2C правильно указаны

      Удалить
    2. Да вроде все правильно. Скан дает те же адреса, только в другом порядке, но он не пишет, что за устройство. Менял адреса местами - без изменений. Попробовал поменять порты SDA and SCL в настройках или поменять Wire.begin(PIN_SDA, PIN_SCL); на Wire.begin();. Все равно на выводе первая строка с цифрами, остальные NaN.

      Удалить
    3. i2cscan должен находить как минимум 3 адреса - акселерометр, гироскоп и магнитометр. Если находит, то нужно убедиться, что порты в i2scan и в программе трекера совпадают

      Удалить
    4. Скан находит 3 адреса, все верные, но какой чей - не понятно. Простым скриптом я снял данные с гироскопа, и с адресами разобрался (некоторые в даташитах указаны). Вот насчет пинов не уверен. В скетче указаны SDA - 14, SCL - 12. Но вроде же должны быть 4 и 5. Во всяком случае с любыми (в том числе и вообще без указания пинов) ничего не работает.

      Удалить
    5. Пины могут быть разные. Нужно указывать те, с которыми нашлись датчики

      Удалить
    6. Подключил к пинам 14 и 12. Скан все находит, прошиваю с этими же пинами скетч - на выводе NaN. I2C Адреса верные. :(

      Удалить
    7. Если ресет на плате нажать, данные те же идут? Меняется ли что-либо, если сенсор отключить?

      Мне сейчас нечем проверить - сгорел то ли сенсор, то ли WeMos (или оба), придется новые заказывать.

      Удалить
    8. При нажатии reset или отключении датчика ничего не меняется. Подключение происходит, на вывод nan.

      Удалить
    9. Недели через три если получу новое железо, смогу заняться. Сейчас могу только посоветовать попробовать как-нибудь тестовый скетч, чтобы убедиться, что данные с датчиков действительно приходят.

      Удалить
  3. Вроде бы все правильно соединил, в мониторе серийного порта видны данные, пишет, что к сети подключился успешно. Номер порта проверял и в прошивке и в OpenTrack. Тем не менее ОТ данных не принимает (ошибок не показывает, но все по нулям). Что может быть проблемой?

    ОтветитьУдалить
    Ответы
    1. В репозиторий добавил утилиту readsocket.py
      Надо поменять в ней адрес на свой и запустить. При работающем трекере должны начать приходить данные. Если приходят, то что-то с опентреком.

      Удалить
  4. Спасибо (только скобки после print два раза забыты).

    Не видит данных. Видимо, что-то в прошивке я напутал. Странно, потому что монитор серийного порта все равно показывает данные.

    ОтветитьУдалить
    Ответы
    1. Надо смотреть, действительно ли трекер подсоединяется к сети, может, пингануть его. Ещё брандмауэры (firewalls) всякие могут мешать, либо антивирусы.
      У меня без скобок всё работает.

      Удалить
    2. Есть в прошивке такие строчки (output.cpp):

      //int output_mode = OUTPUT__MODE_UDP;
      int output_mode = OUTPUT__MODE_ANGLES;
      int output_format = OUTPUT__FORMAT_TEXT;

      точно не надо ничего раскомментить/закомментить?

      Удалить
    3. Попробуйте включить UDP и выключить TEXT. Хуже не будет, я думаю

      Удалить
  5. А во такой вариант подойдёт? https://ru.aliexpress.com/item/WeMos-D1-Esp-Wroom-02-Motherboard-ESP8266-Mini-WiFi-Nodemcu-Module-18650-Battery/32821749383.html?src=google&albslr=201164481&isdl=y&aff_short_key=UneMJZVf&source=%7Bifdyn:dyn%7D%7Bifpla:pla%7D%7Bifdbm:DBM&albch=DID%7D&src=google&albch=shopping&acnt=494-037-6276&isdl=y&albcp=657872107&albag=38867178172&slnk=&trgt=61865531738&plac=&crea=ru32821749383&netw=g&device=c&mtctp=&gclid=CjwKCAiAx57RBRBkEiwA8yZdUIomlmaU2CjVvpOCs6CATDnt_JejWtxQHLZTUpsYSuTwbFZ_87EfORoCC8AQAvD_BwE

    Тут вроде как и сразу под акб бокс есть... весьма удобно

    ОтветитьУдалить
    Ответы
    1. Если только научились в него из Arduino IDE заливать. Насколько я помню, не работало оно с ардуиновским софтом.

      Удалить
  6. Собрал на Wemos d1, скетч рабочий, но есть нюансы.
    1. В файле settings.h нужно корректно указать пины:
    В моем случае были:
    PIN_SDA 04
    PIN_SCL 05
    воткнул согласно даташиту, если не сработает, то i2cscan в помощь.
    2. Чтобы данные отправлялись по сети, нужно закоментить строку:
    int output_mode = OUTPUT__MODE_ANGLES
    и раскоментить:
    int output_mode = OUTPUT__MODE_UDP
    3. У меня не заработало со статическим ipником, только с динамическим, но это может быть косяк моего роутера.

    Автору большое спасибо за скетч и идею. =)

    ОтветитьУдалить
    Ответы
    1. по п.3 - в большинстве роутеров включено автоматическое выделение адреса, так что это не косяк.

      Удалить
  7. не могу с 6050 (GY521) запустить, датчик вродебы и считывает, но показания в монитор выводит нулевые:
    IP Address: 192.168.1.125
    Connected to wifi
    Reading EEPROM
    Starting output stream
    #A-C=0.00,0.00,0.00
    #M-C=inf,inf,ovf
    #G-C=0.00,0.00,0.00

    #define SENSOR_DEVICE MPU6050 в settings прописал.
    магнитометра на датчике нету.
    подскажите что не так у меня, может подправить что надо.

    ОтветитьУдалить
    Ответы
    1. Для 6050 не реализовано пока.

      Удалить
    2. а какие датчики сейчас поддерживаются?
      и когда планируется поддержка 6050, 9250 ?

      Удалить
    3. Сейчас только GY-85. 6050 займусь, когда соберусь возвращаться к полетам, ближе к лету, скорее всего. Для 9150/9250 вряд ли буду сам делать, т.к. преимуществ не вижу. Магнитометр у них хуже, чем HMC5830L, общая точность акселерометра и гироскопа вроде бы такая же. А стоят дороже.

      Удалить
    4. а что за чип такой HMC5830L ? даже гугл такого не знает.
      GY-85 сейчас на али стоит 500руб. MPU-9250 9-Axis Attitude +Gyro+Accelerator+Magnetometer тамже 185руб. Если делать на MPU-6050 то это надо брать GY-521 и GY-271 60p + 140p соответственно, да еще и колхозить две платы. Так что MPU-9250 самый дешевый, удобный и выгодный по функционалу.

      Удалить
    5. Неправильно написал - HMC5883L
      К MPU9250 давно не приценивался, когда брал себе на пробу, они стоили раза в 3 дороже, чем сейчас. За 200р конечно же выгоднее 9250. И при должном программировании, точнее.

      Удалить
  8. купил датчик GY-85, подключил, нет данных с магнитометра. Стал разбираться, выяснил что на новых модулях ставят не HMC5883L, а QMC5883L, у него другая структура регистров. С регистрами разобрался, данные с магнитометра снимаются:

    #A-C=138.41,11.53,190.84
    #M-C=inf,inf,ovf это обработанные
    #G-C=4.00,-4.00,2.00
    241.00 253.00 251.00 Это сырые данные с магнитометра
    #A-C=138.41,11.53,190.84
    #M-C=inf,inf,ovf
    #G-C=4.00,-4.00,2.00
    241.00 253.00 251.00

    но дальше идет обработка, а так как я не програмер разобраться самому сложно. Может кто подскажет как поправить скетч?
    В секции sensors.cpp
    // MSB byte first, then LSB; Y and Z reversed: X, Z, Y
    int16_t x,y,z;
    x = (int16_t) buff[4] << 8; x |= buff[5];
    y = (int16_t) buff[0] << 8; y |= buff[1];
    z = (int16_t) buff[2] << 8; z |= buff[3];
    данные должны идти так: LSB,MSB порядок X,Y,Z
    ну и возможно еще где то подправить надо.

    ОтветитьУдалить
    Ответы
    1. Вот я нашел библиотеку для QMC:
      https://github.com/dthain/QMC5883L
      лучше бы конечно разнести все модули по отдельным файлам. У меня сейчас времени нет, к сожалению

      Удалить
  9. https://github.com/luckypm/commn-informations/blob/master/%E5%9C%B0%E7%A3%81%E6%96%87%E6%A1%A3/%E8%88%AA%E7%BA%AC5983%E6%9B%BF%E4%BB%A3%E6%96%99%E8%B5%84%E6%96%99/QMC5883L%20Datasheet%201.0%20.pdf здесь даташит на QMC5883

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

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

    ОтветитьУдалить
  12. Обновился Razor AHRS, добавили новых датчиков, улучшили синхронизацию и много чего еще.
    https://sites.google.com/site/diyheadtracking/home/razor-ahrs-20180306
    Нет желания пересобрать проект на новой сборке?

    ОтветитьУдалить
    Ответы
    1. На ардуине уже не буду трекер делать, это точно.
      ESP8266, RTL8710 или STM32

      Удалить
    2. вообще я имел в виду ESP8266. Ваш проект ведь создан на базе razor ahrs, только старой версии. Имелось ввиду взять новую версию ahrs, поправить типы переменных под ESP и добавить модули вифи из данного проекта.

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

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

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

    ОтветитьУдалить
  15. Господа, свершилось! я смог это сделать... Но не могу справиться с магнитометром.. данные не идут

    #A-C=-263.19,10.49,-59.77
    #M-C=0.00,0.00,0.00
    #G-C=33.00,-34.00,1.00

    подскажите пожалуйста, где что сунуть и где что переписать? нехочется останавливаться на достигнутом, надо до ума довести

    ОтветитьУдалить
    Ответы
    1. Какой датчик магнитометра?

      Удалить
    2. Когда на Али покупал, в описании было написано HMC5883L

      на нём самом написано "L883 2535" существуют какие-то варианты узнать наверняка?

      Удалить
    3. Вариант такой: загрузить i2cScan и посмотреть, совпадают ли адреса с адресами 5883. Если нет, то ищем по адресам марку

      Удалить
    4. это QMC5883, правленая библиотека для него лежит в репозитории Razor AHRS, ссылку я давал выше.

      Удалить
    5. не сочтите за кретина, что с ней делать?! Я понимаю что надо в корень положить, но надо что-то прописать =) или нет?

      Удалить
    6. tu4kin от вас ссылка только на даташит по QMC5883

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

    ОтветитьУдалить
  17. https://sites.google.com/site/diyheadtracking/home/diy_ahrs_razor_20170701/download

    в корень ее ложить бесполезно, в ней описаны значения для обращения к регистрам QMC, использовать в качестве примера, а править надо секцию sensors.cpp (возможно еще чтото), у меня не получилось до ума довести, а автору некогда.
    Я себе нашел другой проект на базе esp8266 на модуле 12 версии с 4м памяти (lolin или wemos) с датчиками 6050 или 9150, с веб интерфейсом, все настройки по ОТА, очень удобно что прошивка не привязана к настройкам сети.

    ОтветитьУдалить
    Ответы
    1. ну вот и славно... теперь я спокоен =) буду дальше на ардуино сидеть =) авось на вартандер хватает =)

      Удалить
    2. на ардуине razor? или чтото другое? я сейчас жду SPP Bluetooth модуль, прикручу его к новой версии razora и буду сравнивать с вышеописанным трекером на ESP. Так что если интересно велком в личку.

      Удалить
  18. выяснил что у меня точно HMC5883L I2Cscan ловит пакеты в таком виде

    0x1E)
    0x53)
    0x68)

    По идее всё так, как должно быть... что этой собаке надо??!!

    ОтветитьУдалить
  19. Нашел в скетче строку с дополнительными сведениями на магнитометр.
    Сведенияф были закоменчены. Раскоментил - получил следующее

    #A-C=259.00,-3.15,-41.94
    #M-C=0.00,0.00,0.00
    #G-C=32.00,-36.00,0.00
    -666.00 1174.00 -11.00

    Стало ясно что не в тот адрес данные падают. Копаюсь, ищу что дальше делать.

    P.S. - понимаю что никто не поможет, отчитываюсь для будующих конструкторов

    ОтветитьУдалить
    Ответы
    1. ну да, это сырые данные с магнитометра, если они изменяются когда крутишь датчик то он подключен и работает нормально. до этого момента я тоже дошел, дальше засада, начинается арифметика усреднения, сравнения с опорными значениями (ofset), смешивания с данными Акселя и гиро и в итоге выходные значения магнитометра уходят в переполнение (overflow), здесь мозг закипел и я бросил.
      Ждем с нетерпением результатов твоих изысканий!

      Удалить
  20. да я уже начинаю думать о том чтобы связаться с Разором, заплатить ему - чтобы он доделал, ибо третий день до 3-х ночи сижу - и всё безрезультатно

    ОтветитьУдалить
  21. Чёрт возьми, Автор! Ну давай мы скинемся, тебе заплатим, ну помоги... Уже желание есть две фазы на вимос подать, может заработает?!

    ОтветитьУдалить
    Ответы
    1. Друзья,
      я смогу выделить время на трекер после 12го июня. Очень хотелось бы к этому времени четко сформулированный список хотелок, отсортированный по степени важности.

      Удалить
    2. Ну. Коли все молчат, я начну.
      Доработать интеграцию под все платы Wemos (чтобы всё работало)
      Реализовать возможность калибровки (хоть как нибудь)
      Добавить возможность установки других датчиков (необязательно, ИМХО GY-85 - лучшее решение)
      И последнее, самое важное, но, я полагаю, самое сложное - реализовать смещение.

      Удалить
    3. я уже говорил выше, но могу повторить, все описанные вами хотелки уже реализованы в Razor AHRS новой сборки, и большое количество датчиков и программа для калибровки и много других плюшек: https://sites.google.com/site/diyheadtracking/home/razor-ahrs-20180306
      так как данный проект реализован на какойто ранней сборке Razor AHRS, самое простое решение (для автора) было бы добавить свой сетевой модуль в новую версию RAZOR AHRS и поменять переменные под стандарт ESP1866, а в идеале и под ESP32. Это займет минимальное количество времени и удовлетворит всех. Если же у автора есть желание пилить все с нуля, то видимо следует обратить внимание опять же на проект RAZORa? ну и вот еще очень неплохой проект со своими очевидными плюсами: https://github.com/scrodev/HeadTracker

      Удалить
  22. Разор, это ардуино. Ардуино - это дно! Нормальные пацацы пишут на ЕСП, а вообще молодчики на СТМ. Я не нашел ни одного проэкта на есп или стм (окромя этого) где была бы реализована "нормальная" безпроводная составляющая (ибо блютуз это тоже дно) а здесь это работает! и работает превосходно! Нужно только доделать!

    ОтветитьУдалить
    Ответы
    1. чукча видимо не читатель, чукча видимо пейсатель!
      хорошо, открой код из первого поста и читай первые 10 строк до полного просветления.

      Удалить
  23. Чукча не читатель, но чукча нашел проблему!

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

      Удалить
    2. На самом деле респект не мне, а товарищу по имени GO63 (форум тундры), который помог мне в определении проблемы.

      Удалить
  24. Короче, всё оказалось очень просто... Скетч прошит с калибровкой - которая должна записываться в епромку! Но так как в епромке ничего нет, то функция производит умножение на ноль! А если умножать на ноль, то, сук, получается ноль!!! Короче говоря во вкладке Sensors.cpp 358-ю и во вкладке HTWIFI 238-ю строку надо вместо ТРУ написать неТРУ!

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

    ОтветитьУдалить
  26. нашел ошибку

    http://prntscr.com/jufv5s

    ОтветитьУдалить
  27. Разобрался с епромом.

    На примере единичной матрицы.
    В мониторе порта ввести:
    #cp [Отправить]
    Поток остановится.
    и дальше вводить по одному числу:
    0 [Отправить]
    0 [Отправить]
    0 [Отправить]
    Это ввели magn_ellipsoid_center
    Дальше еще 9 чисел magn_ellipsoid_transform:
    1.0 [Отправить]
    0 [Отправить]
    0 [Отправить]

    0 [Отправить]
    1.0 [Отправить]
    0 [Отправить]

    0 [Отправить]
    0 [Отправить]
    1.0 [Отправить]
    Здесь поток опять потечет.
    Дальше нужно сохранить в еепром:
    #cs
    Проверить обычно:
    #o0#cd
    Запустить поток
    #o1

    ОтветитьУдалить
  28. И да. процессинг подвязывется нормально, то есть можно без проблем снять данные. И после того как вобъёте их в епром - можно смело ставить взад ТРУ и всё будет работать.

    ОтветитьУдалить
  29. Всё. вчерашней ночи мне хватило за глаза чтобы понять что проэкт сырой... Автор - в каком положении должен находиться датчик? Такого положения просто не существует. Оси гироскопа не паралельны осям магнитометра. какое положение я только не подбирал, перепробовал все комбинации с формулами плюсами и минусами по всем осям. Проэкт хорош. но мне не хватило сил, я многого достиг в нём, но это уже перебор =) Дальше сами.

    ОтветитьУдалить
  30. Друзья. Любезно предлагаю Вам к скачиванию абсолютно рабочий скетч автора. За что ему большое спасибо ибо идея действительно отличная! А так же большое спасибо "GO63" (форум Вартандер) за доработку и правку. (Ну, и меня тоже можно похвалить, авось не в носу ковырялся)

    https://drive.google.com/file/d/11QbLHhc2V6BIcB0POLlZuuUJb-cNymVa/view?usp=sharing

    В архиве найдте текстовый документ со скриптом для Auto Hot Key (не стал особо заморачиваться, авось и так работает) в котором Вам нужно будет указать данные улучшенной калибровки магнитометра и запилить их в Епром. (Калибровка и улучшенная калибровка обязательны) После того как Вы запишите их в блокнот, меняете расширение на ahk, запускаете и наведя курсор в мониторе порта на область печати жмаете кнопку <> как только данные впишутся и пойдёт поток данных - жмёте <> Всё, данные в епроме.

    Как пользоваться Auto Hot Key говорить не буду, на ютюбе толпа школьников расскажет.

    ОтветитьУдалить
  31. Жмёте кнопку хоум, а потом енд.

    ОтветитьУдалить
  32. Перезалил

    https://drive.google.com/file/d/1jhHRUodwMghRs0Aib-BuZI2eX1glUE_p/view?usp=sharing

    ОтветитьУдалить