Устройство и программирование автономных роботов. Проекты на Python и Raspberry Pi
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Автор:
Стейпл Дэнни
Перевод:
Шевчук Е. В.
Науч. ред.:
Яценков Валерий Станиславович
Год издания: 2022
Кол-во страниц: 520
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-97060-989-7
Артикул: 796810.02.99
Эта книга посвящена созданию интеллектуального робота и разработке кода для его поведенческих сценариев. Для построения робота используются широко доступные компоненты — датчики, двигатели, камеры, микрофоны, динамики, светодиоды и микрокомпьютер Raspberry Pi. Раскрывается ряд специализированных тем, таких как компьютерное зрение и голосовое управление. Также читатель узнает о специализированных сообществах, посвященных робототехнике, и перспективах ее развития.
Книга подойдет как новичкам в области программирования, так и опытным программистам, желающим применить свои навыки в аппаратном проекте. Для изучения материала необходимо знание языка Python и умение работать с циклами, условиями и функциями.
- Полная коллекция по информатике и вычислительной технике
- Аналитика данных
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Интернет вещей (IoT)
- Программирование и алгоритмизация
- Программирование на Python
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Дэнни Стейпл Устройство и программирование автономных роботов
Learn Robotics Programming Build and control AI-enabled autonomous robots using the Raspberry Pi and Python Danny Staple BIRMINGHAM—MUMBAI
Устройство и программирование автономных роботов Проекты на Python и Raspberry Pi Дэнни Стейпл Москва, 2022
УДК 004.896 ББК 32.816 C79 Дэнни Стейпл C79 Устройство и программирование автономных роботов / пер. с англ. Е. В. Шевчук; науч. ред. В. С. Яценков. – М.: ДМК Пресс, 2022. – 520 с.: ил. ISBN 978-5-97060-989-7 Эта книга посвящена созданию интеллектуального робота и разработке кода для его поведенческих сценариев. Для построения робота используются широко доступные компоненты – датчики, двигатели, камеры, микрофоны, динамики, светодиоды и микрокомпьютер Raspberry Pi. Раскрывается ряд специализированных тем, таких как компьютерное зрение и голосовое управление. Также читатель узнает о специализированных сообществах, посвященных робототехнике, и перспективах ее развития. Книга подойдет как новичкам в области программирования, так и опытным программистам, желающим применить свои навыки в аппаратном проекте. Для изучения материала необходимо знание языка Python и умение работать с циклами, условиями и функциями. УДК 004.896 ББК 32.816 First published in the English language under the title ‘Learn Robotics Programming – Second Edition – (9781839218804) Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Copyright ©Packt Publishing 2021 © Оформление, издание, перевод, ДМК Пресс, 2022 ISBN (анг.) 978-1-83921-880-4 ISBN (рус.) 978-5-97060-989-7
Оглавление Участники ........................................................................................... 17 Об авторе ...........................................................................................................17 О рецензентах ...................................................................................................17 Предисловие ...................................................................................... 19 Для кого эта книга ............................................................................................19 Какие темы описаны в книге ...........................................................................19 Как извлечь из книги наибольшую пользу .....................................................21 Загрузка файлов с примерами кода ................................................................21 Code in Action ....................................................................................................22 Изображения в цвете ........................................................................................22 Используемые обозначения ............................................................................22 Оставайтесь на связи ........................................................................................23 Отзывы ..............................................................................................................23 ЧАСТЬ 1. ВВЕДЕНИЕ – ОСНОВЫ РОБОТОТЕХНИКИ ... 25 Глава 1. Введение в робототехнику ............................................... 27 Что такое робот? ...............................................................................................27 Продвинутые и впечатляющие роботы ..........................................................29 Марсоходы ....................................................................................................31 Роботы в доме ...................................................................................................32 Стиральная машина .....................................................................................32 Другие домашние роботы ............................................................................33 Роботы в промышленности .............................................................................34 Роботы-манипуляторы.................................................................................34 Роботы на складах ........................................................................................36 Роботы для участия в соревнованиях, учебные и любительские роботы .....36 Выводы ..............................................................................................................39 Задание ..............................................................................................................40 Дополнительные материалы ...........................................................................40 Глава 2. Структурные элементы робота – код и электроника ... 42 Технические условия ........................................................................................42 Внутреннее устройство робота ........................................................................42 Типы компонентов робота ...............................................................................46 Типы двигателей ..........................................................................................46 Другие типы приводов .................................................................................48
Индикаторы состояния – дисплеи, световые и звуковые индикаторы ....49 Типы сенсоров ..............................................................................................49 Контроллеры и устройства ввода/вывода .......................................................51 Контакты ввода/вывода ...............................................................................52 Контроллеры .................................................................................................53 Модели контроллера Raspberry Pi ...............................................................56 Набросок компонентов и структуры кода ......................................................57 Разработка аппаратного устройства робота ...................................................59 Выводы ..............................................................................................................62 Упражнения ......................................................................................................62 Дополнительные материалы ...........................................................................62 Глава 3. Изучение Raspberry Pi ....................................................... 63 Технические требования ..................................................................................63 Функциональные возможности Raspberry Pi..................................................63 Скорость и производительность .................................................................64 Возможности подключения .........................................................................64 Преимущества Raspberry Pi 3A+ ..................................................................64 Выбор способов подключения .........................................................................65 Контакты для подключения питания..........................................................66 Шины передачи данных ...............................................................................67 Входы/выходы общего назначения .............................................................67 Платы расширения HAT для Raspberry Pi ...................................................67 Операционная система Raspberry Pi ...............................................................68 Запись образа ОС Raspberry Pi на SD-карту ....................................................68 Выводы ..............................................................................................................70 Задание ..............................................................................................................71 Дополнительные материалы: ..........................................................................71 Глава 4. Автономное управление роботом с помощью Raspberry Pi ........................................................................................ 72 Технические требования ..................................................................................72 Сущность автономных систем и их преимущества .......................................73 Настройка Wi-Fi и SSH на Raspberry Pi ............................................................74 Поиск Raspberry Pi в сети .................................................................................76 Установка Bonjour для Windows ...................................................................76 Тест системы .................................................................................................77 Устранение неполадок .................................................................................77 Подключение к Raspberry Pi посредством PuTTY и SSH ................................78 Настройка конфигурации ОС Raspberry Pi .....................................................80 Изменение имени Raspberry Pi ....................................................................80 Защита Raspberry Pi ......................................................................................82 Перезагрузка и повторное подключение ...................................................82 Обновление программного обеспечения на Raspberry Pi .........................85 Завершение сеанса Raspberry Pi ..................................................................86 Выводы ..............................................................................................................86 6 Оглавление
Задание ..............................................................................................................87 Дополнительные материалы ...........................................................................87 Глава 5. Создание резервных копий с помощью Git и SD-карты ......................................................................88 Технические требования ..................................................................................88 Причины возникновения проблем при написании и изменении кода .......89 Повреждение SD-карты и потеря данных ..................................................89 Изменение кода или конфигурации ...........................................................89 Стратегия 1 – хранение кода на ПК и его последующая передача ...........................................................................90 Стратегия 2 – создание копий с помощью Git ................................................92 Стратегия 3 – резервное копирование данных SD-карты .............................94 Windows .........................................................................................................95 Mac .................................................................................................................97 Linux ............................................................................................................100 Выводы ............................................................................................................101 Задание ............................................................................................................101 Дополнительные материалы .........................................................................102 ЧАСТЬ 2. СОЗДАНИЕ АВТОНОМНОГО РОБОТА – ПОДКЛЮЧЕНИЕ ДАТЧИКОВ И ДВИГАТЕЛЕЙ К RASPBERRY PI ........................................................................103 Глава 6. Сборка основания – колеса, питание и электропроводка .........................................................................105 Технические требования ................................................................................105 Выбор набора шасси .......................................................................................106 Размер .........................................................................................................106 Количество колес ........................................................................................107 Колеса и двигатели .....................................................................................108 Простота ......................................................................................................109 Стоимость ...................................................................................................110 Заключение ................................................................................................110 Выбор платы контроллера двигателя ............................................................110 Степень интеграции ...................................................................................111 Использование контактов ..........................................................................111 Размер .........................................................................................................112 Пайка ...........................................................................................................113 Силовой источник питания .......................................................................113 Способы подключения ...............................................................................113 Заключение .................................................................................................114 Питание робота ...............................................................................................115 Проверка компоновки ....................................................................................117 Сборка основания ...........................................................................................120 Оглавление 7
Установка диска энкодера ..........................................................................122 Установка двигателя с помощью опор ......................................................122 Установка поворотного колеса ..................................................................124 Установка ведущих колес ...........................................................................125 Прокладка проводов...................................................................................126 Установка Raspberry Pi ...............................................................................127 Установка источников питания .................................................................128 Готовое основание для робота ...................................................................130 Подключение двигателей к Raspberry Pi .......................................................131 Подключение проводов к HAT-плате ........................................................132 Автономное питание .................................................................................134 Выводы ............................................................................................................136 Задание ............................................................................................................137 Дополнительные материалы .........................................................................137 Глава 7. Движение и повороты – код на Python для управления двигателями .......................................................138 Технические требования ................................................................................138 Разработка кода для проверки двигателей ..................................................139 Подготовка библиотек ................................................................................139 Тест – обнаружение HAT-платы двигателя ...............................................139 Тест – демонстрация работы двигателей ..................................................141 Устранение неполадок ...............................................................................142 Как работает код .........................................................................................142 Рулевое управление робота ...........................................................................144 Типы рулевого управления ........................................................................144 Рулевое управление нашего робота ..........................................................147 Создание объекта Robot – код для взаимодействия с роботом ...................148 Для чего нужен объект? ..............................................................................149 Что мы поместим в объект? .......................................................................150 Разработка сценария для следования по заданной траектории .................154 Выводы ............................................................................................................157 Задание ............................................................................................................157 Дополнительные материалы .........................................................................157 Глава 8. Код на Python для работы с датчиками расстояния .....158 Технические требования ................................................................................158 Выбор между оптическими и ультразвуковыми дальномерами ................159 Оптические дальномеры................................................................................160 Ультразвуковые дальномеры .....................................................................160 Логические уровни и трансляторы логических уровней .........................161 Зачем использовать два датчика? .............................................................164 Подключение ультразвуковых дальномеров и обработка получаемых ими данных ...............................................................................165 Установка датчиков на шасси ....................................................................165 Подключение выключателя питания ........................................................167 8 Оглавление
Подключение дальномеров .......................................................................170 Установка библиотек Python для работы с датчиками ............................172 Считывание данных ультразвуковых датчиков расстояния ...................172 Устранение неполадок ...............................................................................175 Обход стен – разработка сценария обхода препятствий .............................176 Добавление датчиков в класс Robot ..........................................................176 Разработка сценария обхода препятствий ...............................................177 Первая попытка разработки стратегии обхода препятствий ..................178 Разработка более сложной стратегии обхода препятствий .....................182 Выводы ............................................................................................................184 Задание ............................................................................................................184 Дополнительные материалы .........................................................................185 Глава 9. Код на Python для работы со светодиодами ..............186 Технические требования ................................................................................186 Что такое линейка RGB-светодиодов? ..........................................................187 Сравнение технологий светодиодной индикации .......................................187 RGB-значения .............................................................................................189 Подключение светодиодной линейки к Raspberry Pi ...................................190 Установка светодиодной линейки на робота ...........................................190 Разработка кода для управления дисплеем робота ..............................................191 Создание интерфейса для управления светодиодами ............................191 Добавляем светодиоды в объект Robot .....................................................193 Тест одного светодиода ..............................................................................194 Тест всех светодиодов ................................................................................196 Реализация радужного свечения на светодиодной линейке .......................197 Цветовые модели ........................................................................................197 Радужное свечение светодиодов ...............................................................199 Использование светодиодов для получения отладочных данных в сценариях обхода препятствий ..................................................................201 Реализация обычного свечения ................................................................202 Реализация радужного свечения ...............................................................204 Выводы ............................................................................................................205 Задание ............................................................................................................205 Дополнительные материалы .........................................................................206 Глава 10. Код на Python для управления сервоприводами ....207 Технические требования ................................................................................207 Что такое сервоприводы? ...............................................................................208 Сервопривод: взгляд изнутри ...................................................................209 Отправка управляющих сигналов сервоприводу .....................................210 Позиционирование сервоприводов с помощью Raspberry Pi .....................212 Создание тестового кода ............................................................................213 Устранение неполадок ...............................................................................216 Управление ДПТ и сервоприводами .........................................................217 Калибровка сервоприводов .......................................................................218 Создание механизма поворота и наклона ....................................................219 Оглавление 9
Сборка механизма ......................................................................................220 Установка механизма поворота и наклона на робота..............................224 Разработка кода для механизма поворота и наклона ..................................225 Создание объекта Servos ............................................................................225 Добавляем сервоприводы в класс Robot ...................................................228 Разработка скрипта для движения «головы» робота по окружности ............................................................................................229 Запуск сценария .........................................................................................231 Устранение неполадок ...............................................................................231 Реализация сканирующего сонара ................................................................232 Установка датчика ......................................................................................232 Установка библиотек ..................................................................................235 Поведенческий скрипт ...............................................................................235 Выводы ............................................................................................................238 Задание ............................................................................................................239 Дополнительные материалы .........................................................................239 Глава 11. Код на Python для работы с энкодерами ..................240 Технические требования ................................................................................240 Измерение пройденного расстояния с помощью энкодеров ......................241 Где применяются энкодеры .......................................................................241 Типы энкодеров ..........................................................................................241 Кодирование абсолютного или относительного положения ...................243 Кодирование направления и частоты вращения .....................................244 Энкодеры, которые мы будем использовать ............................................245 Установка энкодеров на робота .....................................................................246 Подготовка энкодеров ................................................................................247 Снятие Raspberry Pi ....................................................................................248 Установка энкодеров на шасси ..................................................................249 Подключение энкодеров к Raspberry Pi ....................................................249 Измерение пройденного расстояния с помощью кода на Python ..............251 Ведение журнала ........................................................................................251 Простой подсчет .........................................................................................252 Добавляем энкодеры в объект Robot .........................................................255 Преобразование тактов в миллиметры ....................................................257 Движение по прямой ......................................................................................259 Коррекция отклонения с помощью ПИД-регуляторов ............................259 Создание объекта ПИД-регулятора ...........................................................261 Создание кода для движения по прямой ..................................................263 Устранение неполадок ...............................................................................265 Перемещение на определенное расстояние .................................................266 Рефакторинг преобразования единиц измерения для класса EncoderCounter ............................................................................................266 Настройка констант ....................................................................................267 Разработка поведенческого скрипта для движения на определенное расстояние .....................................................................268 Выполнение точного поворота ......................................................................270 Создание функции drive_arc ......................................................................274 10 Оглавление
Выводы ............................................................................................................275 Задание ............................................................................................................276 Дополнительные материалы .........................................................................276 Глава 12. Код на Python для работы с IMU .................................278 Технические требования ................................................................................279 Подробнее об инерциальных измерительных модулях (IMU) ....................279 Предлагаемые модели IMU ........................................................................280 Пайка – подсоединение контактов к IMU .....................................................281 Создание паянного соединения ................................................................281 Установка IMU на робота ................................................................................283 Физическое размещение ...........................................................................283 Подключение IMU к Raspberry Pi ...............................................................286 Считывание данных датчика температуры ..................................................288 Установка программного обеспечения .....................................................288 Устранение неполадок ...............................................................................289 Считывание регистра температуры ..........................................................289 Устранение неполадок ...............................................................................293 Упрощение командной строки VPython ...................................................294 Считывание данных гироскопа с помощью Python .....................................294 Как работает гироскоп ...............................................................................294 Добавление гироскопа в интерфейс .........................................................297 Построение графика данных гироскопа ...................................................297 Считывание данных акселерометра с помощью Python .............................299 Как работает акселерометр ........................................................................299 Добавление акселерометра в интерфейс ..................................................300 Отображение данных акселерометра в виде вектора ..............................300 Считывание данных магнитометра ..............................................................302 Как работает магнитометр ........................................................................302 Добавление интерфейса магнитометра ...................................................304 Отображение данных магнитометра ........................................................304 Выводы ............................................................................................................306 Задание ............................................................................................................306 Дополнительные материалы .........................................................................306 ЧАСТЬ 3. СЛУХ И ЗРЕНИЕ – «ИНТЕЛЛЕКТУАЛЬНЫЕ» ДАТЧИКИ ДЛЯ РОБОТА .........................................................309 Глава 13. Система технического зрения робота – камера Pi и OpenCV ........................................................................311 Технические требования ................................................................................311 Настройка камеры Raspberry Pi .....................................................................312 Установка камеры на механизм поворота и наклона ..............................313 Подключение камеры ................................................................................316 Настройка программного обеспечения для задач компьютерного зрения ..................................................................................318 Оглавление 11
Настройка программного обеспечения камеры Pi ..................................318 Получение изображения с Raspberry Pi ....................................................319 Установка OpenCV и вспомогательных библиотек ..................................319 Создание приложения для потоковой передачи данных камеры Raspberry Pi ........................................................................................320 Разработка потокового сервера OpenCV ...................................................321 Создание объекта CameraStream ...............................................................322 Создание главного приложения сервера изображений ...........................323 Создание шаблона ......................................................................................325 Запуск сервера изображений .....................................................................326 Устранение неполадок ...............................................................................326 Запуск фоновых задач во время потоковой передачи .................................327 Создание ядра веб-приложения ................................................................328 Разработка управляемого поведенческого скрипта ................................331 Создание шаблона элемента управления .................................................332 Запуск управляемого сервера изображений ............................................333 Отслеживание цветных объектов с помощью кода на Python ....................333 Преобразование изображения в информацию ........................................334 Усовершенствование ПИД-регулятора .....................................................336 Создание компонентов поведенческого скрипта ....................................338 Запуск поведенческого скрипта ................................................................343 Настройка параметров ПИД-регулятора ..................................................344 Устранение неполадок ...............................................................................345 Отслеживание лиц с помощью кода на Python ............................................346 Поиск объекта на изображении .................................................................346 Сканирование базовых признаков ............................................................347 План поведенческого сценария отслеживания лиц .................................349 Создание кода для сценария отслеживания лиц ......................................350 Запуск поведенческого скрипта отслеживания лиц ................................353 Устранение неполадок ...............................................................................354 Выводы ............................................................................................................354 Задание ............................................................................................................355 Дополнительные материалы .........................................................................355 Глава 14. Код на Python для отслеживания линий с помощью камеры .............................................................357 Технические требования ................................................................................358 Введение в отслеживание линий ...................................................................358 Что такое отслеживание линий? ................................................................358 Использование в промышленности ..........................................................358 Типы алгоритмов отслеживания линий ...................................................359 Создание тестового маршрута .......................................................................360 Материалы для создания тестового маршрута ........................................361 Создание линии ..........................................................................................361 Конвейерная обработка данных компьютерного зрения для следования по линиям ............................................................................362 12 Оглавление
Алгоритмы отслеживания линий с помощью камеры ............................362 Конвейер обработки изображения ............................................................363 Проверка алгоритма компьютерного зрения на основе образцов изображений ..................................................................................366 Зачем нужны тестовые изображения? ......................................................366 Получение тестовых изображений ............................................................366 Создание кода на Python для обнаружения границ линии .....................368 Определение положения линии по границам ..........................................371 Тест снимков без четкой линии .................................................................372 Следование по линиям с помощью ПИД-алгоритма ...................................374 Создание блок-схемы поведенческого сценария .....................................375 Добавляем время в ПИД-регулятор ..........................................................376 Разработка начального кода для поведенческого скрипта .....................376 Настройка параметров ПИД-регулятора ..................................................383 Устранение неполадок ...............................................................................383 Нахождение линии при ее потере .................................................................383 Выводы ............................................................................................................384 Задание ............................................................................................................385 Дополнительные материалы .....................................................................385 Глава 15. Голосовая связь с роботом посредством Mycroft .....386 Технические требования ................................................................................387 Введение в Mycroft – основные понятия ......................................................387 Преобразование речи в текст.....................................................................387 Слово для пробуждения .............................................................................387 Реплика .......................................................................................................388 Намерение...................................................................................................388 Диалог ..........................................................................................................388 Словарь ........................................................................................................388 Навык ..........................................................................................................388 Ограничения голосового управления ...........................................................389 Аудиовход и выход для Raspberry Pi .............................................................389 Физическая установка ................................................................................390 Установка программного обеспечения голосового помощника на Raspberry Pi ............................................................................................391 Установка программного обеспечения ReSpeaker ...................................392 Настройка взаимодействия звуковой карты и Mycroft ............................394 Начало использования Mycroft ..................................................................395 Устранение неполадок ...............................................................................397 Разработка API с помощью Flask ...................................................................397 Как работает управления роботом с помощью Mycroft ...........................398 Удаленный запуск поведенческого скрипта ............................................399 Создание cервера API управления с помощью Flask ...............................401 Устранение неполадок ...............................................................................403 Разработка кода для запуска Mycroft на Raspberry Pi ..................................403 Разработка намерения ...............................................................................404 Оглавление 13
Устранение неполадок ...............................................................................409 Создание еще одного намерения ..............................................................410 Выводы ............................................................................................................411 Задание ............................................................................................................412 Дополнительные материалы .........................................................................413 Глава 16. Погружаемся глубже в работу IMU .............................414 Технические требования ................................................................................414 Разработка кода для виртуального робота ...................................................415 Создание модели робота в VPython ..........................................................415 Определение параметров вращения с помощью гироскопа .......................419 Калибровка гироскопа ...............................................................................421 Изменение положения виртуального робота на основе данных гироскопа ......................................................................................422 Измерение углов тангажа и крена с помощью акселерометра ...................426 Определение углов тангажа и крена на основе векторных данных акселерометра ...............................................................................426 Сглаживание данных акселерометра ........................................................429 Совместная обработка данных акселерометра и гироскопа ...................430 Определение направления с помощью магнитометра ...............................433 Калибровка магнитометра ........................................................................433 Приблизительное определение направления робота с помощью магнитометра на практике .......................................................439 Объединение показаний датчиков для ориентирования робота ...............441 Управление роботом на основе показаний IMU ...........................................447 Выводы ............................................................................................................449 Задание ............................................................................................................449 Дополнительные материалы .........................................................................449 Глава 17. Разработка кода на Python для управления роботом с помощью смартфона ...................................................451 Технические требования ................................................................................452 Когда голосовое управление не работает (или Зачем нам нужно управлять роботом) .................................................452 Режимы меню – выбор поведенческих сценариев ......................................452 Управление режимами робота ..................................................................454 Устранение неполадок ...............................................................................455 Веб-сервер ...................................................................................................456 Шаблон ........................................................................................................456 Запуск приложения ....................................................................................458 Устранение неполадок ...............................................................................460 Выбор контроллера – как лучше управлять роботом и почему ..................461 Обзор будущего приложения .....................................................................461 Подготовка Raspberry Pi к удаленному управлению – основы системы управления ......................................................................................................464 Расширение кода ядра изображения ........................................................465 Разработка сценария ручного управления ...............................................466 14 Оглавление
Шаблон (веб-страница) ..............................................................................468 Таблица стилей ...........................................................................................471 Разработка кода для ползунков .................................................................474 Запуск системы ...........................................................................................477 Устранение неполадок ...............................................................................478 Реализация полного управления роботом через смартфон ........................479 Совместимость режимов меню с поведенческими сценариями, использующими Flask ................................................................................479 Загрузка видеосервисов .............................................................................480 Стилизация меню .......................................................................................482 Реализация запуска меню вместе с Pi ...........................................................484 Добавляем светодиоды на сервер меню ...................................................484 Автоматический запуск с помощью инструмента systemd .....................485 Выводы ............................................................................................................487 Задание ............................................................................................................488 Дополнительные материалы .........................................................................488 Часть 4. Дальнейшее изучение робототехники ..................491 Глава 18. Дальнейшее развитие навыков программирования робототехнических систем ........................493 Робототехнические интернет-сообщества – форумы и социальные сети ..... 493 Каналы на YouTube, с которыми стоит ознакомиться .............................495 Технические вопросы – куда обратиться за помощью ............................496 Мероприятия – соревнования, площадки для совместной работы и встречи ............................................................................................496 Площадки для совместной работы ............................................................497 Maker Faire, Raspberry Jam и Coder Dojo ...................................................497 Соревнования .............................................................................................498 Навыки, которые стоит освоить, – 3D-печать, пайка, печатные платы и станки с ЧПУ ....................................................................499 Навыки проектирования ............................................................................499 Навыки обработки компонентов и cборки ...............................................500 Навыки работы с электроникой ................................................................502 Подробнее о компьютерном зрении .............................................................504 Книги ...........................................................................................................504 Онлайн-курсы .............................................................................................504 Социальные сети ........................................................................................505 Переход к машинному обучению ..................................................................505 Операционная система для роботов .........................................................506 Выводы ............................................................................................................507 Дополнительные материалы .........................................................................507 Глава 19. Планирование следующего робототехнического проекта – подводим итоги ............................................................508 Технические требования ................................................................................508 Представляем нового робота – как он будет выглядеть ..............................508 Оглавление 15
Создание блок схемы......................................................................................510 Выбор компонентов .......................................................................................511 Планирование кода ........................................................................................512 Рассказываем миру о проекте .......................................................................515 Выводы ............................................................................................................516 Предметный указатель ..................................................................517 16 Оглавление
Участники Об автОре Дэнни Стейпл (Danny Staple) занимается созданием роботов и гаджетов в качестве хобби, снимает видеоролики, посвященные робототехнике, а также является участником таких мероприятий, как Pi Wars и Arduino Day. С 2000 года профессионально занимается разработкой программного обеспечения. В 2009 году начал заниматься программированием на Python, уделяя особое внимание процессам разработки и автоматизации. Большую часть своей профессиональной деятельности Дэнни посвятил работе со встроенными системами, включая встроенные системы Linux. Сейчас является наставником в CoderDojo Ham, где обучает детей программированию. Ранее руководил клубами LEGO Robotics. Вместе с детьми Дэнни создал таких роботов, как TankBot, SkittleBot, Bangers N Bash (робот из ланчбокса), Big Ole Yellow (еще один гусеничный робот), ArmBot и SpiderBot. Я хотел бы поблагодарить Дэвида Андерсона (David Anderson) за ценные советы относительно моих идей и мотивацию. Также я выражаю благодарность Бену Наттоллу (Ben Nuttall) и Дейву Джонсу (Dave Jones) (@waveform80) за разработку GPIOZero и ответы на мои бесчисленные вопросы в Twitter. Со встречи с Дейвом Джонсом (Dave Jones), автором библиотеки PiCamera, в ресторане Кардиффа начался мой путь к изучению компьютерного зрения. И наконец, я благодарю своих детей, Хелену (Helena) и Джонатана (Jonathan), за их поддержку, терпение и помощь при работе с графиками. О рецензентах Лео Уайт (Leo White) – выпускник Кентского университета (University of Kent), профессиональный инженер-программист, интересующийся электроникой, 3D-печатью и робототехникой. Сначала он занимался программированием на Commodore 64, затем разработал несколько приложений для Acorn Archimedes, а сейчас на постоянной основе занимается разработкой кода для ТВ-приставок. На основе Raspberry Pi Лео создавал роботов из детских игрушек и роботов-манипуляторов, попутно описывая этот процесс и свой опыт в блоге. Также проводил презентации на Raspberry Jams и участвовал в соревнованиях Pi Wars. Рамкумар Гандинатан (Ramkumar Gandhinathan) – исследователь и профессиональный робототехник. Своего первого робота создал в шестом классе. Благодаря личным и профессиональным связям он занимается робототехникой уже более 15 лет. Рамкумар создал более 80 различных роботов. Общий
профессиональный опыт в области робототехники составляет 7 лет (4 года полной занятости и 3 года неполной/стажировки). На протяжении 5 лет он работал с ROS (Robot Operating System – операционная система для роботов). В рамках профессиональной карьеры Рамкумар разработал свыше 15 решений ROS для промышленных роботов. Также он увлекается созданием и пилотированием дронов. В круг его исследовательских интересов и увлечений входит SLAM (Simultaneous Localization And Mapping – одновременная локализация и построение карты), планирование движений, совместное использование данных датчиков, коммуникация между роботами и системная интеграция. 18 Участники
Предисловие Эта книга посвящена созданию интеллектуального робота и разработке кода для его поведенческих сценариев. Вы узнаете о навыках, которые требуются для создания робота из отдельных компонентов, а также о тонкостях их выбора. Для построения робота из этой книги вы будете использовать такие компоненты, как датчики, двигатели, камеры, микрофоны, динамики, светодиоды и Raspberry Pi. Далее в книге вы узнаете, как разработать код для перечисленных компонентов. Вы будете использовать язык программирования Python, а также немного HTML/CSS и JavaScript. Все компоненты робота, описанные в этой книге, широко доступны. Приведенные примеры кода призваны продемонстрировать, как работает та или иная технология. В дальнейшем вы сможете комбинировать разные части программного и аппаратного обеспечения, чтобы создавать сложных роботов с более интересными поведенческими сценариями. В книге пересекаются темы программирования и робототехники, а также раскрывается ряд специализированных тем, таких как компьютерное зрение и голосовое управление. Для кОгО эта книга Книга подойдет как новичкам в области программирования, так и опытным программистам, желающим применить свои навыки в аппаратном проекте. Для этого не обязательно быть экспертом, достаточно быть способным ввести несколько строк кода и уметь работать с циклами, условиями и функциями. В книге затрагивается тема объектно-ориентированного программирования, но вам не обязательно разбираться в нем перед прочтением. Для создания робота из этой книги вам не понадобится специально оборудованная мастерская – достаточно уметь паять и крепить компоненты болтами. Позже мы поговорим об этом подробнее. Вам вовсе не обязательно иметь опыт работы с электроникой или созданием каких-либо устройств. В книге представлены базовые понятия, и я надеюсь, что это вызовет у вас здоровый интерес к дальнейшему изучению. Самое главное – это ваше желание создать робота и научить его делать интересные вещи. какие темы Описаны в книге В главе 1 рассказывается о том, как устроены роботы, как они применяются на производстве и в быту, а также описываются некоторые примеры роботов, созданных новичками. В главе 2 подробно рассказывается о компонентах робота и о том, как их выбирать. Также здесь представлены блок-схемы будущей системы и кода.
В главе 3 говорится о микрокомпьютере Raspberry Pi, его подключении и операционной системе – Raspbian Linux. В этой главе вы запишете образ операционной системы на SD-карту и научитесь использовать ее в роботе. В главе 4 рассказывается, как реализовать беспроводную связь робота с Raspberry Pi. В главе 5 вы узнаете, какие неполадки могут возникнуть в коде и как предотвратить его потерю, сохранив копии в репозиториях. В главе 6 мы переходим к сборке основания робота. Здесь рассказывается о тонкостях выбора компонентов и проверке их размещения. В главе 7 показано, как разработать код для движения робота. Также здесь закладываются основы для кода из следующих глав. В главе 8 мы добавим роботу датчики и разработаем для них код, благодаря которому робот сможет самостоятельно обходить стены и препятствия. В главе 9 рассказывается, как добавить роботу цветные светодиоды. Здесь вы узнаете, как использовать дополнительные выводы для отладки или просто для развлечения. В главе 10 рассказывается о сервоприводах и их использовании для позиционирования сенсорной головки, а также «конечностей» робота. В главе 11 показано, как создать код для получения точной информации о перемещении колес с помощью одометра/тахометра. Здесь ваш робот научится ездить по прямой, выполнять точные повороты и определять, насколько далеко он переместился. В этой главе мы впервые поговорим о ПИД-регуляторах. В главе 12 рассказывается об инерциальном измерительном модуле (IMU), который включает датчики для измерения температуры, ускорения, скорости вращения и магнитных полей. В этой главе мы впервые поговорим о пайке и VPython. В главе 13 вы узнаете, как получать данные с камеры, и научите робота передвигаться, основываясь на компьютерном зрении. Также здесь показано, как осуществляется потоковая передача обработанного видео в браузер. В главе 14 рассказывается, как научить робота следовать по линиям с помощью камеры Raspberry Pi. В главе 15 описывается разработка системы управления роботом с помощью голосового помощника. Вы научитесь использовать голосовые команды и получать от робота ответы. В главе 16 рассказывается об объединении датчиков, описанных в главе 12. Вы узнаете, как использовать их для определения положения робота, а также разработаете поведенческий скрипт, который будет действовать как компас. В главе 17 мы переходим к созданию веб-приложения меню и панели управления, похожей на геймпад. С помощью этой системы вы сможете управлять роботом со смартфона, опираясь на видео с камеры. В главе 18 вы узнаете больше о мире робототехники. Здесь рассказывается о различных робототехнических сообществах, потенциальных областях развития и соревнованиях роботов. В заключительной главе 19 обобщается представленная в книге информация, а также предлагаются варианты по созданию следующего робототехнического проекта. 20 Предисловие
как извлечь из книги наибОльшую пОльзу Прежде чем начать работать с книгой, я рекомендую вам потренироваться в работе с текстовыми языками программирования. Познакомьтесь с основными переменными, условными операторами, циклами и функциями. Для работы вам потребуется компьютер с операционной системой macOS, Linux или Windows, доступ к интернету и Wi-Fi. Что касается навыков ручного труда, я думаю, что вы умеете пользоваться отверткой и без проблем справитесь с кропотливой работой. Также я надеюсь, что вас не пугает пайка. Представленные в книге примеры кода были протестированы на Python 3 с помощью Raspbian Buster и Picroft Buster Keaton. Их установка описывается в тексте соответствующих разделов. Также в тексте рассказывается, как выбрать нужные аппаратные компоненты. Программное/аппаратное обеспечение, используемое в книге Требования к операционной системе Python 3 Raspbian Buster Picroft/Mycroft Picroft Buster Keaton OpenCV Raspbian Buster/Python 3 VPython Raspbian Buster/Python 3 Flask Python 3 Прежде чем приобрести какие-либо аппаратные компоненты, ознакомьтесь с главами, в которых рассказывается, как правильно их выбрать. Если вы используете электронную версию книги, я рекомендую вводить код самостоятельно или брать его из репозитория на GitHub (ссылка предоставлена в следующем разделе). Это позволит избежать ошибок, связанных с неправильным копированием/вставкой фрагментов кода. загрузка файлОв с примерами кОДа Все файлы с кодом из этой книги доступны через ваш аккаунт на веб-сайте www.packt.com. Если вы приобрели книгу в другом месте, зарегистрируйтесь, перейдите по адресу https://www.packtpub.com/support и оставьте запрос на отправку файлов по электронной почте. Загрузить файлы с кодом вы можете следующим образом. 1. Войдите (или зарегистрируйтесь) в аккаунт на веб-сайте www.packt.com. 2. Перейдите во вкладку Support (Поддержка). 3. Нажмите Code Downloads (Загрузить код). 4. В строке поиска введите название книги и следуйте дальнейшим инструкциям на экране. После загрузки файлов нужно обязательно распаковать или извлечь папки с помощью новейшей версии одной из следующих программ: Предисловие 21
WinRAR/7-Zip для Windows; Zipeg/iZip/UnRarX для Mac; 7-Zip/PeaZip для Linux. Комплект исходного кода для этой книги размещен на GitHub по адресу https://github.com/PacktPublishing/Learn-Robotics-Programming-Second-Edition. В случае обновления кода репозиторий также обновится. По адресу https://github.com/PacktPublishing/ доступны другие комплекты исходного кода из нашего богатого каталога книг и видео. Ознакомьтесь и с ними! Code in ACtion Видеоролики Code in Action для этой книги доступны по адресу http://bit.ly/3bu5wHp. изОбражения в цвете По адресу https://static.packt-cdn.com/downloads/9781839218804_ColorImages.pdf вы можете скачать файл, содержащий все изображения (в том числе скриншоты и схемы) из книги, в формате PDF. испОльзуемые ОбОзначения В книге используется ряд текстовых обозначений. Код в тексте: так в тексте выделяются фрагменты кода, названия таблиц баз данных, папок, файлов, расширения файлов, составные имена файлов, пути, фиктивные URL-адреса, фрагменты пользовательского ввода и ссылки на Twitter. Например: «… задает параметр color для светодиода с номером led_number». Блоки кода выглядят следующим образом: cyan_rgb = [int(c * 255) for c in cyan] Элементы или строки кода, на которые нужно обратить особое внимание, выделяются жирным шрифтом: right_distance = self.robot.right_distance_sensor.distance # Отображение self.display_state(left_distance, right_distance) Ввод или вывод командной строки выглядит так: >>> r.leds.show() Жирный шрифт: так выделяются новые термины, важные части текста или текст, который вы должны видеть на экране. Например, текст из меню или диалоговых окон: «Выберите 4 для Other USB Microphone (Другой USB- микрофон) и проверьте звук». Советы и важные примечания Они выделяются следующим образом. 22 Предисловие