Опубликовано

Представляем книгу “Практическая робототехника. C++ и Raspberry Pi”

Практическая робототехника. C++ и Raspberry Pi

Рассказано о технологии создания автономных роботов на базе одноплатного компьютера Raspberry Pi и о разработке программ для них на языке С++. Показаны принципы написания и даны примеры кода для контроллера привода двигателя, продемонстрированы способы использования датчиков для обнаружения препятствий и построения карт на основе данных лидара. Описаны методы разработки собственных алгоритмов автономного планирования траектории движения, приведен код для автоматической отправки путевых точек контроллеру привода. Рассмотрены библиотеки С++ для написания программ картографии и навигации автономных роботов, даны сведения об использовании контактов аппаратного интерфейса Raspberry Pi GPIO.
Электронный архив на сайте издательства содержит код описанных в книге программ.

Для интересующихся робототехникой

 

В книге представлены исчерпывающие знания по электронике, аппаратному и программному обеспечению для создания настоящих роботов на базе одноплатного компьютера Raspberry Pi.

Вы узнаете как:

  •  использовать датчики для обнаружения препятствий;
  • обучить робота строить карту и планировать траекторию движения;
  • структурировать код на С++, чтобы он получился модульным и взаимозаменяемым с другими проектами по созданию роботов.
  • использовать контакты аппаратного интерфейса Raspberry Pi GPIO и существующие библиотеки С++, чтобы создать полностью автономного программируемого робота на самой доступной компьютерной платформе.

Вы научитесь:

• Писать код для контроллера привода двигателя
• Строить карты на основе данных лидара
• Создавать собственные алгоритмы автономного планирования траектории движения
• Писать код для автоматической отправки путевых точек контроллеру привода
• Создавать программы картографии и навигации для автономных роботов

Книгу “Практическая робототехника. C++ и Raspberry Pi” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторе……………………………………………………………………………………………….. 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

  1. Создать папку проекта……………………………………………………………………………………….. 430
  2. Получить данные датчиков для публикации……………………………………………………. 430
  3. Настроить управление платформой с помощью пульта ДУ…………………………… 432
  4. Отслеживать перемещение робота и публиковать данные о местоположении 435
  5. Обеспечить перемещение робота по путевым точкам
    (без обхода препятствий)……………………………………………………………………………………….. 436
  6. Составьте карту окружения робота………………………………………………………………….. 438
  7. Загрузить сохраненную карту с помощью файлов запуска……………………………. 439
  8. Добиться автономной навигации робота в пределах карты…………………………… 440

Запуск автономного робота!………………………………………………………………………………………………….. 441

Некоторые советы по устранению неполадок………………………………………………………………. 441

Что дальше?……………………………………………………………………………………………………………………………… 442

Обход динамических препятствий…………………………………………………………………………………. 442

ПИД-регуляторы………………………………………………………………………………………………………………. 443

Главный контроллер, который управляет различными процедурами или задачами.. 443

Реализация преобразования map в odom (полная локализация)………………………………… 443

Следите за новостями в Интернете…………………………………………………………………………………. 443

Заключение………………………………………………………………………………………………………………………………. 444

Приложение. Описание электронного архива………………………………………. 445

Предметный указатель…………………………………………………………………………. 446

Lloyd Brombach

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

Опубликовано

Представляем 3-е издание книги “Мобильные роботы на базе Arduino”

Мобильные роботы на базе Arduino, 3-е изд.

Представляем третье издание книги Михаила Момота “Мобильные роботы на базе Arduino”.

Руководство для начинающих конструкторов написано в форме практических проектов по построению мобильных роботов. Для их реализации выбрана популярная платформа Arduino и четырехколесная конструкция. Рассказано, как управлять моторами, осуществлять сборку механики и электроники, программировать основные функции и управлять роботом. Роботы смогут обходить препятствия, выбираться из запутанных лабиринтов,

В 3-м издании добавлены проекты по передаче изображения с камеры, удержанию направление движения по гироприборам,  модель  двухколесного балансирующего робота на моторах с энкодерами. Все сложные алгоритмы вынесены в отдельную библиотеку.

Электронный архив на сайте издательства содержит детали робота для печати на 3d-принтере, векторные рисунки для резки лазером, листинги, дополнительные библиотеки и программы.

Для читателей, интересующихся электроникой и робототехникой

Эта книга написана для начинающих Конструкторов, людей, которым нравится конструировать мобильных роботов на популярной платформе Arduino .
В новом издании сделан упор на практическую реализацию описанных конструкций, а также на расширение функциональных возможностей роботов с помощью современных датчиков (гироприбора, видеокамеры, энкодеров и др.) и продвинутого программирования. Но в книге нет пространных листингов: большинство сложных участков программного кода перенесено в библиотеку, которая предлагается с книгой. Потому процесс конструирования остается по-прежнему доступным и увлекательным.

