Jump to content
Korean Random

Arduino и аналоги


kharlashkin

Recommended Posts

 

 

еще бы физ. движок подключить с мультиплАером, классно бы было.

Вопрос скорее всего в том, что игр с прямым управлением персонажа даже для VR нет и вряд ли в ближайшее время появятся. Разве что в какие-то игры для Kinect попробовать подключить.

 

Тут выявилось несколько других проблем.

  1. После подключение магнитометра непосредственно в вычисления DMP - точность кватерниона повысилась, но дрифт по оси Z никуда не делся. После активных вращений и возвращение датчика в первоначальное положение, кватернионы уже не будут как первоначальные. Хотя примерно после 10 секунд после активации, данные стабилизируются и в неподвижном положении очень точны. Этот же датчик с таким же кодом но без подключенного в DMP магнитометра имеет постоянный дрифт.
  2. Конфигурация DMP сразу имеет в своем арсенале матрицу корректировки данных от магнитометра, никак не могу пока понять каким образом этот "некий функционал" работает - документации маловато.
        0x02,   0x40,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_00 inv_set_compass_calibration
        0x02,   0x44,   0x04,   0x40, 0x00, 0x00, 0x00,   // CPASS_MTX_01
        0x02,   0x48,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_02
        0x02,   0x4C,   0x04,   0x40, 0x00, 0x00, 0x00,   // CPASS_MTX_10
        0x02,   0x50,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_11
        0x02,   0x54,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_12
        0x02,   0x58,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_20
        0x02,   0x5C,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_21
        0x02,   0xBC,   0x04,   0xC0, 0x00, 0x00, 0x00,   // CPASS_MTX_22
    
  3. Моя реализация корректировки по компасу пока не до конца продуманна - я пробую получать из кватерниона вычисленного в DMP вектор гравитации, затем получаю вектор нормали к плоскости образованной векторами компаса и гравитации, потом вычисляю из того- же кватерниона вектор, который должен быть коллинеарным вектору нормали, вычисляю угол между ними и доворачиваю объект.
  • Upvote 1
Link to comment
Short link
Share on other sites

@kharlashkin, желаю удачи в этом трудном деле.


 

Вопрос скорее всего в том, что игр с прямым управлением персонажа даже для VR нет и вряд ли в ближайшее время появятся. Разве что в какие-то игры для Kinect попробовать подключить.

можно слепить на Unity. только хз как этот двиг к ардуинке подключить.

Link to comment
Short link
Share on other sites

  • 5 weeks later...

Можно сказать на финишной прямой ;)

Учитывая, что датчик в коробке находиться на столе рядом с клавой, мышей, usb-хабом и 2-мя мониторами (менее 20 см) и под столом ПК (менее 30 см) в помещении результаты думаю неплохие.

И самое главное, если взять коробок и неистово начать его вертеть, а затем положить его на место - данные о положении меняются очень незначительно (в пределах пары градусов). Пока нужно ставить эксперименты и проверять - всё ли так как мне кажется сейчас ;)

Прошу прощения огромная фатальная ошибка.

Edited by kharlashkin
  • Upvote 2
Link to comment
Short link
Share on other sites

Прошу прощения огромная фатальная ошибка.

 

Так получилось, что в скетче я перепутал переменные - таким образом мой кватернион коррекции по компасу с помощью низкочастотного фильтра просто тупо стремился к нулевому вида (1, 0, 0, 0) и умножая полученный из DMP датчика на него у меня и получался вот тот супер стабильный ;)

Смутило что когда я коробок двигал - кубик вращался, но это только за счет того что фильтр не отрабатывает моментально.

В общем не спал пол ночи, результатом является вот это:

Особенно интересным выглядит вращение беспорядочное в конце - это я за шнурок кручу-верчу коробку с датчиком и возвращая коробок в первоначальное положение - получаю практически те же значения, что и в положении покоя. Так же видно, что есть некоторая задержка корректировки - пока не придумал что с ней делать, ну и немного трясет кубик по оси Z.

post-19155-0-64110400-1505886467_thumb.jpg

Link to comment
Short link
Share on other sites

  • 2 weeks later...

Долго возился с привязкой получаемого кватерниона с "костью" головы в Blender - как-то все запутанно там. Кость имеет свои координаты, получаемые командой:

bpy.data.armatures['Armature'].bones['head'].matrix.to_quaternion() # Blender Render

Но новые координаты задаются не от глобального кватерниона, а от нулевого видом (1.0, 0.0 , 0.0, 0.0). Ничего лучше не придумал (пока), при обновлении положения кости, сначала кватернион, обратный реальной позиции умножить на нужный поворот, затем умножить на реальный, к тому же направление осей датчика должно совпадать с направлением осей кости. В принципе, эту математику можно "зашить" напрямую в ардуинку (ресурсов то предостаточно пока), но тогда получиться прямая привязка расположения датчиков и существующего скелета, или переложить расчеты на Blender. Но можно столкнуться с нехваткой ресурсов при записи положений от множества датчиков.

В общем, идет работа помаленьку.

  • Upvote 1
Link to comment
Short link
Share on other sites

Есть вопрос к сообществу, сам уже гуглил, пока думаю над правильным ответом.

Учитывая как и что я собираюсь делать с несколькими датчиками, а именно если для каждого датчика вешать свой контроллер и на нём обрабатывать нужную математику, то встанет вопрос организации проводной сети с мастер и ведомыми контроллерами, смотрю пока в сторону RS-485. У кого есть какие мысли по этому поводу?

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

  • Upvote 2
Link to comment
Short link
Share on other sites

В 06.10.2017 в 15:55, kharlashkin сказал:

вопрос организации проводной сети

Чет я в смятении... Проверял передачу одного текстового сообщения вида кватернион с точностью 6 цифр после запятой. Получается при 50 fps не успевает передать на скорости 19200 бод/сек, а у меня таких датчиков в перспективе будет не менее 16-ти. Думаю разделить на 3 ветки датчики (левая, правая и центральная стороны), каждую завернуть в свой порт. Будет ли в таком случае успевать мастер-контроллер собирать данные и передавать по Bluetooth?

  • Upvote 1
Link to comment
Short link
Share on other sites

  • 3 weeks later...
В 08.10.2017 в 19:34, kharlashkin сказал:

Получается при 50 fps не успевает передать на скорости 19200 бод/сек

Нужно просто передавать не текст, а сами данные - тот же float занимает всего 4 байта для Arduino. Почему никто не подсказал...

  • Upvote 1
Link to comment
Short link
Share on other sites

  • 2 years later...
  • 1 year later...
2 минуты назад, Oleg_Oldis сказал:

Доброго времени суток интересно менялось ли или дорабатывалась система на протяжении года или так и оставили?

Добрый день и вам.

Ну скажем так, была разработана платка где все компоненты совмещены, сделано было 40 таких платок (2 комплекта). Сильно покопал тему перемещения в пространстве, пока сильно не получается допилить из-за отсутствия большого помещения для расчетов триангуляции. Разработал похожий прототип для обновленного датчика ICM-20948, работает не хуже. Перевел передачу протокола между датчиками и точкой доступа на mqtt-sn. С одной стороны вроде толкаю его, с другой плохо толкается, так что не сильно усердствую. Как то так.

  • Upvote 1
Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...