Проект робота телеприсутствия ElcBot

Portfolio

Цель проекта - создание прототипа робота для отладки алгоритмов управления, обработки данных, компьютерного зрения и распознавания звуковых сигналов

Характеристики робота

- Масса каркаса с установленным приводом - 3 кг.
- Высота - 1010 мм.
- Размер основания - 400x400 мм.
- Клиренс в передней части - 18 мм.
- Клиренс в задней части - 36 мм.
- Масса левого колеса - 122 гр.
- Масса правого колеса - 132 гр.
- Максимальная скорость - 4.3 км/ч

Печать колёс и адаптеров для колёс

Проект робота подразумевает минимизацию его массы, поэтому было решено отказаться от использования мощных приводов, кислотных аккумуляторов, резиновых колёс. Очень удобными для разработки колёсного привода робота оказались приводы стеклоподёмников VW Polo (6RO.959.802, 6RO.959.801). Заново напечатав на 3D принтере внутреннюю пластиковую втулку привода стеклоподъемника удалось обойтись без использования тяжёлых колёс и металлических составляющих в проектировании колёсного привода робота. Колёса робота также были напечатаны на 3D принтере.

Portfolio
Portfolio
Portfolio
Portfolio

Сборка каркаса

Каркас построен на основе алюминиевых швеллеров и уголков минимальной толщины. Между моторами вставлена шпилька диаметром 5 миллиметров для предотвращения их вибрации в процессе движения робота.

Portfolio
Portfolio
Portfolio
Portfolio
Portfolio
Portfolio

Украшенный робот

Робот отмечает Новый 2018 Год.

Portfolio
Portfolio

Установка воздушного охлаждения на драйвер двигателей

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

Portfolio
Portfolio

Установка оптических ИК датчиков и энкодеров на колёса

В ходе разработки програмнного обеспечения не получилось написать программу, которая подсчитывает число оборотов колеса на основе прерываний, вследствие большого числа ложных срабатываний. Поэтому, подсчёт оборотов колеса основан на "ручной" обработке показаний датчиков. Для генерации оптического диска энкодера использовалась программа CodeWheel. Для точной оценки скорости оптический диск разделён на 30 секторов. Оптические диски можно скачать здесь: диск на 20 секторов, диск на 30 секторов.

Portfolio
Portfolio
Portfolio
Portfolio

Изображения и звук, полученные с Kinect

После установки библиотеки libfreenect с Kinect были получены изображения и звук. Чуть ниже на этой странице, в технических заметках описаны проблемы, с которыми мы столкнулись при запуске libfreenect.

Portfolio
Portfolio

Схема соединения электронных компонент робота

Предложены две схемы: с подключением датчиков для подсчёта числа оборотов колеса и без.

Portfolio
Portfolio

Доработка колёс робота

Колёса доработаны с помощью вспененного двухстороннего скотча и изоленты. Теперь шум от робота при движении снизился.

Portfolio
Portfolio

Установка крепления для Kinect

Крепление для Kinect собрано из алюминиевых уголков и оргстекла.

Portfolio
Portfolio
Portfolio
Portfolio
Portfolio
Portfolio

Создание площадки для размещения электронных компонент

Portfolio
Portfolio
Portfolio
Portfolio

Звуковая подсистема робота

Схема подключения микрофона и колонок с усилителем к роботу. В нашей версии Raspberry Pi нет микрофона, поэтому используется звуковая карта, подключаемая по USB.

Portfolio

Награда робота

Наш робот победил в конкурсе IT проект 2018 года в номинации "ВУЗы".

Portfolio

Уточнения по Kinect