— Михаил Момот, автор книги


Книгу “Мобильные роботы на базе Arduino, 3-е изд.” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Содержание

Предисловие………………………………………………………………………………………….. 9

Глава 1. Основные составные части робота………………………………………. 13
Информационно-измерительная система………………………………………………………. 13
Датчик касания…………………………………………………………………………………….. 14
Датчик температуры……………………………………………………………………………… 14
Датчик освещенности……………………………………………………………………………. 15
Датчик препятствия………………………………………………………………………………. 15
Ультразвуковой датчик расстояния………………………………………………………… 16
Оптический рефлекторный датчик расстояния………………………………………….. 16
Детектор шума…………………………………………………………………………………….. 17
Энкодер……………………………………………………………………………………………… 17
Датчик движения………………………………………………………………………………….. 18
Датчик газа………………………………………………………………………………………….. 18
Датчик влажности………………………………………………………………………………… 18
Видеокамера……………………………………………………………………………………….. 19
Система принятия решений………………………………………………………………………….. 20
Контроллер Arduino……………………………………………………………………………… 20
Система связи…………………………………………………………………………………………… 22
Инфракрасный приемник……………………………………………………………………….. 22
Канал Bluetooth……………………………………………………………………………………. 23
Канал Wi-Fi………………………………………………………………………………………….. 23
Устройства отображения информации (дисплеи)………………………………………. 24
Исполнительная система…………………………………………………………………………….. 24
Электрический двигатель постоянного тока……………………………………………… 25
Сервомотор………………………………………………………………………………………… 26
Шаговый двигатель………………………………………………………………………………. 26
Система энергоснабжения…………………………………………………………………………… 27
Механика робота……………………………………………………………………………………….. 27
Элементы электрической схемы…………………………………………………………………… 27
Резистор…………………………………………………………………………………………….. 27
Светодиод………………………………………………………………………………………….. 28
Выключатель………………………………………………………………………………………. 28
Сервисные платы……………………………………………………………………………………….. 28
Arduino Sensor Shield v5.0……………………………………………………………………… 28
Макетная плата……………………………………………………………………………………. 29
Выводы……………………………………………………………………………………………………. 30

Глава 2. Провода и их соединения………………………………………………………. 31
Виды проводов…………………………………………………………………………………………. 31
Одножильные………………………………………………………………………………………. 31
Многожильные…………………………………………………………………………………….. 31
Тип изоляции……………………………………………………………………………………….. 32
Способы соединений проводов……………………………………………………………………. 32
Скрутка………………………………………………………………………………………………. 32
Разъемные соединения…………………………………………………………………………. 33
Пайка и ее основы………………………………………………………………………………… 35
Оборудование и материалы……………………………………………………………. 35
Этапы пайки………………………………………………………………………………….. 36
Выбор паяльника………………………………………………………………………….. 37
Уход за паяльником………………………………………………………………………. 38
Припои………………………………………………………………………………………… 38
Флюсы…………………………………………………………………………………………. 39
Выводы……………………………………………………………………………………………………. 39

Глава 3. Электропитание……………………………………………………………………… 40
Закон Ома………………………………………………………………………………………………… 40
Электрическая мощность……………………………………………………………………………. 40
Характеристики элементов питания………………………………………………………………. 40
Номинальное напряжение……………………………………………………………………… 40
Номинальный ток…………………………………………………………………………………. 41
Внутреннее сопротивление источника питания…………………………………………. 41
Емкость батареи или аккумулятора………………………………………………………… 41
Форм-фактор………………………………………………………………………………………. 41
Типы элементов электрического питания……………………………………………………….. 41
Солевые батареи…………………………………………………………………………………. 42
Алкалиновые батареи…………………………………………………………………………… 42
Никель-металлогидридные аккумуляторы………………………………………………… 42
Литий-ионные и литий-полимерные аккумуляторы…………………………………….. 42
Стабилизация электропитания……………………………………………………………………… 43
Стабилизация напряжения……………………………………………………………………… 44
Стабилизация электрического тока…………………………………………………………. 46
Измерение электрического тока, напряжения и сопротивления…………………………. 46
Защита от короткого замыкания по питанию………………………………………………….. 48
Защита от неверной установки элементов питания (переполюсовки)…………………. 50
Зарядка аккумуляторов на примере Li-ion и Li-pol…………………………………………… 51
Выводы……………………………………………………………………………………………………. 52

