Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В этой инструкции я объясню вам, как мы позволяем роботу Nao имитировать наши движения с помощью сенсора Kinect. Фактическая цель проекта - образовательная: учитель имеет возможность записывать определенные наборы движений (например, танец) и может использовать эти записи, чтобы дети в классе имитировали робота. Пройдя все эти инструкции шаг за шагом, вы сможете полностью воссоздать этот проект.
Это школьный проект (NMCT @ Howest, Кортрейк).
Шаг 1. Базовые знания
Чтобы воссоздать этот проект, вам необходимо обладать некоторыми базовыми знаниями:
- Базовые знания Python
- Базовые знания C # (WPF)
- Базовые знания тригонометрии
- Знания о том, как настроить MQTT на Raspberry Pi
Шаг 2: приобретение необходимых материалов
Необходимые материалы для этого проекта:
- Raspberry Pi
- Датчик Kinect v1.8 (Xbox 360)
- Нао-робот или вирусный робот (Хореграф)
Шаг 3: как это работает
Датчик Kinect подключен к компьютеру, на котором запущено приложение WPF. Приложение WPF отправляет данные приложению Python (роботу) с помощью MQTT. Если пользователь выберет, локальные файлы сохраняются.
Детальное объяснение:
Перед тем, как мы начнем запись, пользователь должен ввести ip-адрес брокера MQTT. Кроме того, нам также нужна тема, по которой мы хотим опубликовать данные. После нажатия кнопки «Старт» приложение проверит, можно ли установить соединение с брокером, и предоставит нам обратную связь. Проверить, существует ли тема, невозможно, поэтому вы несете полную ответственность за нее. Когда оба входа в порядке, приложение начнет отправлять данные (координаты x, y и z для каждого сустава) из отслеживаемого каркаса в тему на брокере MQTT.
Поскольку робот подключен к тому же брокеру MQTT и подписан на ту же тему (это также необходимо ввести в приложение python), приложение python теперь будет получать данные из приложения WPF. Используя тригонометрию и самописные алгоритмы, мы преобразуем координаты в углы и радианы, которые мы используем для вращения двигателей внутри робота в реальном времени.
Когда пользователь заканчивает запись, он нажимает кнопку остановки. Теперь у пользователя появляется всплывающее окно с вопросом, хочет ли он сохранить запись. Когда пользователь нажимает кнопку «Отмена», все сбрасывается (данные теряются), и можно начинать новую запись. Если пользователь желает сохранить запись, он должен ввести заголовок и нажать «сохранить». При нажатии кнопки «сохранить» все полученные данные записываются в локальный файл с использованием ввода заголовка в качестве имени файла. Файл также добавляется в список в правой части экрана. Таким образом, после двойного щелчка по новой записи в списке, файл будет прочитан и отправлен брокеру MQTT. Следовательно, робот будет воспроизводить запись.
Шаг 4. Настройка брокера MQTT
Для связи между kinect (проект WPF) и роботом (проект Python) мы использовали MQTT. MQTT состоит из брокера (компьютера linux, на котором запущено программное обеспечение mqtt (например, Mosquitto)) и темы, на которую клиенты могут подписаться (они получают сообщение из темы) и публиковать (они публикуют сообщение по теме).
Чтобы настроить брокера MQTT, просто загрузите весь этот образ jessie. Это чистая установка для вас Raspberry Pi с брокером MQTT на нем. Тема - «/ Сандро».
Шаг 5. Установка Kinect SDK V1.8
Чтобы kinect работал на вашем компьютере, вам необходимо установить Microsoft Kinect SDK.
Вы можете скачать это здесь:
www.microsoft.com/en-us/download/details.a…
Шаг 6: Установка Python V2.7
Робот работает с фреймворком NaoQi, этот фреймворк доступен только для python 2.7 (НЕ 3.x), поэтому проверьте, какую версию python вы установили.
Вы можете скачать python 2.7 здесь:
www.python.org/downloads/release/python-27…
Шаг 7. Кодирование
Github:
Примечания:
- Кодирование с помощью kinect: сначала ищите подключенный kinect. Сохранив это внутри свойства, мы включили цветовой и скелетный поток в kinect. Цветовой поток - это видео в реальном времени, а скелетный поток означает, что будет отображаться скелет человека перед камерой. Colorstream на самом деле не является необходимым для работы этого проекта, мы просто включили его, потому что преобразование растрового изображения в цветовой поток выглядит гладким!
- На самом деле это действительно скелетный поток. Включение скелетного потока означает, что отслеживается скелет человека. Из этого скелета вы получаете всевозможную информацию, например. ориентация костей, информация о суставах,… Ключом к нашему проекту была информация о суставах. Используя координаты x-y и z каждого сустава отслеживаемого скелета, мы знали, что можем заставить робота двигаться. Итак, каждые 0,8 секунды (используя таймер) мы публикуем координаты x, y и z каждого из сочленений брокеру mqtt.
- Поскольку проект python имеет подписку на брокере mqtt, теперь мы можем получить доступ к данным внутри этого проекта. Внутри каждого шарнира робота два мотора. Этими двигателями нельзя управлять напрямую, используя координаты x, y и z. Итак, используя тригонометрию и здравый смысл, мы преобразовали координаты x, y и z суставов в углы, недостижимые для роботов.
Таким образом, в основном каждые 0,8 секунды проект WPF публикует координаты x, y и z каждого из сочленений. Следовательно, внутри проекта Python эти координаты преобразуются в углы, которые затем отправляются в соответствующие двигатели робота.