УДК 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)
Все права защищены. Любая часть этой книги не может быть воспроизведена
в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.
ISBN (анг.) 978-1-83921-880-4
ISBN (рус.) 978-5-97060-989-7
Copyright ©Packt Publishing 2021
© Оформление, издание, перевод, ДМК Пресс, 2022
Стр.5
Оглавление
Участники ........................................................................................... 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
Роботы для участия в соревнованиях, учебные и любительские роботы .....36
Выводы ..............................................................................................................39
Задание ..............................................................................................................40
Дополнительные материалы ...........................................................................40
Роботы в промышленности .............................................................................34
Роботы-манипуляторы.................................................................................34
Роботы на складах ........................................................................................36
Глава 2. Структурные элементы робота – код и электроника ... 42
Технические условия ........................................................................................42
Внутреннее устройство робота ........................................................................42
Типы компонентов робота ...............................................................................46
Типы двигателей ..........................................................................................46
Другие типы приводов .................................................................................48
Стр.6
6 Оглавление
Индикаторы состояния – дисплеи, световые и звуковые индикаторы ....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
Стр.7
Оглавление 7
Задание ..............................................................................................................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
Стр.8
8 Оглавление
Установка диска энкодера ..........................................................................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
Стр.9
Оглавление 9
Подключение дальномеров .......................................................................170
Установка библиотек Python для работы с датчиками ............................172
Считывание данных ультразвуковых датчиков расстояния ...................172
Устранение неполадок ...............................................................................175
Обход стен – разработка сценария обхода препятствий .............................176
Добавление датчиков в класс Robot ..........................................................176
Разработка сценария обхода препятствий ...............................................177
Первая попытка разработки стратегии обхода препятствий ..................178
Разработка более сложной стратегии обхода препятствий .....................182
Выводы ............................................................................................................184
Задание ............................................................................................................184
Дополнительные материалы .........................................................................185
Глава 9. Код на Python для работы со светодиодами ..............186
Технические требования ................................................................................186
Что такое линейка RGB-светодиодов? ..........................................................187
Сравнение технологий светодиодной индикации .......................................187
RGB-значения .............................................................................................189
Разработка кода для управления дисплеем робота ..............................................191
Создание интерфейса для управления светодиодами ............................191
Добавляем светодиоды в объект Robot .....................................................193
Тест одного светодиода ..............................................................................194
Тест всех светодиодов ................................................................................196
Подключение светодиодной линейки к Raspberry Pi ...................................190
Установка светодиодной линейки на робота ...........................................190
Реализация радужного свечения на светодиодной линейке .......................197
Цветовые модели ........................................................................................197
Радужное свечение светодиодов ...............................................................199
Использование светодиодов для получения отладочных данных
в сценариях обхода препятствий ..................................................................201
Реализация обычного свечения ................................................................202
Реализация радужного свечения ...............................................................204
Выводы ............................................................................................................205
Задание ............................................................................................................205
Дополнительные материалы .........................................................................206
Глава 10. Код на Python для управления сервоприводами .... 207
Технические требования ................................................................................207
Что такое сервоприводы? ...............................................................................208
Сервопривод: взгляд изнутри ...................................................................209
Отправка управляющих сигналов сервоприводу .....................................210
Позиционирование сервоприводов с помощью Raspberry Pi .....................212
Создание тестового кода ............................................................................213
Устранение неполадок ...............................................................................216
Управление ДПТ и сервоприводами .........................................................217
Калибровка сервоприводов .......................................................................218
Создание механизма поворота и наклона ....................................................219
Стр.10
10 Оглавление
Сборка механизма ......................................................................................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
Стр.11
Оглавление 11
Выводы ............................................................................................................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
Стр.12
12 Оглавление
Настройка программного обеспечения камеры 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
Стр.13
Оглавление 13
Алгоритмы отслеживания линий с помощью камеры ............................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
Стр.14
14 Оглавление
Устранение неполадок ...............................................................................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
Стр.15
Оглавление 15
Шаблон (веб-страница) ..............................................................................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
Стр.16
16 Оглавление
Создание блок схемы......................................................................................510
Выбор компонентов .......................................................................................511
Планирование кода ........................................................................................512
Рассказываем миру о проекте .......................................................................515
Выводы ............................................................................................................516
Предметный указатель .................................................................. 517
Стр.17