Глава 4. Основы программирования Arduino…………………………………….. 53
Компьютерная программа…………………………………………………………………………… 53
Алгоритм………………………………………………………………………………………………….. 54
Среда разработки Arduino IDE…………………………………………………………………….. 55
Установка Arduino IDE…………………………………………………………………………… 55
Начало работы с Arduino IDE…………………………………………………………………. 56
Подключение контроллера Arduino к ПК………………………………………………….. 56
Мигаем светодиодом………………………………………………………………………………….. 60
Мониторинг работы программы…………………………………………………………………… 61
Переменные………………………………………………………………………………………………. 62
Условные операторы………………………………………………………………………………….. 64
Оператор if … else……………………………………………………………………………….. 64
Оператор switch … case………………………………………………………………………… 67
Операторы циклов while и for……………………………………………………………………….. 68
Функции……………………………………………………………………………………………………. 70
Элементы объектно-ориентированного программирования……………………………… 71
Разделение программы (внутренние библиотеки)……………………………………………. 72
Выводы……………………………………………………………………………………………………. 73

Глава 5. Ходовая часть………………………………………………………………………… 74
Типы ходовых частей………………………………………………………………………………….. 74
Гусеницы…………………………………………………………………………………………….. 74
Колеса с дифференциалом…………………………………………………………………… 75
Колеса на моторах………………………………………………………………………………. 75
Летающие роботы………………………………………………………………………………… 76
Выбор двигателей……………………………………………………………………………………… 76
Драйверы двигателей…………………………………………………………………………………. 78
Сборка макета…………………………………………………………………………………………… 80
Управляем двигателем без Arduino…………………………………………………………. 80
Широтно-импульсная модуляция……………………………………………………………. 82
Подключаем контроллер Arduino……………………………………………………………. 83
Подключаем библиотеку mobrob3.zip и пишем тестовую программу…………….. 86
Добавляем регулирование на основе ШИМ……………………………………………… 87
Тестовая программа управления двигателями
с регуляцией на основе ШИМ…………………………………………………………………. 87
Выводы……………………………………………………………………………………………………. 89

Глава 6. Сборка базовой модели…………………………………………………………. 90
Минимальный комплект………………………………………………………………………………. 90
Двигатели…………………………………………………………………………………………………. 92
Система электропитания…………………………………………………………………………….. 93
Подбираем компоненты………………………………………………………………………………. 96
Схемы………………………………………………………………………………………………………. 98
Проверка правильности подключения платы драйвера и двигателей……………….. 102
Пример использования платы Arduino Sensor Shield……………………………………… 103
Установка устройств обратной связи………………………………………………………….. 104
Укладка проводов……………………………………………………………………………………. 107
Выводы…………………………………………………………………………………………………… 107

Глава 7. Схема управления движением…………………………………………….. 108
Переменные и функции управления моторами………………………………………………. 108
Подключение управления моторами……………………………………………………… 108
Управление мощностью………………………………………………………………………. 108
Движение в нужном направлении………………………………………………………….. 109
Первая поездка………………………………………………………………………………………… 109
Алгоритм…………………………………………………………………………………………… 109
Программа………………………………………………………………………………………… 110
Сигнал светодиодом…………………………………………………………………………………. 111
Выводы…………………………………………………………………………………………………… 112

Глава 8. Дистанционное управление роботом………………………………….. 113
Способы дистанционного управления…………………………………………………………. 113
Управление роботом по каналу инфракрасной связи…………………………………….. 114
Схема подключения……………………………………………………………………………. 114
Рекомендации по установке…………………………………………………………………. 116
Установка библиотеки IRremote…………………………………………………………….. 117
Получение кодов кнопок для используемого пульта……………………………….. 117
Программа………………………………………………………………………………………… 120
Управление роботом по каналу Bluetooth…………………………………………………….. 123
Подбор элементной базы…………………………………………………………………….. 124
Подключение к Arduino………………………………………………………………………… 125
Смена имени контроллера Bluetooth и робота………………………………………… 126
Настройка смартфона…………………………………………………………………………. 127
Устранение радиопомех………………………………………………………………………. 129
Программа………………………………………………………………………………………… 129
Управляем роботом по Wi-Fi (ESP-01)…………………………………………………………. 133
Выводы…………………………………………………………………………………………………… 138

