Jump to content
Korean Random
kharlashkin

Arduino и аналоги

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

Share this post


Link to post

Short link
Share on other sites

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


 

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

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

Edited by kharlashkin
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

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

 

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

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

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

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

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

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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

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

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

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites
В 06.10.2017 в 15:55, kharlashkin сказал:

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

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
В 08.10.2017 в 19:34, kharlashkin сказал:

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

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Два с половиной года лежал проект на полке.

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

  • Upvote 2

Share this post


Link to post

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.

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...