Программа ./freenect-regtest выполняет запрос данных с кинекта и сохраняет их в четыре файла: registration_test_depth_mm.pgm (флаг - FREENECT_DEPTH_MM), registration_test_depth_raw.pgm (флаг - FREENECT_DEPTH_11BIT), registration_test_depth_registered.pgm (флаг - FREENECT_DEPTH_REGISTERED), registration_test_rgb.ppm (FREENECT_VIDEO_RGB). Изображение registration_test_rgb.ppm - обычное RGB изображение. Чтобы открыть изображения в формате PGM и, в том числе PPM, понадобится Adobe Photoshop или GIMP. При использовании флага FREENECT_DEPTH_MM библиотека libfreenect возвращает расстояние в миллиметрах, при использовании флага FREENECT_DEPTH_REGISTERED библиотека libfreenect возвращает расстояние в миллиметрах, где координаты (x, y) карты глубины соответствуют координатам (x,y) на RGB изображении (640*480). При использовании флага FREENECT_DEPTH_11BIT информация о глубине запакована в 11 бит.

Portfolio
Portfolio
Portfolio
Portfolio

Проблемы libfreenect

В процессе вызова функций библиотеки libfreenect возникают следующие ошибки: "Inconsistent flag", "Lost too many packets", "Invalid magic"

Portfolio
Portfolio

Видеопроцесс создания робота

История создания робота

1. Идея робота - октябрь 2017 г.
2. Печать колёс и адаптеров - декабрь 2017 г.
3. Сборка каркаса - декабрь 2017 г.
4. Установка охлаждения на драйвер двигателей - январь 2018 г.
5. Установка Raspbian и ROS Indigo - январь 2018 г.
6. Разработка программы оценки скорости вращения колёс, подключение оптических датчиков - февраль 2018 г.
7. Создан логотип робота - март 2018 г.
8. Выполнена оценка скорости движения колёс робота, в зависимости от коэффициента заполнения широтно-импульсной модуляции. Результаты тестирования можно посмотреть в файле. Значение коэффициента заполнения ШИМ изменяется в диапазоне от 0 до 255. В качестве питания для двигателей использовались три элемента 18650(Li-Ion) - март 2018.
9. Доработаны колёса робота, установлены вольтметры на батарейные блоки - апрель 2018.
10. Установлено крепление для Kinect - май 2018.
11. Смонтирована площадка для электронных компонент - сентябрь 2018.
12. Начата разработка подсистемы голосового управления роботом - октябрь 2018.
13. Реализована обратная связь от робота: в интерфейсе управления теперь отображается скорость вращения колёс - октябрь 2018.

Предстоящая работа

1. Нарисовать логотип робота
2. Установить и протестировать на Raspberry Pi модули ROS для работы с Kinect
3. Написать ПО для управления роботом по WiFi (реализация в виде текстового и графического интерфейса)
4. Написать ПО для захвата видео и звука с камеры Kinect и вывода видео и звука в интерфейс пользователя
5. Написать ПО для реализации системы компьютерного зрения
6. Установка на робот аудиосистемы
7. Установка библиотеки libfreenect, независящей от ROS
8. Нарисовать схему подключения драйвера двигателей к Arduino
9. Описать результаты подключения libfreenect
10. Сделать защиту от переполнения в программе для оценки скорости вращения колёс для Arduino
11. Доработать адаптер для питания Kinect от аккмуляторов
12. Программа с текстовым интерфейсом для управления роботом по ssh с обратной связью. 13. Панель для размещения электронных компонентов

Технические замечания

1. При монтировании энкодеров оптические диски были распечатаны на принтере, а потом закрашены маркером, чтобы граница между чёрным и белым была контрастнее.

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

3. В процессе установки ROS Indogo на этапе установки библиотеки liblz4-dev возникали непонятные ошибки, которые вряд ли влияли на саму установку. Скорее всего, они были связаны с процессом тестирования степени сжатия библиотекой liblz4-dev на данной платформе. Для решения проблемы в MakeFile: ros_catkin_ws/external_src/lz4-0.0~r131/programs/MakeFile были закомментированы строчки, которые вызывали ошибку. Также в Makefile можно комментировать строчки, которые делают длительные тесты по оценке степени сжатия с помощью библиотеки liblz4-dev.

4. Установка библиотек для работы в ROS с Kinect была выполнена с помощью следующей команды: rosinstall_generator libfreenect freenect_camera freenect_launch --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-custom_ros.rosinstall. Не стоит также забывать, что для Raspbian установка выполняется из исходников и указанная команда является лишь частью процесса установки из пункта 4.2 на странице Установка ROS Indigo.

