
Рассказано о технологии создания автономных роботов на базе одноплатного компьютера Raspberry Pi и о разработке программ для них на языке С++. Показаны принципы написания и даны примеры кода для контроллера привода двигателя, продемонстрированы способы использования датчиков для обнаружения препятствий и построения карт на основе данных лидара. Описаны методы разработки собственных алгоритмов автономного планирования траектории движения, приведен код для автоматической отправки путевых точек контроллеру привода. Рассмотрены библиотеки С++ для написания программ картографии и навигации автономных роботов, даны сведения об использовании контактов аппаратного интерфейса Raspberry Pi GPIO.
Электронный архив на сайте издательства содержит код описанных в книге программ.
Для интересующихся робототехникой
В книге представлены исчерпывающие знания по электронике, аппаратному и программному обеспечению для создания настоящих роботов на базе одноплатного компьютера Raspberry Pi.
Вы узнаете как:
- использовать датчики для обнаружения препятствий;
- обучить робота строить карту и планировать траекторию движения;
- структурировать код на С++, чтобы он получился модульным и взаимозаменяемым с другими проектами по созданию роботов.
- использовать контакты аппаратного интерфейса Raspberry Pi GPIO и существующие библиотеки С++, чтобы создать полностью автономного программируемого робота на самой доступной компьютерной платформе.
Вы научитесь:
• Писать код для контроллера привода двигателя
• Строить карты на основе данных лидара
• Создавать собственные алгоритмы автономного планирования траектории движения
• Писать код для автоматической отправки путевых точек контроллеру привода
• Создавать программы картографии и навигации для автономных роботов
Об авторе……………………………………………………………………………………………….. 16
Благодарности……………………………………………………………………………………….. 17
Предисловие…………………………………………………………………………………………… 18
Вступительное слово………………………………………………………………………………. 21
Введение………………………………………………………………………………………………… 23
Часть I. Введение в компьютеры для робототехники…….. 25
Глава 1. Выбор и настройка компьютера для робота……………………………… 27
Что такое Raspberry Pi?……………………………………………………………………………………………………………… 27
В чем же разница?……………………………………………………………………………………………………………… 28
Значит, Raspberry Pi — единственный вариант контроллера для управления роботом? 28
Разве Raspberry Pi не предназначен для школ, энтузиастов-электронщиков и игрушек? Я хотел узнать о настоящей робототехнике…………………………………………………………………………………………………………… 29
Какие модели Raspberry Pi существуют и почему не все из них подходят
для наших целей?………………………………………………………………………………………………………………………. 29
Raspberry Pi Zero и Raspberry Pi ZeroW…………………………………………………………………………….. 31
Raspberry Pi 2B……………………………………………………………………………………………………………………. 31
Raspberry Pi 3B — лучший выбор!……………………………………………………………………………………. 32
Raspberry Pi 3B+…………………………………………………………………………………………………………………. 32
Новая модель Raspberry Pi 4……………………………………………………………………………………………… 33
Выбор операционной системы…………………………………………………………………………………………………. 33
Raspbian………………………………………………………………………………………………………………………………. 34
Ubuntu…………………………………………………………………………………………………………………………………. 34
Установка и настройка операционной системы…………………………………………………………………….. 35
Установка полной Ubuntu Desktop на ноутбук или настольный ПК…………………………….. 36
Установка Lubuntu на Raspberry Pi………………………………………………………………………………….. 36
Установка и настройка интегрированной среды разработки (IDE)……………………………………… 40
Visual studio Code для ноутбука или настольного ПК……………………………………………………. 40
Code Blocks для Raspberry Pi…………………………………………………………………………………………….. 41
Заключение………………………………………………………………………………………………………………………………… 42
Вопросы……………………………………………………………………………………………………………………………………… 42
Глава 2. Назначение и использование контактов интерфейса GPIO………. 43
Общие сведения о GPIO…………………………………………………………………………………………………………….. 43
Что такое интерфейс GPIO………………………………………………………………………………………………………… 43
Какие же именно функции выполняет GPIO?…………………………………………………………………… 45
Электроника для программистов…………………………………………………………………………….. 45
Типы выходных данных…………………………………………………………………………………………… 50
Типы входных данных……………………………………………………………………………………………… 52
Некоторые распространенные радиодетали…………………………………………………………. 53
Контакты GPIO в качестве выходов………………………………………………………………………… 57
Две системы нумерации контактов GPIO……………………………………………………………….. 58
Контакты GPIO в качестве входов…………………………………………………………………………… 59
Как получить доступ к контактам GPIO Raspberry Pi с помощью программ на C++…………… 61
Библиотека PIGPIO……………………………………………………………………………………………………………………. 62
Установка и настройка библиотеки PIGPIO……………………………………………………………………. 62
Удостоверимся, что Code::Blocks может обращаться к PIGPIO…………………………… 63
Запуск программ PIGPIO………………………………………………………………………………………….. 64
Наш первый проект — hello_blink…………………………………………………………………………… 64
Цифровой вход, управляющий цифровым выходом — hello_button……………………. 67
Функции обратного вызова для обработки событий GPIO…………………………………… 68
Заключение………………………………………………………………………………………………………………………………… 71
Часть II. Начинаем проектировать робота………………………….. 73
Глава 3. Платформа для робота……………………………………………………………… 75
Общие сведения………………………………………………………………………………………………………………………….. 75
Габаритные размеры и режим эксплуатации…………………………………………………………………………. 76
Что лучше — дифференциальный рулевой привод или привод Аккермана?………………………. 78
Дифференциальный рулевой привод……………………………………………………………………………….. 78
Рулевой привод Аккермана……………………………………………………………………………………………….. 79
Готовые платформы для роботов…………………………………………………………………………………………….. 79
Большие готовые платформы……………………………………………………………………………………………. 79
Маленькие готовые роботы………………………………………………………………………………………………. 80
Советы по созданию собственного робота……………………………………………………………………………… 82
Материалы для конструирования……………………………………………………………………………………. 82
Аккумуляторы…………………………………………………………………………………………………………… 83
Ходовая часть……………………………………………………………………………………………………………. 83
Где найти детали для роботов…………………………………………………………………………………. 84
Перепрофилирование роботов-пылесосов или автомобилей с дистанционным управлением 85
Роботы-пылесосы с интерфейсом…………………………………………………………………………………….. 86
Взаимодействие с Roomba………………………………………………………………………………………. 87
“Разморозка” Roomba………………………………………………………………………………………………. 90
Роботы-пылесосы без интерфейса……………………………………………………………………………………. 91
Перепрофилирование автомобилей и грузовиков с дистанционным управлением…………….. 92
Заключение………………………………………………………………………………………………………………………………… 94
Вопросы……………………………………………………………………………………………………………………………………… 94
Глава 4. Типы двигателей для роботов и управление двигателями………… 95
Общие сведения………………………………………………………………………………………………………………………….. 95
Типы двигателей………………………………………………………………………………………………………………………… 95
Сравнение двигателей переменного (AC) и постоянного (DC) токов……………………………. 96
Щеточные двигатели постоянного тока…………………………………………………………………………… 97
Сервоприводы…………………………………………………………………………………………………………………….. 98
Шаговые двигатели……………………………………………………………………………………………………………. 99
Бесщеточные двигатели постоянного тока (BLDC)……………………………………………………… 100
Принципы работы транзистора и контроллеры двигателей……………………………………………….. 100
Простейший способ управления: включено/выключено……………………………………………… 101
Транзисторы…………………………………………………………………………………………………………………….. 102
Широтно-импульсная модуляция (ШИМ)……………………………………………………………………… 105
ШИМ для создания аналоговых напряжений………………………………………………………. 105
ШИМ в качестве управляющего сигнала……………………………………………………………… 106
Драйверы и контроллеры двигателей……………………………………………………………………………. 107
Драйверы двигателей……………………………………………………………………………………………… 108
Управление двигателями с помощью драйвера двигателя на основе
двойного Н-моста L298N……………………………………………………………………………………….. 109
Контроллеры двигателей……………………………………………………………………………………….. 112
Заключение………………………………………………………………………………………………………………………………. 113
Вопросы……………………………………………………………………………………………………………………………………. 114
Бонусное задание…………………………………………………………………………………………………………………….. 114
Глава 5. Связь с датчиками и другими устройствами…………………………… 115
Общие сведения……………………………………………………………………………………………………………………….. 115
Двоичные (логические) сигналы…………………………………………………………………………………………….. 115
Выключатели с защитой от дребезга контактов…………………………………………………………………… 116
Колесные энкодеры…………………………………………………………………………………………………………………. 117
Двоичные сигналы от аналоговых датчиков………………………………………………………………………… 118
Сводная информация о передаче данных с помощью двоичных сигналов……………………….. 119
Передача данных через последовательный интерфейс……………………………………………………….. 119
Последовательная передача данных с помощью UART……………………………………………………… 119
Настройка Raspberry Pi и тестирование последовательной передачи данных
через UART………………………………………………………………………………………………………………………………. 121
Устранение ошибки при открытии последовательного порта…………………………………….. 124
Передача данных через последовательную шину I2C………………………………………………………… 124
Настройка и использование устройства I2C с Raspberry Pi………………………………………… 126
Пример и тестовая программа: hello_i2c_lsm303…………………………………………………………………. 127
Заключение………………………………………………………………………………………………………………………………. 130
Вопросы……………………………………………………………………………………………………………………………………. 131
Глава 6. Дополнительное оборудование……………………………………………….. 132
Общие сведения……………………………………………………………………………………………………………………….. 132
Источники питания………………………………………………………………………………………………………………….. 132
Источники питания напряжением 5 В……………………………………………………………………………. 133
Регулируемые источники питания………………………………………………………………………………….. 133
Релейные блоки………………………………………………………………………………………………………………………… 134
Преобразователи логических уровней………………………………………………………………………………….. 135
Преобразователи интерфейса (FTDI)…………………………………………………………………………………….. 136
Микроконтроллеры Arduino…………………………………………………………………………………………………… 137
Микроконтроллеры Digispark…………………………………………………………………………………………………. 137
Заключение………………………………………………………………………………………………………………………………. 138
Вопросы……………………………………………………………………………………………………………………………………. 138
Глава 7. Установка компьютера, управляющего роботом……………………. 139
Общие сведения……………………………………………………………………………………………………………………….. 139
Последовательность шагов…………………………………………………………………………………………………….. 140
Установка компьютера и подача питания на него……………………………………………………………….. 140
Соединение компьютера с остальными частями робота…………………………………………………….. 141
Заключение………………………………………………………………………………………………………………………………. 143
Вопросы……………………………………………………………………………………………………………………………………. 144
Часть III. Логика функционирования робота…………………… 145
Глава 8. Стратегия управления роботом………………………………………………. 147
Общие сведения……………………………………………………………………………………………………………………….. 147
Управление роботом: верхний и нижний уровни…………………………………………………………………. 147
Основной контур управления…………………………………………………………………………………………………. 149
Наблюдение и сравнение………………………………………………………………………………………………………… 149
Реагирование……………………………………………………………………………………………………………………. 150
Воздействие………………………………………………………………………………………………………………………. 150
Контроллеры с разомкнутым и замкнутым контуром управления…………………………………….. 153
Разработка контроллеров верхнего уровня (главных контроллеров)………………………………… 154
Разработка контроллеров нижнего уровня (технологических контроллеров)………………….. 156
Двухпозиционные контроллеры (регуляторы типа включено-выключено)……………….. 157
Пропорциональные контроллеры………………………………………………………………………………….. 157
Проектирование контроллеров, допускающих некоторую погрешность…………………… 161
Установка минимального значения выходного сигнала……………………………………………… 161
За рамками пропорциональных контроллеров…………………………………………………………….. 162
Заключение………………………………………………………………………………………………………………………………. 163
Вопросы……………………………………………………………………………………………………………………………………. 163
Глава 9. Организация совместной работы компонентов………………………. 164
Общие сведения……………………………………………………………………………………………………………………….. 164
Что такое операционная система для роботов?……………………………………………………………………. 165
ROS или создание собственного ПО для управления роботами?……………………………………….. 165
ROS и область коммерческой робототехники………………………………………………………………………. 166
Установка ROS…………………………………………………………………………………………………………………………. 167
Установка ROS Melodic на ноутбуке или настольном компьютере……………………………. 167
Установка ROS Kinetic на Raspberry Pi 3B…………………………………………………………………….. 168
Быстрое тестирование ROS…………………………………………………………………………………………….. 170
Краткий экскурс в ROS……………………………………………………………………………………………………………. 171
Пакеты, узлы, издатели, подписчики, топики и сообщения…………………………………………. 171
Полезные приемы…………………………………………………………………………………………………………………….. 177
Создание и написание пакетов и узлов ROS…………………………………………………………………………. 178
Файловая система ROS……………………………………………………………………………………………………. 178
Создание пакетов ROS…………………………………………………………………………………………………….. 178
Написание программ ROS (узлов)………………………………………………………………………………….. 180
Загрузка, просмотр и запуск программ, скачанных для этой главы…………………………… 186
Как облегчить жизнь с помощью файлов roslaunch и .launch……………………………………………… 187
Заключение………………………………………………………………………………………………………………………………. 188
Вопросы……………………………………………………………………………………………………………………………………. 189
Глава 10. Карты для определения местоположения робота…………………… 190
Общие сведения……………………………………………………………………………………………………………………….. 190
Угол, курс, расстояние: общепринятые соглашения……………………………………………………………. 191
Получение данных с датчиков……………………………………………………………………………………………….. 193
Сетчатая карта занятости………………………………………………………………………………………………………. 194
Построение сетчатых карт занятости (OGM) с помощью данных, получаемых с датчиков 196
Маркировка занятых ячеек…………………………………………………………………………………………………….. 199
Маркировка свободных ячеек………………………………………………………………………………………………… 202
Заключительные шаги при составлении карты……………………………………………………………………. 202
Публикация карты в виде сообщения ROS……………………………………………………………………………. 203
Преобразования в ROS……………………………………………………………………………………………………………. 204
Для чего нужны преобразования……………………………………………………………………………………. 205
Использование преобразований в ROS………………………………………………………………………….. 206
Публикация преобразований с помощью static transform publisher……………………………. 207
Публикация сообщений от узлов с помощью транслятора преобразований (transform broadcaster) 208
Получение данных о преобразованиях в узлах……………………………………………………………. 209
Просмотр данных о преобразовании из командной строки………………………………………… 211
Упрощение картографирования с помощью Gmapping……………………………………………………….. 211
Общие сведения о Gmapping…………………………………………………………………………………………… 212
Установка Gmapping……………………………………………………………………………………………………….. 212
Запуск Gmapping и задание параметров в файлах запуска…………………………………………. 212
Этапы создания карты…………………………………………………………………………………………………………….. 214
Визуализация создания карты в реальном времени…………………………………………………………….. 214
Сохранение карты и ее последующее использование…………………………………………………………. 216
Сохранение карт………………………………………………………………………………………………………………. 216
Загрузка ранее сохраненной карты……………………………………………………………………………….. 217
Заключение………………………………………………………………………………………………………………………………. 217
Вопросы……………………………………………………………………………………………………………………………………. 217
Глава 11. Отслеживание перемещений и локализация робота……………… 219
Общие сведения……………………………………………………………………………………………………………………….. 219
Поза робота……………………………………………………………………………………………………………………………… 220
Преобразование углов Эйлера в кватернионы……………………………………………………………… 221
Преобразование кватернионов в углы Эйлера……………………………………………………………… 223
Одометрия и точный расчет траектории……………………………………………………………………………….. 223
Колесная одометрия………………………………………………………………………………………………………… 224
Расчет расстояния, пройденного каждым колесом………………………………………………………. 227
Расчет общего расстояния, пройденного роботом……………………………………………………….. 228
Расчет изменения угла поворота тета……………………………………………………………………………. 228
Сложение величины изменения угла поворота с предыдущим значением угла поворота тета 229
Расчет расстояния, пройденного по осям x и y (преобразование координат)……………. 229
Прибавление полученных расстояний к соответствующим значениям предыдущей оценки позы 230
Публикация сообщения одометрии о новой позе для других узлов…………………… 230
Сохранение данных новой позы для использования в следующем цикле………… 230
Точный расчет траектории……………………………………………………………………………………………… 230
Публикация данных одометрии в ROS………………………………………………………………………………….. 232
Издатель сообщений о преобразованиях одометрии…………………………………………………… 234
Дальнейшее отслеживание перемещений робота и его локализация в пространстве………. 236
Инструмент для коррекции позы вручную…………………………………………………………………….. 236
Фидуциальные маркеры………………………………………………………………………………………………………….. 237
Локализация с помощью лазерного сканера………………………………………………………………………… 238
GPS и GNSS……………………………………………………………………………………………………………………………….. 239
Системы локализации на основе радиомаяков…………………………………………………………………….. 239
Заключение………………………………………………………………………………………………………………………………. 240
Вопросы……………………………………………………………………………………………………………………………………. 240
Глава 12. Автономное движение…………………………………………………………… 241
Общие сведения……………………………………………………………………………………………………………………….. 241
Обзор движения роботов в ROS……………………………………………………………………………………………… 241
Контроллер двигателя — simple_diff_drive.cpp……………………………………………………………………. 242
Шаги по созданию контроллера двигателя simple_diff_drive……………………………………… 243
Код контроллера двигателя дифференциального рулевого привода,
представленный в общем виде………………………………………………………………………………………… 244
Код контроллера двигателя дифференциального рулевого привода…………………………. 245
Контроллер привода — simple_drive_controller.cpp……………………………………………………………… 251
Шаги по созданию контроллера привода……………………………………………………………………… 251
Заключение………………………………………………………………………………………………………………………………. 256
Вопросы……………………………………………………………………………………………………………………………………. 256
Глава 13. Автономное планирование маршрута…………………………………… 257
Общие сведения……………………………………………………………………………………………………………………….. 257
Методы планирования маршрута и сопутствующие проблемы…………………………………………. 257
Проблемы………………………………………………………………………………………………………………………….. 258
Методы планирования маршрута………………………………………………………………………………….. 258
Увеличение границ вокруг препятствий………………………………………………………………………… 259
Карты затрат (costmap)…………………………………………………………………………………………………… 260
Пакет costmap_2d…………………………………………………………………………………………………………….. 260
Планирование маршрута с помощью алгоритма A*……………………………………………………. 263
Как работает алгоритм А*……………………………………………………………………………………………… 264
Пошаговый разбор алгоритма A*………………………………………………………………………………….. 266
Разбор процедуры А*………………………………………………………………………………………………………. 268
Написание программы A* как узла ROS……………………………………………………………………………….. 273
Стандартные вещи, вспомогательные функции и main()……………………………………………… 274
Сердце узла A*: функция find_path()……………………………………………………………………………… 284
Заключение………………………………………………………………………………………………………………………………. 289
Вопросы……………………………………………………………………………………………………………………………………. 289
Часть IV. Интерпретация данных,
поступающих с датчиков……………………………………………………….. 291
Глава 14. Колесные энкодеры для одометрии………………………………………. 293
Общие сведения……………………………………………………………………………………………………………………….. 293
Колесные энкодеры…………………………………………………………………………………………………………………. 293
Оптические энкодеры………………………………………………………………………………………………………………. 294
Энкодеры на датчиках Холла………………………………………………………………………………………………… 294
Подключение энкодеров…………………………………………………………………………………………………………. 295
Издатель сообщений об импульсах: tick_publisher.cpp………………………………………………………… 297
Код издателя сообщений об импульсах энкодера……………………………………………………………….. 298
Заключение………………………………………………………………………………………………………………………………. 302
Вопросы……………………………………………………………………………………………………………………………………. 302
Глава 15. Ультразвуковые датчики расстояния……………………………………. 303
Общие сведения……………………………………………………………………………………………………………………….. 303
Основная информация об ультразвуковом дальномере HC-SR04………………………………………. 304
Считывание показаний HC-SR04…………………………………………………………………………………… 304
Подключение HC-SR04…………………………………………………………………………………………………………… 304
Издатель данных ультразвукового измерения расстояния: ultrasonic_publisher.cpp………… 305
Издатель сообщений об ультразвуковом измерении расстояния:
пошаговый разбор……………………………………………………………………………………………………………. 305
Обзор кода издателя сообщений об ультразвуковом измерении расстояния…………….. 306
Использование данных ультразвукового измерения расстояния при обнаружении объектов 309
Заключение………………………………………………………………………………………………………………………………. 310
Вопросы……………………………………………………………………………………………………………………………………. 311
Глава 16. Инерциальные измерительные блоки (IMU) — акселерометры, гироскопы и магнитометры…………………………………………………………………………………………………………….. 312
Общие сведения……………………………………………………………………………………………………………………….. 312
Акселерометры………………………………………………………………………………………………………………………… 313
Недостатки акселерометра…………………………………………………………………………………………….. 314
Публикация данных IMU в ROS……………………………………………………………………………………… 314
Тип данных sensor_msgs::Imu в ROS………………………………………………………………………………. 315
Код издателя сообщений IMU………………………………………………………………………………………… 316
Гироскопы………………………………………………………………………………………………………………………………… 320
Недостатки гироскопа…………………………………………………………………………………………………….. 321
Добавление данных гироскопа в узел IMU…………………………………………………………………… 321
Магнитометры…………………………………………………………………………………………………………………………. 322
Недостатки магнитометра………………………………………………………………………………………………. 322
Добавление данных магнитометра………………………………………………………………………………… 323
Установка IMU………………………………………………………………………………………………………………………… 325
Заключение………………………………………………………………………………………………………………………………. 325
Вопросы……………………………………………………………………………………………………………………………………. 326
Глава 17. GPS и системы на основе внешних радиомаяков………………….. 327
Общие сведения……………………………………………………………………………………………………………………….. 327
Как работают системы на основе радиомаяков…………………………………………………………………… 327
Основные сведения о GPS и GNSS………………………………………………………………………………………….. 329
Точность GPS/GNSS…………………………………………………………………………………………………………. 329
Определение местоположения с помощью GPS/GNSS-RTK с точностью до 2 см……… 330
Ограничения GPS/GNSS…………………………………………………………………………………………………… 331
Данные GPS/GNSS……………………………………………………………………………………………………………. 332
Строки с данными NMEA………………………………………………………………………………………………… 332
Некоторые основные представления данных о широте и долготе……………………………… 334
Публикация данных GPS/GNSS в ROS…………………………………………………………………………………… 335
Пакет ROS: nmea_navsat_driver……………………………………………………………………………………… 335
Установка пакета nmea_navsat_driver…………………………………………………………………………… 336
Изучение документации к пакетам ROS………………………………………………………………………… 337
Запуск узла nmea_serial_driver с параметрами……………………………………………………………. 338
Заключение………………………………………………………………………………………………………………………………. 339
Вопросы……………………………………………………………………………………………………………………………………. 339
Глава 18. Устройства LIDAR и данные, которые они предоставляют…… 340
Общие сведения……………………………………………………………………………………………………………………….. 340
Основные сведения об устройствах LIDAR………………………………………………………………………….. 340
Ограничения LIDAR………………………………………………………………………………………………………………… 341
Типы LIDAR……………………………………………………………………………………………………………………………… 342
Однонаправленный (одноточечный) LIDAR…………………………………………………………………. 342
2D-LIDAR………………………………………………………………………………………………………………………….. 343
3D-LIDAR………………………………………………………………………………………………………………………….. 344
LIDAR, установленный на роботе-пылесосе………………………………………………………………… 344
Критерии выбора LIDAR………………………………………………………………………………………………………… 346
Данные LIDAR: сообщение sensor_msgs::LaserScan……………………………………………………………. 347
Факторы, которые необходимо учитывать при монтаже устройств LIDAR……………………… 349
Установка, запуск и испытание распространенной модели LIDAR…………………………………… 350
Действия по настройке RPLIDAR…………………………………………………………………………………… 351
Визуализация сообщения LaserScan……………………………………………………………………………………… 353
Заключение………………………………………………………………………………………………………………………………. 356
Вопросы……………………………………………………………………………………………………………………………………. 356
Глава 19. Реальное зрение с помощью видеокамер………………………………. 357
Общие сведения……………………………………………………………………………………………………………………….. 357
Что такое изображение?………………………………………………………………………………………………………….. 358
Атрибуты изображения…………………………………………………………………………………………………… 359
Координаты пиксела……………………………………………………………………………………………………….. 359
Проверка наличия или установка необходимого программного обеспечения………………….. 360
ROS Kinetic………………………………………………………………………………………………………………………… 360
ROS Melodic………………………………………………………………………………………………………………………. 361
Тестирование OpenCV в ROS………………………………………………………………………………………………….. 362
Программное обеспечение для обработки изображений (OpenCV) и ROS………………………… 363
Шаг 1. Публикация изображений в ROS………………………………………………………………………………… 364
Установка usb_cam_node………………………………………………………………………………………………… 364
Запуск usb_cam_node………………………………………………………………………………………………………. 364
Тестирование выходного сигнала камеры…………………………………………………………………….. 366
Шаг 2. Подпишитесь на сообщение об изображении в другом узле…………………………………… 367
Создайте свой пакет ROS для видеонаблюдения………………………………………………………….. 367
Написание кода для подписчика на сообщения с изображением……………………………….. 368
Шаг 3. С помощью cv-bridge преобразуйте изображение RGB, которое использует ROS, в изображение BGR, с которым может работать OpenCV…………………………………………………………………………………………………………………….. 369
Шаг 4. Выполните необходимые операции с изображением………………………………………………. 369
Шаг 5. Публикуйте любые данные, не относящиеся к изображению,
в виде отдельного сообщения ROS…………………………………………………………………………………………. 370
Шаг 6. Преобразуйте измененное изображение обратно в формат RGB…………………………… 370
Шаг 7. Опубликуйте итоговое изображение в отдельном топике……………………………………….. 371
Еще немного про обработку изображений……………………………………………………………………………. 371
Ядра, диафрагмы и блоки……………………………………………………………………………………………….. 371
Важность работы с копиями вместо оригинальных изображений……………………………… 372
Несколько слов об освещении………………………………………………………………………………………… 373
Ревизия шага 4 с включением большего количества операций OpenCV……………………………. 373
Преобразование цветового формата: cvtColor()…………………………………………………………… 374
Размытие изображений: blur(), medianBlur(), GaussianBlur()……………………………………….. 374
Выделение краев: Canny()……………………………………………………………………………………………….. 375
От определения краев на изображении к числовым значениям: HoughLinesP()………… 376
Маскирование изображения: bitwise_and()…………………………………………………………………… 380
Фильтрация по цвету: cvtColor() и inRange()………………………………………………………………………… 383
Полезные инструменты ROS…………………………………………………………………………………………………… 387
Расширенные функции OpenCV и не только…………………………………………………………………………. 387
Распознавание изображений с помощью облачных технологий………………………………………… 388
Заключение………………………………………………………………………………………………………………………………. 389
Вопросы……………………………………………………………………………………………………………………………………. 389
Глава 20. Совместное использование различных датчиков………………….. 390
Общие сведения……………………………………………………………………………………………………………………….. 390
Доступно о совместном использовании датчиков………………………………………………………………… 391
Датчик абсолютной ориентации Bosch BN0055………………………………………………………………….. 391
Предоставляемые данные……………………………………………………………………………………………….. 392
Улучшенная одометрия…………………………………………………………………………………………………… 392
Интеграция BN0055: оборудование и издатель ROS……………………………………………………. 393
Интеграция BN0055: узел одометрии…………………………………………………………………………….. 394
Шаг 1. Подписаться на сообщение IMU………………………………………………………………………… 395
Шаг 2. Проверить, что поле ориентации не помечено как “do not use” (не использовать) 395
Шаг 3. Преобразовать кватернионы в углы Эйлера…………………………………………………….. 396
Шаг 4. Сохранить информацию о смещении, если это первое сообщение IMU………… 396
Шаг 5.1. Если это НЕ первое сообщение IMU, сохранить курс IMU………………………….. 397
Шаг 5.2. Передать новое значение курса IMU в функцию расчета параметров одометрии 397
Комплексный подход к совместному использованию датчиков…………………………………………. 398
Фильтр Калмана………………………………………………………………………………………………………………. 398
Ковариационная матрица……………………………………………………………………………………………….. 401
Ковариационные матрицы в сообщениях ROS……………………………………………………………… 402
Узел robot_pose_ekf node………………………………………………………………………………………………………… 403
Установка robot_pose_ekf……………………………………………………………………………………………….. 404
Запуск robot_pose_ekf……………………………………………………………………………………………………… 404
Последнее замечание о преобразованиях и roslaunch………………………………………………….. 405
Заключение………………………………………………………………………………………………………………………………. 406
Вопросы……………………………………………………………………………………………………………………………………. 406
Часть V. Разработка автономного робота…………………………. 407
Глава 21. Сборка и программирование автономного робота………………… 409
Общие сведения……………………………………………………………………………………………………………………….. 409
Раздел 1. Создание физической платформы для робота……………………………………………………… 410
Платформа для робота: общий обзор и список деталей……………………………………………………… 411
Модули, объединяющие в себе колесо и двигатель……………………………………………………… 413
Драйвер(ы) двигателя………………………………………………………………………………………………………. 414
Ролик (третье колесо робота)………………………………………………………………………………………….. 414
Аккумуляторы и зарядное устройство…………………………………………………………………………… 414
Шасси/основание…………………………………………………………………………………………………………….. 415
Компьютеры……………………………………………………………………………………………………………………… 416
LIDAR или другой датчик расстояния…………………………………………………………………………… 416
Колесные энкодеры…………………………………………………………………………………………………………. 417
IMU (инерциальный измерительный блок)……………………………………………………………………. 417
Преобразователь напряжения для компьютера……………………………………………………………. 417
Коммутационная плата для колодки GPIO……………………………………………………………………. 418
Видеокамера…………………………………………………………………………………………………………………….. 418
Вольтметр для контроля напряжения аккумулятора……………………………………………………. 419
Различные материалы……………………………………………………………………………………………………… 420
Сборка платформы для робота………………………………………………………………………………………………. 420
Подготовьте компьютер…………………………………………………………………………………………………… 421
Подготовьте колесные модули……………………………………………………………………………………….. 421
Продумайте схему расположения компонентов…………………………………………………………… 422
Подготовьте шасси…………………………………………………………………………………………………………… 422
Установите колесные модули и ролик…………………………………………………………………………… 422
Установите драйвер двигателя, клеммные колодки и источник питания для компьютера……….. 424
Подготовьте коммутационную плату для колодки GPIO…………………………………………….. 424
Установите компьютер, коммутационную плату для колодки GPIO и IMU………………. 424
Соедините все блоки проводами и установите аккумулятор………………………………………. 425
Установите LIDAR и видеокамеру…………………………………………………………………………………. 425
Еще несколько советов……………………………………………………………………………………………………………. 427
Раздел 2. Программирование робота…………………………………………………………………………………….. 428
Программирование: общие замечания…………………………………………………………………………… 428
Программирование робота: подробная инструкция…………………………………………………….. 429
- Создать папку проекта……………………………………………………………………………………….. 430
- Получить данные датчиков для публикации……………………………………………………. 430
- Настроить управление платформой с помощью пульта ДУ…………………………… 432
- Отслеживать перемещение робота и публиковать данные о местоположении 435
- Обеспечить перемещение робота по путевым точкам
(без обхода препятствий)……………………………………………………………………………………….. 436 - Составьте карту окружения робота………………………………………………………………….. 438
- Загрузить сохраненную карту с помощью файлов запуска……………………………. 439
- Добиться автономной навигации робота в пределах карты…………………………… 440
Запуск автономного робота!………………………………………………………………………………………………….. 441
Некоторые советы по устранению неполадок………………………………………………………………. 441
Что дальше?……………………………………………………………………………………………………………………………… 442
Обход динамических препятствий…………………………………………………………………………………. 442
ПИД-регуляторы………………………………………………………………………………………………………………. 443
Главный контроллер, который управляет различными процедурами или задачами.. 443
Реализация преобразования map в odom (полная локализация)………………………………… 443
Следите за новостями в Интернете…………………………………………………………………………………. 443
Заключение………………………………………………………………………………………………………………………………. 444
Приложение. Описание электронного архива………………………………………. 445
Предметный указатель…………………………………………………………………………. 446

Ллойд Бромбах — инженер, программист и энтузиаст электроники и робототехники. Участвовал в соревнованиях по робототехнике, таких как финансируемый НАСА конкурс Lunar Regolith Excavation Challenge 2007 и 27-й конкурс Intelligent Ground Vehicle Challenge.
-
Практическая робототехника. C++ и Raspberry Pi
1250 ₽
1062 ₽