Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Рыбный дождь — это настоящий симулятор рыбной ловли, позволяющий забросить удочку в настоящие водоёмы со всего мира и поймать ту рыбу, которая там водится.

Рыбный дождь

Спорт, Симуляторы, Рыбалка

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
47
Homo.Digit
Homo.Digit
Arduino & Pi

E-Learning. Часть 3. Blender. Визуализируем данные с гироскопа⁠⁠

8 лет назад

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


Кратко: разрабатываю специальную робо-накидку на одежду, которая сможет оцифровывать часть двигательных навыков мастеров своего дела и передавать это тем, кто только учится.


Но перед тем как визуализировать всю руку, хочу рассказать как сделать визуализатор данных средствами Blender 3D, а не того же Processing (с которым я так и не смог разобраться).


В этой статье я опишу один из способов визуализации данных из COM порта. Рассматривать буду на примере визуализации изменения ориентации платформы для 3х-осевого гироскопа и 3х-осевого акселерометра (далее просто гироскоп, для простоты). У меня это GY-BMI160, у Вас может быть любой другой, главное, чтобы Arduino отправляла данные в формате: “gx,gy,gz,ax,ay,az”.

Рис. 1. 3D модель платформы гироскопа. Основная цель – чтобы повороты нашей модели соответствовали поворотам физического гироскопа. В этой статье мы научим Blender принимать данные по COM порту.

В этой статье мы НЕ будем рассматривать следующие вещи:

1. Как подключить визуализацию нескольких датчиков, которые посылают информацию по одному COM порту.

2. Физический смысл входящих данных (примем по умолчанию, что у нас уже получены каким-то образом правильные углы).

3. Методы фильтрации данных (Фильтр Калмана, комплементарный фильтр, комплементарный фильтр второго порядка, фильтр Маджвика, получение углов из данных гироскопа, получение углов из данных акселерометра, получение углов из магнитометра и прочее).


Что будет в этой статье:

1. Как начать управлять мощной средой визуализации Blender. (Processing не столь серьезно).

2. Как настраивать Python в Blender.

3. Какие существуют подводные камни, связанные строго с Blender.


В начале хочется привести несколько причин, почему выбран именно Blender:

1. Он бесплатен.

2. Он не специфичен и используется при разработке игр, анимации, 3D моделировании как профессиональный инструмент. И как следствие по нему очень много материала и открытое сообщество.

3. Он использует Python 3. Если с Processing вы выучите язык программирования и больше нигде он не будет применим, то Python широко распространённый язык программирования. Если Вы его знаете – учить практически ничего не надо будет, если нет – то это знание гарантированно пригодится вновь.


Первое что делаем – качаем Blender с официального сайта www.blender.org. Ставим его. Откроется окно с заставкой, кликаете по свободному месту и увидите куб. Примерно как на картинке.

Первый подводный камень, Ваша видеокарта. Наводим мышкой на куб, нажимаем на колесико мыши и крутим влево-вправо. Если все хорошо, то это будет быстро. Если нет, то картинка будет менять раз в 2-5 секунд.

Как решается? Либо драйвера видеокарты слишком старые, либо слишком новые и не обкатанные. У меня оказались слишком новые на Windows 10 64x.


Заходим в диспетчер устройств – видеоадаптеры – смотрим какие у Вас стоят. Переходим на сайт производитель и у них обычно есть архивные драйвера как раз на такие случаи. Качаем-ставим.


Второй подводный камень. Внутренний Python блендера создатели посчитали самодостаточным и туда нельзя поставить новые библиотеки, например, нужную нам PySerial.

Решаем так:

Смотрим какая версия питона установлена.

Вариант 1:

Ставим в скаченный питон все что нам нужно (как это сделать я тут не буду расписывать, это стандартная процедура). Нам нужна библиотека PySerial.


Вариант 2:

Находим папку с нужной библиотекой, например, на GitHube (https://github.com/pyserial/pyserial).

Из появившейся папки в Scripts/serial или просто скаченную папку необходимо скопировать блендеру в C:\Program Files\Blender Foundation\Blender\2.78\python\lib.

Переходим в консоль Python Blender’а и проверяем. Пишем import serial.

Если не ругается – то все хорошо установлено.


Третий подводный камень:

COM порт передающий данные по проводу и по Bluetooth устройству могут иметь разное поведение после закрытия порта. Чуть подробнее далее.


Первая команда – это s = serial.Serial('COM1', 9600)

Следите за номером порта (как у меня COM1), много ошибок связано с тем, что можно забыть номер подключаемого порта или забыть его включить физически.

Следите за скоростью. Я, например, разгонял частоту работы датчика, ставил 250 000 БОД и забывал, что блендер ожидает 9600.

Чтобы последовательно считывать данные нужна команда s.readline().

На выходе мы имеем байт-строку формата “b’gx,gy,gz,ax,ay,az\n”.


Важно! Подключите библиотеку Re и разберитесь в ней. Про это мы не будем тут говорить, но пару полезных вещей коснемся. import re (к счастью стандартная библиотека).


Для начала подготовим для обработки её и переведем в строковый формат:


line = s.readline()

line2 = str(line)

Далее используем функцию sp = re.split('[^0-9.-]+', line2)


В квадратных скобках указываются символы, которые не удаляются, все остальные удаляются и служат разделителями для созданного массива sp.


Можно теперь обращаться так: sp[1]-sp[6] – наши значения, первый и последний элементы будут пустыми.


Затем для того, чтобы использовать данные в своих расчётов – просто задайте им нужный тип. float(sp[1]) – даст нужное число.


В конце обязательно закрывайте порт. s.close(). Иначе никто больше к нему не подключиться, Arduino IDE будет говорить, что порт занят уже кем-то.


Ссылка на файл с кодом https://yadi.sk/d/-Jwmt1Qw3MvqJa

В начале запустить Game Engine. Потом нажимаете на англ. раскладке "P". Затем используете клавиши: "O" - открыть порт, "R" - начать чтение данные, "C" - закрыть порт (это важно!), ESC - выйти из режима Game Engine.


Прошлые части:

0: E-Learning. Образовательная робототехника. Часть 0. Вступление

https://pikabu.ru/story/elearning_obrazovatelnaya_robototekh...

1: Часть 1. В общем о визуализации данных в Blender и Unity

https://pikabu.ru/story/chast_1_v_obshchem_o_vizualizatsii_d...

2: E-Learning. Образовательная робототехника. Часть 2. Эволюция костюмов

https://pikabu.ru/story/elearning_obrazovatelnaya_robototekh...

Показать полностью 4
[моё] Blender Gyro Визуализация Arduino Esp8266 Nodemcu Длиннопост
23
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии