- Плата Arduino Uno
- Одноплатный компьютер Raspberry Pi B+ (8 Гб)
- Игровой контроллер Kinect XBOX 360 (1473)
- Модуль датчика линиии
- Планшетный компьютер Nexus 7 (2012)
- Мотор стеклоподъемника двери (VW Polo)
- WiFi модуль для Raspberry Pi B +
- Питание - элементы 18650
- Питание Kinect
- Модель адаптера
- Модель колеса
- Robot Operating System
- Raspbian Jessie
- Программа оценки скорости вращения колёс
- Программа оценки скорости вращения колёс при
различном коэффициенте заполнения ШИМ
- Система управления № 1(для Arduino) без
использования датчиков
- Система управления № 1 (для Raspberry Pi) без
использования датчиков
- Система управления № 2(для Arduino) без
использования датчиков
для оценки скорости вращения колёс
- Система управления № 2(для Raspberry Pi) без
использования датчиков (интерфейс)
- Система управления № 2(для Raspberry Pi) без
использования датчиков (модуль работы с ардуино)
- Масса каркаса с установленным приводом - 3 кг.
- Высота - 1010 мм.
- Размер основания - 400x400 мм.
- Клиренс в передней части - 18 мм.
- Клиренс в задней части - 36 мм.
- Масса левого колеса - 122 гр.
- Масса правого колеса - 132 гр.
- Максимальная скорость - 4.3 км/ч
- Драйвер двигателей L298N и Arduino
- Сглаживание показаний датчика
- Оценка скорости вращения колеса
- Установка ROS Indigo
- Отказ от использования Delay() в Arduino
- TODO: Защита от переполнения в Arduino
- TODO: Установка модуля Kinect в ROS Indigo
- Увеличение размера swap файла в Raspbian Jessie
Проект робота подразумевает минимизацию его массы, поэтому было решено отказаться от использования мощных приводов, кислотных аккумуляторов, резиновых колёс. Очень удобными для разработки колёсного привода робота оказались приводы стеклоподёмников VW Polo (6RO.959.802, 6RO.959.801). Заново напечатав на 3D принтере внутреннюю пластиковую втулку привода стеклоподъемника удалось обойтись без использования тяжёлых колёс и металлических составляющих в проектировании колёсного привода робота. Колёса робота также были напечатаны на 3D принтере.
Каркас построен на основе алюминиевых швеллеров и уголков минимальной толщины. Между моторами вставлена шпилька диаметром 5 миллиметров для предотвращения их вибрации в процессе движения робота.
Робот отмечает Новый 2018 Год.
Драйвер двигателей сильно нагревался без активного охлаждения после одной минуты работы.
В ходе разработки програмнного обеспечения не получилось написать программу, которая подсчитывает число оборотов колеса на основе прерываний, вследствие большого числа ложных срабатываний. Поэтому, подсчёт оборотов колеса основан на "ручной" обработке показаний датчиков. Для генерации оптического диска энкодера использовалась программа CodeWheel. Для точной оценки скорости оптический диск разделён на 30 секторов. Оптические диски можно скачать здесь: диск на 20 секторов, диск на 30 секторов.
После установки библиотеки libfreenect с Kinect были получены изображения и звук. Чуть ниже на этой странице, в технических заметках описаны проблемы, с которыми мы столкнулись при запуске libfreenect.
Предложены две схемы: с подключением датчиков для подсчёта числа оборотов колеса и без.
Колёса доработаны с помощью вспененного двухстороннего скотча и изоленты. Теперь шум от робота при движении снизился.
Крепление для Kinect собрано из алюминиевых уголков и оргстекла.
Схема подключения микрофона и колонок с усилителем к роботу. В нашей версии Raspberry Pi нет микрофона, поэтому используется звуковая карта, подключаемая по USB.
Наш робот победил в конкурсе IT проект 2018 года в номинации "ВУЗы".
Программа ./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 бит.
В процессе вызова функций библиотеки libfreenect возникают следующие ошибки: "Inconsistent flag", "Lost too many packets", "Invalid magic"
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 будет несложно.