5. В процессе выполнения команды catkin_make_isolated при сборке пакетов, для работы с Kinect, было обнаружено, что процесс зависает во время компиляции одного из пакетов. Как оказалось, это было связано с недостаточным количеством оперативной памяти и размером swap файла. Для решения этой проблемы размер swap файла был увеличен до 1 Гб. можно почитать инструкцию по увеличению размера swap файла. Для освобождения места на флэшке для создания большого swap файла были удалены libre-office и Wolfram Mathematica . Также одной из проблем, при выполнении catkin_make_isolated, было отсутствие различных библиотек: libpoco-dev (процесс установки описан здесь), CURL (установилась командой apt-get install libcurl4-openssl-dev, но только после выполнения apt-get upgrade), cmake-3.0 не смог найти файл FindEigen3.cmake (сделали для него ссылку: sudo ln -s /usr/share/cmake-3.0/Modules/FindEigen3.cmake, см. ссылку), OpenCV (sudo apt-get install libopencv-dev), liburdfdom (процесс установки описан здесь в пункте 3.2.1, для того, чтобы эта библиотека работала с уже установленным программным обеспечением была скачана версия 0.4.2 данной библиотеки: wget https://github.com/ros/urdfdom/archive/0.4.2.tar.gz). Всего по времени 99 пакетов компилировались и устанавливались около пяти часов.

6. Установка libfreenect прошла без каких-то особенностей. Для того, чтобы заработали обёртки данной библиотеки для Python были установлены cython2 и cython3 (sudo apt-get install cython, sudo apt-get install cython3), а также были установлены в ON соответствующие флаги в файле libfreenect-0.5.7/build/CMakeCache.txt (флаги: BUILD_PYTHON, BUILD_PYTHON2, BUILD_PYTHON3). Для установки обёрток для Python нужно перейти в каталог /wrappers/python и выполнить команды sudo python setup.py install (для установки для второго питона) и sudo python3 setup.py install (для установки для третьего питона). После компиляции libfreenect появляется несколько демо-программ, которые позволяют вызывать методы libfreenect. Если при запуске демо программ libfreenect перестаёт находить Kinect, можно переключить Kinect в другой USB порт или выключить и включить его. Известна особенность Kinect 1473, которая заключается в том, что без определённой прошивки нельзя управлять светодиодом и мотором, почитать про это можно здесь. Решить проблему с загрузкой прошивки можно следующим образом. Скрипт https://github.com/OpenKinect/libfreenect/blob/master/src/fwfetcher.py скачивает файл audios.bin, затем этот файл нужно поместить в каталог скомпилированных примеров (examples) и запустить ./freenect-wavrecord. В результате, ./freenect-wavrecord загрузит прошивку в память и можно будет пользоваться командой ./freenect-tiltdemo, т.е. управлять мотором.

7. Модуль ROS - kinect_aux после компиляции не оказался работоспособным. Также не удалось запустить модуль imgage_view. Запуск команды: rosrun image_view image_view image:=/camera/rgb/image_color приводит к ошибке. Описание ошибки здесь: https://github.com/ros-perception/image_pipeline/issues/201. Может быть, если использовать компиляцию не из исходников, а пакеты, можно будет заставить работать эти модули. Модуль freenect запукается без ошибок и находит kinect. После запуска roslaunch freenect_launch freenect.launch и выполнения команды rostopic echo /camera/rgb/image_color можно получить данные с камеры ()



8. Моторы при старте потребляют ток около 2 ампер, в рабочем режиме - около 1 ампера.

9. Планируется организация звуковой подсистемы для робота, которая будет включать микрофон, динамики, USB звуковую карту. Процесс работы будет реализован в виде запрос-ответ. Распознавание и синтез речи планируется выполнять на основе SpeechKit Cloud API. Активацию модуля распознавания будет выполняться по нажатию на кнопку, подключённую к Raspberry Pi. Возможен другой вариант активации - с использованием библиотеки CMU Sphinx, однако это технически несколько сложнее. В принципе, разработав активацию на основе кнопки, добавить активацию с помощью CMU Sphinx будет несложно.