Глава 9. Робот, держащий направление по электронному гироскопу-акселерометру……………………………………… 139
Гироскоп…………………………………………………………………………………………………. 139
Акселерометр………………………………………………………………………………………….. 141
Электронный гироскоп………………………………………………………………………………. 142
Подключение гироскопа-акселерометра MPU-6050……………………………………….. 143
Получение данных с MPU-6050…………………………………………………………………… 145
Шкала значений MPU-6050…………………………………………………………………………. 148
Модернизация робота………………………………………………………………………………. 148
Монтаж устройства…………………………………………………………………………….. 148
Программирование…………………………………………………………………………….. 148
Основные функции для получения углов…………………………………………. 148
Стабилизация поворотов: ПИД-регулятор……………………………………….. 150
Добавляем функцию движения………………………………………………………. 153
Выводы…………………………………………………………………………………………………… 157

Глава 10. Движение по черной линии………………………………………………… 158
Обнаружение черной линии……………………………………………………………………….. 159
Фотодиод………………………………………………………………………………………….. 159
Фоторезистор……………………………………………………………………………………. 160
Фототранзистор…………………………………………………………………………………. 161
Инфракрасный датчик отражения TCRT 5000…………………………………………… 161
Подготовка робота: установка датчиков……………………………………………………… 163
Упрощенная программа движения………………………………………………………………. 166
Используем аналоговые данные «на всю катушку»………………………………………… 169
Выводы…………………………………………………………………………………………………… 173

Глава 11. Измерение расстояния и поворотная голова……………………. 174
Измеряем расстояние……………………………………………………………………………….. 174
Инфракрасный датчик расстояния GP2Y0A021YK0F………………………………………. 175
Лазерный датчик расстояния VL53L1X…………………………………………………………. 176
Ультразвуковые дальномеры HC-SR04 и US-026/25……………………………………….. 177
Поиск препятствия……………………………………………………………………………………. 179
Поворотная голова…………………………………………………………………………………… 184
Схемы подключения……………………………………………………………………………. 185
Управление сервомашинкой…………………………………………………………………. 187
Монтаж головы………………………………………………………………………………….. 189
Тестовая программа «Ведение цели»…………………………………………………….. 190
Если что-то пошло не так………………………………………………………………………….. 191
Выводы…………………………………………………………………………………………………… 192

Глава 12. Ходовые испытания: обход препятствий…………………………. 193
Программа проверки и настройки основных функций робота…………………………. 193
Выводы…………………………………………………………………………………………………… 200

Глава 13. Робот, находящий выход из лабиринта…………………………….. 201
Способ обхода лабиринта…………………………………………………………………………. 202
Обход лабиринта без модернизации робота………………………………………………… 203
Программа………………………………………………………………………………………… 207
Выводы…………………………………………………………………………………………………… 213
Глава 14. Робот с видеокамерой………………………………………………………… 214
Аналоговое видео с робота………………………………………………………………………. 214
Цифровое видео для робота: ESP32-CAM…………………………………………………… 216
Робот с камерой ESP32-CAM…………………………………………………………………….. 218
Добавление контроллеров ESP в среду ArduinoIDE………………………………… 219
Прошивка ESP32-CAM…………………………………………………………………………. 221
Настройка программного обеспечения робота……………………………………………… 222
Сборка электроники…………………………………………………………………………………. 224
Сборка механики……………………………………………………………………………………… 224
Выводы…………………………………………………………………………………………………… 226

Глава 15. Робот и пройденное расстояние………………………………………… 227
Моторы с инкрементальным энкодером………………………………………………………. 227
Как работает инкрементальный энкодер?………………………………………………. 228
Получение информации о вращении с инкрементальных энкодеров…………… 229
Следим за энкодерами в приложении……………………………………………………. 236
Выводы…………………………………………………………………………………………………… 243

Глава 16. Балансирующий робот……………………………………………………….. 244
Теория……………………………………………………………………………………………………. 244
Как найти угол наклона робота?…………………………………………………………… 246
Регулятор балансировки робота………………………………………………………….. 247
Программирование…………………………………………………………………………………… 248
Порядок подбора коэффициентов пропорциональности регулятора…………. 254
Выводы…………………………………………………………………………………………………… 260

Приложение. Описание электронного архива…………………………………… 261
Предметный указатель………………………………………………………………………. 265

Момот Михаил Викторович, сотрудник Томского политехнического университета, основатель и директор фирмы «Юрга-Технологии-Инновации», занимающейся разработкой роботов. Увлекается робототехникой, поклонник и пропагандист проекта Arduino с 2014 года. Основатель неформального клуба робототехников «Лига роботов ЮТИ ТПУ», объединяющего школьников студентов, преподавателей и энтузиастов. Автор популярных книг “Мобильные роботы на базе Arduino“, “Мобильные роботы на базе ESP32 в среде Arduino IDE“.