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

Представляем Арабские сказки Шахерезады

Арабские сказки Шахерезады

Сказки  «Тысячи и одной ночи»  — одни из самых известных памятников мировой литературы. Они создавались в Золотой век ислама и хранят в себе наследие многих восточных культур.  Несколько веков сказки являются источником вдохновения для художников, композиторов, входят в список ста лучших книг всех времён и народов. В книгу вошли одни из самых известных и популярных сказок, рассказанных прекрасной Шахерезадой — про Алли-Бабу и сорок разбойников, Аладдина, принцессу Будур, волшебного коня и Синдбада-морехода.

Арабские сказки Шахерезады

«Книга тысячи и одной ночи» (араб. كِتَابُ أَلْفِ لَيْلَةٍ وَلَيْلَةٌ‎‎‎, перс. هزار و یک شب‎; «Китаб альф лейла ва лейла») — памятник средневековой арабской и персидской литературы, собрание сказок и новелл, обрамлённое историей о персидском царе Шахрияре и его жене по имени Шахерезада (Шахразаде). Первое полное печатное издание на арабском языке, так называемое булакское, было опубликовано в Каире в 1835 году.

Источник: Википедия

Эти сказки родились много веков назад

Эти сказки родились много веков назад в жарких восточных странах. Их автор не известен, но главная героиня, персонаж иранской культуры — Шахерезада — стала символом женской красоты, ума и изобретательности.
Чтобы смягчить гнев великого шаха, Шахерезада придумала рассказывать каждый вечер по сказке, обрывая её на самом интересном месте. Повелитель империи и великий воин с нетерпением ребёнка ждал следующего вечера, чтобы узнать, вернулся ли домой Синдбад-мореход, принесла ли счастье Аладдину волшебная лампа, нашла ли свою любовь принцесса Будур…
Теперь эти сказки вошли в золотой фонд мировой литературы, даря современным читателям путешествие в яркий и чарующий мир Востока.

Художник

Ольга Тамкович

Ольга Тамкович — художник-график, книжный иллюстратор и комиксист.
Автор лекций и мастер-классов, волонтёр инклюзивных мастерских, куратор и организатор выставок.
Образование: дизайнер, преподаватель.

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

Представляем книгу “Практическая робототехника. 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.

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

Новая книга: “Хороший код, плохой код”

Хороший код, плохой код

В книге изложены приемы и методы, обязательные при грамотном объектно-ориентированном программировании. Следование приведенным паттернам проектирования  защитит программу от ошибок, проблем с совместимостью, неожиданных и непонятных отказов, а также обеспечит модульность кода. Рассмотрены примеры на языке Java, легко адаптируемые для C#, пояснены приёмы тестирования, развития и адаптации кода с учётом меняющихся требований.

Книга адресована программистам на языках Java и C# и руководителям команд, практикующих объектно-ориентированное программирование.

Разница между хорошим и плохим кодом зачастую сводится к тому, насколько искусно в коде применяются паттерны и практики, принятые в сообществе разработчиков. В предлагаемой книге рассказано, как повысить производительность труда, пользуясь при программировании такими приёмами, которые обычно усваиваются только под тщательным руководством наставника и после многократного ревью кода.

 

На первый взгляд эта книга может напомнить другие пособия по «паттернам проектирования» для начинающих, но в некоторых важных отношениях выделяется на их фоне. В частности, здесь рассказано:

  • Как писать код, который сложно использовать ненадлежащим образом
  • Как правильно организовать обработку ошибок в приложениях
  • Как обеспечить модульность кода, оптимизировав его для повторного использования
  • Как при необходимости переводить примеры кода с Java на C#
  • Как правильно организовать тестирование кода и внедрение зависимостей

В наибольшей степени книга подойдёт разработчикам, специализирующимся на Java и C#, но также пригодится более широкому кругу программистов, желающих повысить качество объектно-ориентированного кода.

Отзывы

Практичная и информативная книга, которая поможет вам создавать высококачественный и эффективный код.
Кристофер Виллануэва, независимый консультант

Умная, хорошо написанная, практичная книга о том, как писать хороший код, который удобно поддерживать.
Хоули Уолдмен, консультант

Я преподаватель программирования, и мне понравилось, что рассматривает и чему учит эта книга. Она становится в один ряд с такими шедеврами, как «Совершенный код» Стива Макконнелла. В ней в мельчайших деталях показано, каким должен быть «хороший код», почему для приобретения мастерства нужно не только знать, что и как пишется, но и уметь думать как программист.
Ховард Дайнер, отзыв с Amazon

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

Глава 1. Введение………………………………………… 7

1.1. Для кого эта книга……………………………………….. 7

1.2. Что понадобится…………………………………………. 7

1.3. Первая программа………………………………………. 8

1.4. Задания…………………………………………………… 11

Глава 2. Переменные…………………………………. 11

2.1. Типы переменных……………………………………… 11

2.2. Соглашение об именовании переменных…………. 13

2.3. Типы данных……………………………………………. 13

2.4. Значения по умолчанию………………………………. 14

2.5. Литералы………………………………………………… 15

2.6. Целочисленные литералы……………………………. 15

2.7. Литералы с плавающей точкой……………………… 16

2.8. Символьные и строковые литералы……………….. 17

2.9. Другие литералы……………………………………….. 18

2.10. Массивы……………………………………………….. 19

2.11. Задания…………………………………………………. 20

Глава 3. Операции……………………………………… 21

3.1. Операция присваивания……………………………… 21

3.2. Преобразование примитивных типов………………. 22

3.3. Расширяющее преобразование примитивов……… 22

3.4. Сужающее преобразование примитивов………….. 23

3.5. Арифметические операции…………………………… 24

3.6. Унарные операции…………………………………….. 26

3.7. Отличие постфиксного и префиксного инкремента и декремента            27

3.8. Операции сравнения………………………………….. 28

3.9. Логические И и ИЛИ…………………………………… 29

3.10. Операция instanceof…………………………………. 29

3.11. Тернарная операция…………………………………. 31

3.12. Битовые операции……………………………………. 31

3.13. Присвоение с выполнением другой операции….. 32

3.14. Приоритеты операций……………………………….. 33

3.15. Задания…………………………………………………. 34

Глава 4. Выражения, инструкции и блоки……. 35

4.1. Операторы управления порядком выполнения….. 36

4.2. Операторы if-then и if-then-else……………………… 37

4.3. Оператор switch………………………………………… 39

4.4. Оператор while………………………………………….. 43

4.5. Оператор do-while……………………………………… 45

4.6. Оператор for…………………………………………….. 45

4.7. Оператор break…………………………………………. 47

4.8. Оператор continue……………………………………… 48

4.9. Оператор return…………………………………………. 49

4.10. Задания…………………………………………………. 50

Глава 5. Классы и объекты………………………… 50

5.1. Классы……………………………………………………. 50

5.2. Поля………………………………………………………. 51

5.3. Объявление методов………………………………….. 53

5.4. Конструкторы……………………………………………. 56

5.5. Передача параметров…………………………………. 58

5.6. Сборка мусора………………………………………….. 61

5.7. Ключевое слово this…………………………………… 61

5.8. Ключевое слово static………………………………… 63

5.9. Ключевое слово final………………………………….. 64

5.10. Инициализация полей……………………………….. 66

5.11. Задания…………………………………………………. 68

Глава 6. Аннотации…………………………………….. 69

6.1. Объявление аннотаций……………………………….. 69

6.2. Предопределенные аннотации………………………. 72

6.3. Мета-аннотации………………………………………… 73

6.4. Задания…………………………………………………… 75

Глава 7. Вложенные классы
и лямбда-выражения………………………………….. 75

7.1. Что такое вложенные классы……………………….. 75

7.2. Для чего использовать вложенные классы………. 76

7.3. Статические вложенные классы……………………. 77

7.4. Внутренние классы……………………………………. 79

7.5. Внутренний класс, являющийся нестатическим членом класса              80

7.6. Локальные классы…………………………………….. 81

7.7. Анонимные классы…………………………………….. 82

7.8. Затенение переменных……………………………….. 84

7.9. Лямбда-выражения…………………………………….. 85

7.10. Ссылки на методы……………………………………. 89

7.11. Когда использовать вложенные классы, локальные классы, анонимные классы
и лямбда-выражения……………………………………… 91

7.12. Задания…………………………………………………. 92

Глава 8. Интерфейсы…………………………………. 93

8.1. Теория……………………………………………………. 93

8.2. Задания…………………………………………………… 99

Глава 9. Наследование……………………………….. 99

9.1. Введение…………………………………………………. 99

9.2. Приведение типов……………………………………. 101

9.3. Переопределение (overriding) и скрытие (hiding) методов       102

9.4. Использование ключевого слова super………….. 106

9.5. Общий предок Object и его методы……………….. 109

9.6. Ключевое слово final и неизменяемые классы…. 112

9.7. Абстрактные методы и классы…………………….. 112

9.8. Задания…………………………………………………. 113

Глава 10. Пакеты……………………………………… 114

10.1. Теория…………………………………………………. 114

10.2. Задания……………………………………………….. 118

Глава 11. Перечисления……………………………. 118

11.1. Теория…………………………………………………. 118

11.2. Задания……………………………………………….. 123

Глава 12. Записи………………………………………. 123

12.1. Теория…………………………………………………. 123

12.2. Задания……………………………………………….. 125

Глава 13. Числа………………………………………… 126

13.1. Введение……………………………………………… 126

13.2. BigInteger……………………………………………… 128

13.3. BigDecimal……………………………………………. 130

13.4. Math……………………………………………………. 132

13.5. Задания……………………………………………….. 133

Глава 14. Строки………………………………………. 134

14.1. Класс String…………………………………………… 134

14.2. Методы класса String………………………………. 140

14.3. StringBuilder и StringBuffer…………………………. 143

14.4. Задания……………………………………………….. 145

Глава 15. Автоупаковка и распаковка……….. 146

15.1. Теория…………………………………………………. 146

15.2. Задания……………………………………………….. 148

Глава 16. Optional…………………………………….. 149

16.1. Теория…………………………………………………. 149

16.2. Задания……………………………………………….. 154

Глава 17. Модули……………………………………… 154

17.1. Теория…………………………………………………. 154

17.2. Задания……………………………………………….. 159

Глава 18. Обобщения………………………………… 160

18.1. Введение……………………………………………… 160

18.2. Класс Lair……………………………………………… 160

18.3. Обобщенная версия класса Lair…………………. 161

18.4. Соглашение об именовании переменных типа.. 162

18.5. Создание экземпляра обобщенного типа и обращение к нему              162

18.6. Бриллиантовая операция (Diamond operator)…. 163

18.7. Несколько параметров типа………………………. 164

18.8. Сырой тип (Raw type)……………………………… 164

18.9. Сообщения об ошибках “unchecked”……………. 165

18.10. Обобщенные методы……………………………… 166

18.11. Ограниченные параметры типа…………………. 167

18.12. Обобщения, наследование и дочерние типы… 169

18.13. Выведение типов………………………………….. 171

18.14. Выведение типов и обобщенные методы…….. 172

18.15. Выведение типов и создание экземпляра обобщенного класса           173

18.16. Выведение типа и обобщенные конструкторы обобщенных и необобщенных классов          174

18.17. Целевые типы……………………………………… 175

18.18. Подстановочный символ (wildcard)……………. 176

18.19. Подстановочный символ, ограниченный сверху (Upper bounded wildcard)           176

18.20. Неограниченный подстановочный символ (Unbounded wildcard)         177

18.21. Подстановочные символы и дочерние типы… 179

18.22. Захват символа подстановки (Wildcard Capture) и вспомогательные методы       180

18.23. Руководство по использованию подстановочного символа 182

18.24. Стирание типа (Type Erasure)…………………… 184

18.25. Стирание типа в обобщенных типах…………… 184

18.26. Стирание типа в обобщенных методах……….. 185

18.27. Получение аргумента типа родительского класса 185

18.28. Влияние стирания типа и методы-мосты
(bridge methods)………………………………………….. 186

18.29. Методы-мосты (Bridge Methods)……………….. 187

18.30. Загрязнение кучи (Heap pollution)………………. 188

18.31. Подавление предупреждений для методов с произвольным количеством параметров с нематериализуемыми формальными
параметрами………………………………………………. 191

18.32. Ограничения обобщений…………………………. 192

18.33. Задания………………………………………………. 195

Глава 19. Исключения………………………………. 195

19.1. Введение……………………………………………… 195

19.2. Перехватывание и обработка исключений…….. 197

19.3. Указание типов исключений, бросаемых методом 202

19.4. Как бросить исключение…………………………… 203

19.5. Цепочки исключений……………………………….. 203

19.6. Создание своих объектов-исключений…………. 204

19.7. Преимущества исключений……………………….. 205

19.8. Задания……………………………………………….. 205

Глава 20. Потоки ввода/вывода………………… 206

20.1. Введение……………………………………………… 206

20.2. Потоки байт…………………………………………… 206

20.3. InputStream…………………………………………… 206

20.4. OutputStream…………………………………………. 208

20.5. FileInputStream и FileOutputStream……………… 209

20.6. ByteArrayInputStream и ByteArrayOutputStream. 210

20.7. FilterInputStream и FilterOutputStream………….. 210

20.8. DataInputStream и DataOutputStream…………… 210

20.9. BufferedInputStream и BufferedOutputStream….. 210

20.10. PipedInputStream и PipedOutputStream……….. 211

20.11. ObjectInputStream и ObjectOutputStream…….. 211

20.12. Потоки символов…………………………………… 211

20.13. Scanner и PrintStream…………………………….. 212

20.14. Задания………………………………………………. 212

Глава 21. Сериализация……………………………. 213

21.1. Теория…………………………………………………. 213

21.2. Задания……………………………………………….. 216

Глава 22. Файлы (NIO.2)……………………………. 216

22.1. Path…………………………………………………….. 216

22.2. Что такое Glob?……………………………………… 219

22.3. Класс Files……………………………………………. 219

22.4. Проверка существования файла или каталога.. 219

22.5. Проверка прав доступа к файлу или каталогу… 220

22.6. Один и тот же файл…………………………………. 220

22.7. Удаление файла или каталога……………………. 220

22.8. Копирование файла или каталога………………… 221

22.9. Перемещение файла или каталога………………. 221

22.10. Управление метаданными……………………….. 221

22.11. OpenOption………………………………………….. 223

22.12. Наиболее часто используемые методы для небольших файлов         224

22.13. Буферизированный ввод и вывод в текстовые файлы       225

22.14. Небуферизированный ввод и вывод………….. 225

22.15. Создание файлов………………………………….. 225

22.16. Создание временных файлов…………………… 225

22.17. Java NIO.2 Channels……………………………… 226

22.18. Перечисление корневых каталогов файловой системы      228

22.19. Создание каталога…………………………………. 228

22.20. Создание временного каталога…………………. 228

22.21. Перечисление содержимого каталога…………. 229

22.22. Символические и другие ссылки……………….. 231

22.23. Создание символических ссылок………………. 231

22.24. Создание жестких ссылок……………………….. 231

22.25. Определение символической ссылки…………. 232

22.26. Нахождение цели ссылки………………………… 232

22.27. Обход дерева файлов с FileVisitor…………….. 232

22.28. Поиск файлов………………………………………. 235

22.29. Подписываемся на изменения в каталоге……. 235

22.30. Задания………………………………………………. 237

Глава 23. Многопоточность……………………….. 237

23.1. Класс Thread…………………………………………. 237

23.2. Синхронизация………………………………………. 243

23.3. Вмешательство в поток (thread interference)….. 243

23.4. Ошибки согласованности памяти (memory consistency errors)              245

23.5. Синхронизированные (synchronized) методы…. 245

23.6. Внутренние мониторы и синхронизация……….. 247

23.7. Атомарный доступ………………………………….. 248

23.8. Атомарные переменные…………………………… 249

23.9. Взаимная блокировка (Deadlock)………………… 251

23.10. Голодание (starvation)…………………………….. 253

23.11. Активная блокировка (livelock)………………….. 253

23.12. Защищенные блокировки (guarded blocks)……. 253

23.13. Неизменяемые объекты (immutable objects)… 257

23.14. Объекты Lock………………………………………. 258

23.15. Executors……………………………………………. 259

23.16. CompletableFuture…………………………………. 260

23.17. Пулы потоков………………………………………. 263

23.18. Fork/Join Framework………………………………. 264

23.19. Java Memory Model……………………………….. 266

23.20. Задания………………………………………………. 270

Глава 24. Настройки и окружение……………… 270

24.1. Properties……………………………………………… 270

24.2. Аргументы командной строки…………………….. 273

24.3. Переменные окружения……………………………. 274

24.4. Методы класса System……………………………. 275

24.5. Переменная CLASSPATH…………………………. 275

24.6. Задания……………………………………………….. 275

Глава 25. Регулярные выражения…………….. 276

25.1. Теория…………………………………………………. 276

25.2. Задания……………………………………………….. 277

Глава 26. Коллекции…………………………………. 278

26.1. Введение……………………………………………… 278

26.2. Интерфейс Collection………………………………. 278

26.3. Интерфейс Set………………………………………. 280

26.4. Интерфейс List………………………………………. 281

26.5. Интерфейс Queue…………………………………… 283

26.6. Интерфейс Deque…………………………………… 284

26.7. Интерфейс Map……………………………………… 285

26.8. Интерфейс ConcurrentMap………………………… 286

26.9. Класс Dictionary и его наследник Hashtable…… 287

26.10. Сортировка объектов……………………………… 287

26.11. Интерфейс SortedSet……………………………… 292

26.12. Интерфейс SortedMap……………………………. 294

26.13. Другие реализации интерфейсов коллекций…. 295

26.14. Java Stream API……………………………………. 296

26.15. Алгоритмы…………………………………………… 303

26.16. Задания………………………………………………. 304

Глава 27. Дата и время……………………………… 305

27.1. Введение……………………………………………… 305

27.2. Класс Date……………………………………………. 305

27.3. Класс Calendar………………………………………. 306

27.4. Пакет java.time………………………………………. 308

27.5. Перечисление DayOfWeek……………………….. 308

27.6. Перечисление Month……………………………….. 309

27.7. Класс LocalDate……………………………………… 311

27.8. Класс LocalTime…………………………………….. 311

27.9. Класс LocalDateTime……………………………….. 311

27.10. Класс YearMonth…………………………………… 312

27.11. Класс MonthDay……………………………………. 313

27.12. Класс Year…………………………………………… 313

27.13. Классы ZoneId и ZoneOffset…………………….. 313

27.14. Класс ZonedDateTime…………………………….. 315

27.15. Класс OffsetDateTime…………………………….. 315

27.16. Класс OffsetTime………………………………….. 316

27.17. Класс Instant……………………………………….. 316

27.18. Форматирование и преобразование из строки. 317

27.19. Интерфейс TemporalAdjuster……………………. 318

27.20. Интерфейс TemporalQuery………………………. 319

27.21. Класс Duration……………………………………… 319

27.22. Перечисление ChronoUnit……………………….. 320

27.23. Класс Period………………………………………… 320

27.24. Класс Clock…………………………………………. 321

27.25. Задания………………………………………………. 321

Глава 28. Форматирование и парсинг………… 322

28.1. Введение……………………………………………… 322

28.2. Класс NumberFormat……………………………….. 323

28.3. Класс DecimalFormat………………………………. 324

28.4. Класс DateFormat…………………………………… 325

28.5. Класс DateTimeFormatter…………………………. 326

28.6. Класс SimpleDateFormat…………………………… 326

28.7. Класс PrintStream…………………………………… 328

28.8. Класс Formatter……………………………………… 328

28.9. Класс Scanner……………………………………….. 333

28.10. Задания………………………………………………. 335

Глава 29. Работа с консолью…………………….. 336

29.1. Теория…………………………………………………. 336

29.2. Задание……………………………………………….. 338

Глава 30. Локализация……………………………… 339

30.1. Теория…………………………………………………. 339

30.2. Задание……………………………………………….. 341

Глава 31. Пример сервиса со Spring………….. 342

31.1. Что за сервис мы напишем……………………….. 342

31.2. Spring Initializr………………………………………… 343

31.3. Разбор сгенерированного скелета приложения.. 346

31.4. Добавление конечных точек………………………. 349

31.5. Слой бизнес-сервисов……………………………… 351

31.6. Работа с базой данных…………………………….. 357

31.7. Вызов методов с Postman………………………… 360

31.8. Docker…………………………………………………. 360

31.9. Kubernetes……………………………………………. 363

31.10. Задания………………………………………………. 366

Глава 32. Заключение……………………………….. 367

Том Лонг – программист корпорации Google, техлид. Наряду с решением производственных задач постоянно обучает начинающих программистов секретам профессионального мастерства.

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

Собака рядом. Мини-энциклопедия о собачьей службе и дружбе

Собака рядом. Мини-энциклопедия о собачьей службе и дружбе

Если верить Редьярду Киплингу, собака была самым первым другом человека. Прошли тысячелетия, а собаки не перестают удивлять своей преданностью. Эта маленькая, но очень увлекательная энциклопедия рассказывает, как собаки научились пасти стада овец и бегать в упряжках, идти по следу, разыскивать нарушителей закона и летать в космос. Читатели узнают, какие поставлены памятники, сняты фильмы и написаны книги в честь наших верных помощников. Интересные, удивительные и необыкновенные факты о тех, кто всегда рядом.

Редьярд Джозеф Киплинг

Проснувшись, Мужчина спросил: «Что здесь делает Дикий Пёс?!» И ответила Женщина: «Его имя больше не Дикий Пёс, а Первый Друг, и он будет нам другом во веки веков».
Редьярд Джозеф Киплинг

Собака протянула человеку лапу помощи тысячелетия назад. Изменилось всё: мир, люди и животные. Но собаки всё так же рядом: готовы служить, спасать и, конечно, просто дружить.

На страницах нашей книги вам машут хвостами разные псы: охотники и сторожа, солдаты и космонавты. Они помощники, компаньоны, спасатели. Собака рядом — значит, человек уже не один, а вместе всегда легче.

Об авторе

Анна Битько

Анна Битько по образованию психолог, очень любит собак,  ведет книжный блог «Дом с книгами» и мама двойни,  поэтому книги пишет так, как рассказывала бы своим детям. Основной посыл ее творчества —  напомнить, что собаки не только дарят нам тепло и радость, но и спасают жизни. Первая книга «Пограничник с собакой» получила большой отклик и у читателей, и у библиотек.

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

Новинка: “C# глазами хакера”

C# глазами хакера

Подробно рассмотрены  все аспекты безопасности от теории до реальных реализаций .NET-приложений на языке C#. Рассказано, как обеспечивать безопасную регистрацию, авторизацию и поддержку сессий пользователей. Перечислены уязвимости, которые могут быть присущи веб-сайтам и Web API, описано, как хакеры могут эксплуатировать уязвимости  и как можно обеспечить безопасность приложений. Даны основы оптимизации кода для обработки максимального количества пользователей с целью экономии ресурсов серверов и денег на хостинг. Рассмотрены сетевые функции: проверка соединения, отслеживание запроса, доступ к микросервисам, работа с сокетами и др. Приведены реальные примеры атак хакеров и способы защиты от них.

Для веб-программистов, администраторов и специалистов по безопасности

В течение 8 лет я работал над сайтами Sony с высокой нагрузкой и высокими требованиями по безопасности. За все это время сайты ни разу не были взломаны. Есть мнение, что безопасность – это сложно. Отчасти это верно. Но и сложное – возможно!
В этой книге я решил поделиться своим опытом работы над сайтами e-commerce с высокой нагрузкой, рассмотреть все аспекты безопасности от теории до реальных реализаций .NET-приложений на языке C# и рассказать, как обеспечить безопасность, оптимизировать код и обрабатывать высокие нагрузки с минимальными ресурсами.
Михаил Фленов, автор книги

Книгу “C# глазами хакера” можно купить со скидкой в интернет-магазине издательства “БХВ“.

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

Об авторе………………………………………………………………………………………………………………………………………. 7

О книге…………………………………………………………………………………………………………………………………………… 8

Благодарности……………………………………………………………………………………………………………………………… 8

Глава 1. Теория безопасности………………………………………………………………… 11

1.1. Комплексная защита…………………………………………………………………………………………………………… 12

1.2. Отказ в обслуживании………………………………………………………………………………………………………… 15

1.3. Управление кодом………………………………………………………………………………………………………………. 17

1.4. Стабильность кода: нулевые исключения………………………………………………………………………… 19

1.5. Исключительные ситуации………………………………………………………………………………………………… 21

1.6. Журналы ошибок и аудит………………………………………………………………………………………………….. 22

1.7. Ошибки нужно исправлять…………………………………………………………………………………………………. 24

1.8. Отгружаем легко и часто……………………………………………………………………………………………………. 28

1.8.1. Обновление базы данных…………………………………………………………………………………………….. 30

1.8.2. Копирование файлов…………………………………………………………………………………………………….. 31

1.8.3. Распределенное окружение………………………………………………………………………………………….. 32

1.9. Шифрование трафика…………………………………………………………………………………………………………. 33

1.10. POST или GET?………………………………………………………………………………………………………………….. 35

Глава 2. Безопасность .NET-приложений……………………………………………….. 39

2.1. Шаблон приложения…………………………………………………………………………………………………………… 39

2.2. Регистрация пользователей……………………………………………………………………………………………….. 41

2.3. Форма регистрации…………………………………………………………………………………………………………….. 43

2.3.1. Корректные данные регистрации………………………………………………………………………………… 44

2.3.2. Email с плюсом и точкой………………………………………………………………………………………………. 48

2.4. Хранение паролей………………………………………………………………………………………………………………. 49

2.4.1. Хеширование…………………………………………………………………………………………………………………. 51

2.4.2. MD5-хеширование………………………………………………………………………………………………………… 51

2.4.3. Безопасное хеширование……………………………………………………………………………………………… 54

2.5. Создание посетителей………………………………………………………………………………………………………… 55

2.6. Captcha………………………………………………………………………………………………………………………………… 56

2.6.1. Настраиваем Google reCAPTCHA……………………………………………………………………………….. 57

2.6.2. Пример использования reCAPTCHA……………………………………………………………………………. 59

2.6.3. Отменяем капчу…………………………………………………………………………………………………………….. 62

2.7. Авторизация………………………………………………………………………………………………………………………… 63

2.7.1. Базовая авторизация…………………………………………………………………………………………………….. 63

2.7.2. Журналирование и защита от перебора…………………………………………………………………….. 65

2.7.3. Защищаемся от перебора…………………………………………………………………………………………….. 66

2.8. Инъекция SQL: основы……………………………………………………………………………………………………….. 69

2.8.1. SQL-уязвимость в ADO.NET…………………………………………………………………………………………. 69

2.8.2. Защита от SQL-инъекции……………………………………………………………………………………………… 73

2.9. Dapper ORM…………………………………………………………………………………………………………………………. 75

2.10. Entity Framework……………………………………………………………………………………………………………….. 80

2.11. Отправка электронной почты………………………………………………………………………………………….. 84

2.11.1. Очереди сообщений……………………………………………………………………………………………………. 85

2.11.2. Работа с очередью………………………………………………………………………………………………………. 87

2.11.3. Отправляем письма…………………………………………………………………………………………………….. 88

2.12. Многоуровневая авторизация…………………………………………………………………………………………. 90

2.13. Запомни меня…………………………………………………………………………………………………………………….. 91

2.13.1. Зашифрованный якорь……………………………………………………………………………………………….. 92

2.13.2. Опасность HttpOnly…………………………………………………………………………………………………….. 95

2.13.3. Что дальше?…………………………………………………………………………………………………………………. 97

2.14. Подделка параметров………………………………………………………………………………………………………. 97

2.15. Флуд…………………………………………………………………………………………………………………………………. 100

2.16. XSS: межсайтовый скриптинг………………………………………………………………………………………… 102

2.16.1. Защита от XSS в .NET……………………………………………………………………………………………….. 103

2.16.2. Примеры эксплуатации XSS…………………………………………………………………………………….. 106

2.16.3. Типы XSS……………………………………………………………………………………………………………………. 108

2.16.4. Хранимая XSS……………………………………………………………………………………………………………. 109

2.16.5. XSS: текст внутри тега……………………………………………………………………………………………… 115

2.16.6. Скрипты……………………………………………………………………………………………………………………… 116

2.17. SQL Injection: доступ к недоступному………………………………………………………………………….. 117

2.18. CSRF: межсайтовая подделка запроса…………………………………………………………………………. 119

2.19. Загрузка файлов……………………………………………………………………………………………………………… 123

2.20. Контроль доступа…………………………………………………………………………………………………………… 125

2.21. Переадресация………………………………………………………………………………………………………………… 128

2.22. Защита от DoS…………………………………………………………………………………………………………………. 130

Глава 3. Основы производительности………………………………………………….. 135

3.1. Основы……………………………………………………………………………………………………………………………….. 135

3.2. Когда нужно оптимизировать?………………………………………………………………………………………… 137

3.3. Оптимизация и рефакторинг…………………………………………………………………………………………….. 138

3.4. Отображение данных……………………………………………………………………………………………………….. 139

3.5. Асинхронное выполнение запросов………………………………………………………………………………… 142

3.6. Параллельное выполнение………………………………………………………………………………………………. 143

3.7. LINQ…………………………………………………………………………………………………………………………………… 144

3.8. Обновление .NET………………………………………………………………………………………………………………. 146

Глава 4. Производительность в .NET……………………………………………………. 147

4.1. Типы данных……………………………………………………………………………………………………………………… 147

4.1.1. Производительность…………………………………………………………………………………………………… 147

4.1.2. Отличие структур от классов…………………………………………………………………………………….. 149

4.1.3. Ссылки на структуры…………………………………………………………………………………………………. 154

4.2. Виртуальные методы……………………………………………………………………………………………………….. 156

4.3. Управление памятью………………………………………………………………………………………………………… 158

4.4. Закрытие соединений с базой данных……………………………………………………………………………. 161

4.5. Циклы…………………………………………………………………………………………………………………………………. 164

4.6. Строки………………………………………………………………………………………………………………………………… 165

4.7. Исключительные ситуации………………………………………………………………………………………………. 167

4.8. Странный HttpClient…………………………………………………………………………………………………………. 168

Глава 5. Сеть………………………………………………………………………………………… 171

5.1. Проверка соединения……………………………………………………………………………………………………….. 171

5.2. Отслеживание запроса……………………………………………………………………………………………………… 172

5.3. Класс HTTP-клиент…………………………………………………………………………………………………………… 175

5.4. Класс Uri……………………………………………………………………………………………………………………………. 176

5.5. Уровень розетки………………………………………………………………………………………………………………… 178

5.5.1. Сервер………………………………………………………………………………………………………………………….. 178

5.5.2. Клиент………………………………………………………………………………………………………………………….. 182

5.6. Доменная система имен……………………………………………………………………………………………………. 184

Глава 6. Web API………………………………………………………………………………….. 187

6.1. Пример Web API………………………………………………………………………………………………………………… 187

6.2. JWT-токены……………………………………………………………………………………………………………………….. 188

6.3. Устройство токенов………………………………………………………………………………………………………….. 195

Глава 7. Трюки…………………………………………………………………………………….. 199

7.1. Кеширование…………………………………………………………………………………………………………………….. 199

7.1.1. Защита от XSS в .NET…………………………………………………………………………………………………. 199

7.1.2. Кеширование статичными переменными…………………………………………………………………. 203

7.1.3. Кеширование уровня запроса……………………………………………………………………………………. 204

7.1.4. Кеширование в памяти……………………………………………………………………………………………….. 205

7.1.5. Сервер кеширования…………………………………………………………………………………………………… 207

7.1.6. Cookie в качестве кеша……………………………………………………………………………………………….. 208

7.2. Сессии………………………………………………………………………………………………………………………………… 210

7.2.1. Пишем свою сессию……………………………………………………………………………………………………. 210

7.2.2. Безопасность сессии…………………………………………………………………………………………………… 212

7.3. Защита от множественной обработки…………………………………………………………………………….. 213

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

Литература…………………………………………………………………………………………… 219

Приложение. Описание файлового архива, сопровождающего книгу….. 221

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

Фленов Михаил

Флёнов Михаил, профессиональный программист. Работал в журнале «Хакер», в котором несколько лет вел рубрики «Hack-FAQ» и «Кодинг» для программистов, печатался в журналах «Игромания» и «Chip-Россия». Автор бестселлеров «Библия Delphi», «Программирование в Delphi глазами хакера», «Программирование на C++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.

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

Новинка: “Head First. Git”

Head First. Git

Представляем книгу Раджу Ганди “Head First. Git”. Книга поможет быстро и легко изучить самый популярный в мире инструмент контроля версий Git. В ней использована уникальная методика Head First, выходящая за рамки синтаксиса и инструкций по решению конкретных задач, а эффектное визуальное оформление разработано с учетом того, как работает и наиболее продуктивно усваивает информацию мозг. Рассмотрены основы Git, свойства ветвления кода, слияние, коммиты, устройство репозитория Git и поиск в нем, отмена действий и исправление ошибок. Особое внимание уделено командной работе с Git, передовым методам взаимодействия  и советам профессионалов по эффективной работе.

Хотите научиться работать с самой популярной в мире системой контроля версий? Сухим, унылым академическим лекциям вы предпочитаете оживленную беседу за обедом? Тогда эта книга для вас!

Чему вы научитесь с этой книгой?

Многие начинающие пользователи Git полагаются на «рецепты» — готовые наборы команд для копирования и вставки, которые они находят в Интернете, не понимая, как на самом деле работает Git. Но как быть, если вас не устраивает бездумное повторение? С помощью этого уникального практического руководства вы изучите способы работы с Git и получите удовольствие от обучения. Раджу Ганди проведет вас за кулисы, покажет, как устроен простой мощный движок, лежащий в основе Git, и не просто расскажет, что вы должны делать, но и пояснит, почему это нужно. Вы освоите такие понятия, как ветвление, слияние, коммиты, изучите передовые методы совместной работы и раскроете весь потенциал Git.

Чем уникальна эта книга?

Если вы уже читали книги серии Head First издательства O’Reilly, вы знаете, чего ожидать — эффектного визуального оформления, разработанного с учетом того, как работает ваш мозг. Если нет, вас ждет приятный сюрприз. Благодаря этой книге вы изучите Git с помощью методики Head First, которая пробудит  ваш разум, а не усыпит его скучным текстом.

 

Прокачай свой мозг!

Эта книга — просто жемчужина. Потрясающе ясное, веселое и увлекательное введение в очень мощный и сложный инструмент. Темп, объем и структура облегчают чтение, предоставляя читателям прочную основу для дальнейшего изучения Git
 Мэтт Кордиал, штатный инженер-программист, Experian Decision Analytics

Разработчики программного обеспечения любят использовать привычные инструменты, но это часто означает, что мы работаем с минимально необходимым запасом навыков. И хотя основы Git можно понять за несколько часов, на овладение нюансами, его мощью и глубиной могут уйти годы. Каждая страница этой книги таит в себе открытие или новые грани темы, которая казалась вам знакомой. Независимо от вашего опыта работы с Git, автор поможет вам лучше использовать этот бесценный инструмент.
 Нейт Шутта, архитектор и разработчик в компании VMware

Контроль версий — это сложно. Объяснять контроль версий еще сложнее. Книга преобразует сухую, сложную, сложную техническую информацию в увлекательную и игривую историю, которая делает обучение не только увлекательным, но и очень эффективным. Автор Раджу Ганди порадует ваши усталые нейроны удивительными аналогиями, персонажами и приключениями. Если вы впервые пользуетесь Git, эта книга будет той книгой, которую вы захотите получить в первую очередь с помощью git checkout.
 Даниэль Инохоса, независимый программист, спикер и инструктор EvolutionNext.com

Как жаль, что этой книги не было десять лет назад, когда я впервые начал широко использовать Git. Разговорный стиль книги, наряду с яркими аналогиями для общих понятий Git, сделают чтение увлекательным. Независимо от вашего уровня подготовки, вам понравится читать эту книгу, и вы узнаете о Git что-то новое.
 Нихар Шах, консультант по программному обеспечению

Книгу “Head First. Git” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Раджа Ганди

Раджу Ганди (Raju Gandhi) является основателем DefMacro Software, LLC. Он живет в Колумбусе, штат Огайо, вместе со своей замечательной женой Мишель, их сыновьями Мейсоном и Микой. С ними живут три пушистых члена их семьи — две собаки, Бадди и Скай, и кошка Принцесса Зара.
Раджу — консультант, автор, преподаватель и регулярно приглашаемый докладчик на конференциях по всему миру. В качестве как разработчика программного обеспечения, так и наставника он верит в простоту. Его подход всегда состоит в том, чтобы понятно объяснить «почему», а не «как».
Блог Раджу опубликован по адресу https://www.looselytyped.com, а с самим автором можно связаться в Твиттере: @looselytyped. Он всегда рад новым друзьям. Его контактную информацию можно найти по адресу https://www.rajugandhi.com.

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

Представляем книгу “Расширения ядра Linux: драйверы и модули”

Расширения ядра Linux: драйверы и модули

Представляем книгу Олега Цилюрика “Расширения ядра Linux: драйверы и модули”. В книге подробно рассмотрено программирование драйверов ядра Linux, исследованы возможности расширяемости ядра при помощи модулей. Основная версия ядра – 5.15. Код примеров отработан и проверен на десятках различных инсталляций Linux, установленных из различных дистрибутивов и разных семейств дистрибутивов: Fedora, CentOS, Debian, Ubuntu, Mint. Уделено внимание архитектурам x_64, x_86, ARM, а также одноплатному компьютеру Raspberry Pi и драйверам устройств, подключаемых по USB. Затронут стандарт POSIX, разобраны API ядра, работа с Raspberry Pi, системные вызовы и подключение разнообразных периферийных устройств.

 

Ядро Linux — шедевр низкоуровневого кода на языке C. Разработка ядра не прекращается уже почти 30 лет, и занимается этим глобальное сообщество энтузиастов и профессионалов. Системные вызовы ядра Linux, тонкости управления памятью или параллельная обработка запросов – все эти темы важны сами по себе и в совокупности, но есть и ещё одна важная тема, до сих пор освещённая на русском языке фрагментарно и неравномерно: программирование драйверов и модулей ядра.

Именно этой теме посвящён фундаментальный труд, впервые публикуемый в качестве отдельной книги. Он зародился в начале 2000-х как материал для корпоративного курса и постоянно обновлялся вплоть до ноября 2022 года – и в данной версии выходит на бумаге. Новейшая версия ядра, учтённая в книге, – 5.15.

В книге подробно разобраны API ядра, системные вызовы, обработка сигналов, взаимодействия с периферийными устройствами и, в частности, с протоколом USB. Уделено внимание процессорным архитектурам x_64, x_86, ARM, а также одноплатному компьютеру Raspberry Pi и драйверам внешних устройств. Рассмотрена конфигурация и загрузка модулей и всевозможные варианты кастомизации ядра, рассмотрен стандарт POSIX.

Книга ориентирована на опытных программистов и системных администраторов, работающих с Linux. Призвана послужить достойным аналогом и дополнением классической работы «Драйверы устройств Linux. 3-е издание» Джонатана Корбетта и соавторов (Corbet J., Rubini A., Kroah-Hartman G. Linux Device Drivers, 3rd Edition).

Хорошая книга не дарит тебе откровение, хорошая книга укрепляет тебя в твоих самостоятельных догадках.
Андрей Рубанов, «Хлорофилия»

Книгу “Расширения ядра Linux: драйверы и модули” можно купить со скидкой в интернет-магазине издательства “БХВ“.

От автора……………………………………………………………………………………………….. 11

Предыстория………………………………………………………………………………………………………………………………. 11

Кому адресована книга?…………………………………………………………………………………………………………… 13

Структура книги………………………………………………………………………………………………………………………… 15

Соглашения, принятые в тексте………………………………………………………………………………………………… 18

Код примеров и замеченные опечатки…………………………………………………………………………………….. 19

Замечания о версиях ядра…………………………………………………………………………………………………………. 22

Обновляемость ядра………………………………………………………………………………………………………………….. 23

Использованные источники информации………………………………………………………………………………… 25

Обновления текущей редакции текста…………………………………………………………………………………….. 25

Глава 1. Модули с высоты птичьего полёта…………………………………………… 27

Linux и GNU………………………………………………………………………………………………………………………………… 27

FAQ                                                                                                                                                                   28

Модуль в иерархии программных систем……………………………………………………………………………….. 29

Наш первый модуль ядра………………………………………………………………………………………………………….. 31

Сборка модуля……………………………………………………………………………………………………………………. 31

Загрузка и исполнение………………………………………………………………………………………………………. 33

Точки входа и завершения………………………………………………………………………………………………… 34

Внутренний формат модуля……………………………………………………………………………………………………… 36

Диагностика модуля………………………………………………………………………………………………………………….. 38

Уровни диагностики в /proc………………………………………………………………………………………………. 42

Представление адресов в Linux………………………………………………………………………………………… 43

Форматы вывода………………………………………………………………………………………………………………… 45

Основные ошибки модуля…………………………………………………………………………………………………………. 48

Обсуждение………………………………………………………………………………………………………………………………… 50

Глава 2. Архитектура и вокруг………………………………………………………………. 53

Ядро: монолитное и микроядро……………………………………………………………………………………………….. 53

Траектория системного вызова………………………………………………………………………………………………… 55

Библиотечный и системный вызов из процесса………………………………………………………………. 56

Под капотом системного вызова………………………………………………………………………………………. 63

Отслеживание системного вызова в процессе…………………………………………………………………. 66

Различия программ пространств ядра и пользователя………………………………………………………….. 67

Интерфейсы модуля…………………………………………………………………………………………………………………… 70

Взаимодействие модуля с уровнем пользователя…………………………………………………………… 70

Взаимодействие модуля с ядром………………………………………………………………………………………. 75

Коды ошибок………………………………………………………………………………………………………………………. 77

Загрузка модулей………………………………………………………………………………………………………………………. 77

Автоматическая загрузка модулей…………………………………………………………………………………… 78

Запрет загрузки (черный список модулей)………………………………………………………………………. 79

Параметры загрузки модуля…………………………………………………………………………………………………….. 80

Конфигурационные параметры ядра………………………………………………………………………………………. 85

Параметры в ядре………………………………………………………………………………………………………………. 85

Параметры в модуле………………………………………………………………………………………………………….. 88

Подсчет ссылок использования………………………………………………………………………………………………… 91

Обсуждение………………………………………………………………………………………………………………………………… 93

Глава 3. Инструментальное окружение………………………………………………….. 95

Основные команды…………………………………………………………………………………………………………………….. 95

Системные файлы………………………………………………………………………………………………………………………. 96

Графика, терминал и текстовая консоль…………………………………………………………………………………. 99

Управление текстовыми консолями……………………………………………………………………………………….. 100

Коротко о компиляторе GCC………………………………………………………………………………………………….. 102

Ассемблер в Linux……………………………………………………………………………………………………………………. 105

Нотация AT&T…………………………………………………………………………………………………………………. 107

Инлайновый ассемблер GCC………………………………………………………………………………………….. 108

Создание среды сборки модулей ядра…………………………………………………………………………………… 110

Работа над кодом…………………………………………………………………………………………………………………….. 114

В деталях о сборке…………………………………………………………………………………………………………………… 117

Переменные периода компиляции………………………………………………………………………………….. 117

Дополнительные параметры периода компиляции………………………………………………………. 118

Версионность ядра в коде модуля………………………………………………………………………………….. 118

Как собрать одновременно несколько модулей?………………………………………………………….. 120

Как собрать модуль и используемые программы к нему?……………………………………………. 120

Пользовательские библиотеки………………………………………………………………………………………… 121

Как собрать модуль из нескольких объектных файлов?………………………………………………. 123

Рекурсивная сборка…………………………………………………………………………………………………………. 125

Подписывание модулей…………………………………………………………………………………………………………… 127

Инсталляция модуля……………………………………………………………………………………………………………….. 130

Нужна ли новая сборка ядра?………………………………………………………………………………………………… 131

Динамическая сборка модулей (DKMS)………………………………………………………………………………… 133

Обсуждение………………………………………………………………………………………………………………………………. 138

Глава 4. Внешние интерфейсы модуля…………………………………………………. 139

Драйверы: интерфейс устройства………………………………………………………………………………………….. 139

Символьные устройства………………………………………………………………………………………………….. 143

Варианты реализации……………………………………………………………………………………………. 145

Ручное создание имени………………………………………………………………………………….. 146

Использование udev……………………………………………………………………………………….. 151

Динамические имена………………………………………………………………………………………. 155

Разнородные (смешанные) устройства………………………………………………………… 159

Управляющие операции устройства…………………………………………………………………….. 162

Множественное открытие устройства………………………………………………………………….. 169

Счетчик ссылок использования модуля……………………………………………………………….. 177

Режимы выполнения операций ввода/вывода……………………………………………………… 180

Неблокирующий ввод/вывод и мультиплексирование……………………………………….. 181

Блочные устройства………………………………………………………………………………………………………… 190

Особенности драйвера блочного устройства………………………………………………………. 193

Обзор примеров реализации………………………………………………………………………………….. 194

Регистрация устройства…………………………………………………………………………………………. 195

Подготовка к регистрации……………………………………………………………………………… 195

Диски с разметкой MBR и GPT……………………………………………………………………… 197

Заполнение структуры…………………………………………………………………………………… 199

Завершение регистрации……………………………………………………………………………….. 201

Таблица операций устройства………………………………………………………………………………. 201

Обмен данными……………………………………………………………………………………………………….. 205

Классика: очередь и обслуживание ядром………………………………………………….. 210

Очередь и обработка запроса в драйвере……………………………………………………. 212

Отказ от очереди…………………………………………………………………………………………….. 214

Пример перманентных данных……………………………………………………………………… 215

Некоторые важные API………………………………………………………………………………….. 215

Результаты тестирования………………………………………………………………………………………. 216

Файловая система FUSE…………………………………………………………………………………………. 221

Интерфейс /proc……………………………………………………………………………………………………………………….. 228

Терминальные значения в /proc и /sys……………………………………………………………………………. 230

Использование /proc………………………………………………………………………………………………………… 231

Специфический механизм procfs……………………………………………………………………………. 232

Варианты реализации чтения……………………………………………………………………….. 240

Запись данных………………………………………………………………………………………………… 244

Общий механизм файловых операций………………………………………………………………….. 245

Интерфейс /sys………………………………………………………………………………………………………………………….. 251

Создание и использование имен в /sys……………………………………………………………………………. 253

Ошибки обменных операций…………………………………………………………………………………………… 261

Сетевые интерфейсы и протоколы…………………………………………………………………………………………. 263

Сетевые инструменты……………………………………………………………………………………………………… 265

Сетевые интерфейсы………………………………………………………………………………………………. 265

Инструменты наблюдения……………………………………………………………………………………… 269

Инструменты интегрального тестирования…………………………………………………………. 276

Структуры данных сетевого стека…………………………………………………………………………………. 278

Драйверы: сетевой интерфейс………………………………………………………………………………………… 279

Создание сетевых интерфейсов…………………………………………………………………………….. 279

Новая схема, и детальнее о ее создании………………………………………………………………. 281

Операции сетевого интерфейса……………………………………………………………………………… 286

Переименование сетевого интерфейса………………………………………………………………….. 291

Путь пакета сквозь стек протоколов………………………………………………………………………………. 293

Прием: традиционный подход………………………………………………………………………………. 293

Прием: высокоскоростной интерфейс…………………………………………………………………… 294

Передача пакетов……………………………………………………………………………………………………. 297

Статистика интерфейса…………………………………………………………………………………………………… 298

Виртуальный сетевой интерфейс……………………………………………………………………………………. 301

Протокол сетевого уровня………………………………………………………………………………………………. 307

Еще раз о виртуальном интерфейсе……………………………………………………………………………….. 314

Протокол транспортного уровня……………………………………………………………………………………. 321

Использование драйверов Windows……………………………………………………………………………….. 323

Обсуждение………………………………………………………………………………………………………………………. 324

Глава 5. Внутренние API ядра………………………………………………………………. 326

Механизмы управления памятью…………………………………………………………………………………………… 326

Карта памяти……………………………………………………………………………………………………………………. 326

Динамическое выделение памяти…………………………………………………………………………………… 330

Распределители памяти…………………………………………………………………………………………………… 334

Слябовый распределитель………………………………………………………………………………………………. 336

Страничное выделение……………………………………………………………………………………………………. 344

Выделение больших буферов…………………………………………………………………………………………. 344

Динамические структуры и управление памятью………………………………………………………… 345

Циклический двусвязный список…………………………………………………………………………… 345

Модуль, использующий динамические структуры……………………………………………… 349

Сложноструктурированные данные…………………………………………………………………….. 351

Еще об инициализации объектов ядра………………………………………………………………….. 351

Служба времени………………………………………………………………………………………………………………………. 352

Информация о времени в ядре…………………………………………………………………………………………. 352

Источник прерываний системного таймера…………………………………………………………. 355

Дополнительные источники информации о времени…………………………………………… 356

Три класса задач во временной области……………………………………………………………………….. 357

Измерения временных интервалов…………………………………………………………………………………. 358

Временные задержки……………………………………………………………………………………………………….. 365

Таймеры ядра…………………………………………………………………………………………………………………… 371

Таймеры высокого разрешения………………………………………………………………………………………. 372

Абсолютное время……………………………………………………………………………………………………………. 375

Часы реального времени (RTC)………………………………………………………………………………………. 376

Время и диспетчеризация в ядре…………………………………………………………………………………….. 381

Параллелизм и синхронизация………………………………………………………………………………………………. 382

Потоки ядра………………………………………………………………………………………………………………………. 385

Создание потока ядра…………………………………………………………………………………………….. 385

Свойства потока……………………………………………………………………………………………………… 387

Новый интерфейс потоков……………………………………………………………………………………… 389

Синхронизация завершения…………………………………………………………………………………… 394

Синхронизация в коде……………………………………………………………………………………………………… 401

Критические секции кода и защищаемые области данных………………………………… 401

Механизмы синхронизации…………………………………………………………………………………… 402

Условные переменные и ожидание завершения…………………………………………………… 402

Атомарные переменные и операции……………………………………………………………………… 405

Битовые атомарные операции………………………………………………………………………. 405

Арифметические атомарные операции………………………………………………………… 406

Локальные переменные процессора……………………………………………………………………… 407

Предыдущая модель………………………………………………………………………………………. 407

Новая модель………………………………………………………………………………………………….. 408

Блокировки………………………………………………………………………………………………………………. 409

Семафоры и мьютексы…………………………………………………………………………………… 410

Спин-блокировки……………………………………………………………………………………………. 415

Блокировки чтения/записи…………………………………………………………………………….. 417

Сериальные (последовательные) блокировки……………………………………………… 420

Мьютексы реального времени………………………………………………………………………. 422

Инверсия и наследование приоритетов………………………………………………………… 422

Множественное блокирование………………………………………………………………………………. 423

Уровень блокирования…………………………………………………………………………………………… 424

Предписание порядка выполнения……………………………………………………………………….. 430

Аннотация ветвлений……………………………………………………………………………………… 430

Барьеры…………………………………………………………………………………………………………… 431

Обработка прерываний…………………………………………………………………………………………………………… 432

Общая модель обработки прерывания…………………………………………………………………………… 433

Наблюдение прерываний в /proc……………………………………………………………………………………. 436

Регистрация обработчика прерывания………………………………………………………………………….. 439

Обработчик прерываний: верхняя половина………………………………………………………………… 442

Управление линиями прерывания…………………………………………………………………………. 444

Пример обработчика прерываний………………………………………………………………………… 444

Отложенная обработка: нижняя половина……………………………………………………………………. 446

Отложенные прерывания: softirq…………………………………………………………………………… 446

Тасклеты………………………………………………………………………………………………………………….. 450

Демон ksoftirqd………………………………………………………………………………………………………… 452

Очереди отложенных действий: workqueue…………………………………………………………. 452

Сравнение и примеры…………………………………………………………………………………………….. 455

Обсуждение………………………………………………………………………………………………………………………. 460

Глава 6. Периферийные устройства в модулях ядра…………………………….. 466

Поддержка шинных устройств в модуле……………………………………………………………………………….. 466

Анализ оборудования……………………………………………………………………………………………………………… 468

Подсистема udev………………………………………………………………………………………………………………. 473

Идентификация модуля……………………………………………………………………………………………………. 477

Ошибки идентификации модуля……………………………………………………………………………………… 479

Устройства на шине PCI…………………………………………………………………………………………………………. 480

Подключение к линии прерывания…………………………………………………………………………………. 491

Отображение памяти……………………………………………………………………………………………………….. 492

DMA…………………………………………………………………………………………………………………………………… 493

Устройства USB……………………………………………………………………………………………………………………….. 499

Некоторые технические детали……………………………………………………………………………………… 499

Поддержка в Linux…………………………………………………………………………………………………………… 501

Пара слов о USB-модемах………………………………………………………………………………………………. 503

Устройства USB в коде модуля………………………………………………………………………………………. 506

Многофункциональные USB-устройства………………………………………………………………………. 514

Устройства в пространстве пользователя…………………………………………………………………………….. 520

Аппаратные порты…………………………………………………………………………………………………………… 521

Особенности доступа………………………………………………………………………………………………………. 526

Проект libusb…………………………………………………………………………………………………………………….. 527

GPIO…………………………………………………………………………………………………………………………………… 536

Глава 7. Расширенные возможности программирования……………………… 543

Операции с файлами данных………………………………………………………………………………………………….. 544

Запуск новых процессов из ядра……………………………………………………………………………………………. 552

Сигналы UNIX………………………………………………………………………………………………………………………….. 554

Вокруг экспорта символов ядра…………………………………………………………………………………………….. 561

Неэкспортируемые символы ядра………………………………………………………………………………….. 564

Использование неэкспортируемых символов……………………………………………………………….. 572

Подмена системных вызовов…………………………………………………………………………………………… 576

Добавление новых системных вызовов………………………………………………………………………….. 584

Скрытый обработчик системного вызова……………………………………………………………………… 591

Динамическая загрузка модулей……………………………………………………………………………………………. 600

…из процесса пользователя…………………………………………………………………………………………….. 601

…из модуля ядра……………………………………………………………………………………………………………….. 609

Подключаемые плагины………………………………………………………………………………………………….. 613

Обсуждение………………………………………………………………………………………………………………………………. 623

Глава 8. Отладка в ядре……………………………………………………………………….. 628

Отладочная печать………………………………………………………………………………………………………………….. 629

Интерактивные отладчики……………………………………………………………………………………………………… 629

Отладка в виртуальной машине…………………………………………………………………………………………….. 632

Отдельные отладочные приемы и трюки………………………………………………………………………………. 635

Модуль, исполняемый как разовая задача……………………………………………………………………. 635

Тестирующий модуль………………………………………………………………………………………………………. 637

Интерфейсы пространства пользователя к модулю……………………………………………………… 640

Комплементарный отладочный модуль………………………………………………………………………… 642

Пишите в файлы протоколов…………………………………………………………………………………………… 645

Некоторые мелкие советы в завершение……………………………………………………………………….. 645

Чаще перезагружайте систему!……………………………………………………………………………… 645

Используйте естественные POSIX-тестеры………………………………………………………….. 646

Тестируйте чтение сериями……………………………………………………………………………………. 646

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

Приложение 1. Краткая справка по утилите make………………………………… 649

Приложение 2. Тесты распределителя памяти………………………………………. 652

Приложение 3. Четыре способа записи в защищенную страницу…………. 666

Описание проблемы………………………………………………………………………………………………………………… 666

Отключение страничной защиты: ассемблер……………………………………………………………………….. 667

Отключение страничной защиты: API ядра………………………………………………………………………….. 668

Снятие защиты со страницы памяти……………………………………………………………………………………… 670

Наложение отображения участка памяти…………………………………………………………………………….. 671

Тест выполнения………………………………………………………………………………………………………………………. 672

Обсуждение………………………………………………………………………………………………………………………………. 674

Позднее дополнение………………………………………………………………………………………………………………… 675

Источники информации……………………………………………………………………….. 677

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

Об авторе……………………………………………………………………………………………… 685

Цилюрик Олег Иванович

Цилюрик Олег Иванович — программист-разработчик с более чем 40-летним опытом, преподаватель, автор нескольких книг по Linux и Unix, высоко оцененных профессионалами и широкой читательской аудиторией.

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

Представляем 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“.

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

Новинка! Глубокое обучение и анализ данных. Практическое руководство

Глубокое обучение и анализ данных. Практическое руководство

Представляем новую книгу Дмитрия Малова: “Глубокое обучение и анализ данных. Практическое руководство“.

Книга о принципах глубокого обучения, описывающая построение и развитие нейронных сетей с нуля. На материале обширных практических наработок в сфере распознавания образов и обработки естественного языка продемонстрированы возможности популярной библиотеки Pytorch, а также Keras и Tensorflow. Особое внимание уделено разбору базовых алгоритмов, реализованных на языке Python, которые помогут самостоятельно освоить работу с нейронными сетями, написав собственное приложение для глубокого обучения на основе данных из браузера.

Для Python-разработчиков и специалистов Data Science

Как говорил Артур Кларк, «любая достаточно продвинутая технология неотличима от магии» («третий закон Кларка»). На наших глазах именно так начинает восприниматься глубокое обучение – технология, зародившаяся в 1959 году.

Эта книга поможет вам сделать первые шаги в изучении важнейших современных библиотек глубокого обучения – Keras, PyTorch и Tensorflow. В ней просто и последовательно раскрываются принципы обработки изображений и естественного языка при помощи базовых алгоритмов, реализованных на Python. В книгу включён проект по построению собственной системы глубокого обучения на основе данных из обычного браузера.

Книга сопровождается примерами кода по каждому из теоретических аспектов, чтобы у разработчиков была возможность применить полученные теоретические знания на практике для решения собственных задач. Весь код доступен в репозитории: https://github.com/Dimitrioum/ml-data-analysis-book.

 

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

Введение. 9

Чему обучит книга?. 10

Для кого эта книга?. 11

Глава 1. Основы машинного обучения. 13

Линейная алгебра. 13

Скаляр. 13

Вектор. 13

Матрица. 14

Тензор. 14

Норма. 17

Теория информации и теория вероятностей. 17

Случайная величина. 18

Распределение вероятности. 18

Условная вероятность. 19

Маргинальное распределение вероятности. 20

Цепное правило. 20

Математическое ожидание. 20

Дисперсия. 21

Ковариация. 21

Правило Байеса. 21

Наиболее часто используемые распределения вероятности. 22

Машинное обучение: основные понятия, подходы и типы задач. 22

Задача Т. 23

Опыт Е. 24

Активация нейронов в нейросетевых моделях. 26

Основы языка программирования Python. 26

Базовые типы. 27

Интерактивный режим работы Python. 27

Переменные в Python. 28

Числа: целые, вещественные. 28

Строки. 29

Списки. 31

Кортежи. 32

Словари. 33

Операторы сравнения. 34

Логические операторы. 34

Операторы ветвления. 35

Циклы. 36

Работа со строками. 37

Срезы строк. 38

Функции. 38

Сценарный режим программирования. 40

Функциональное программирование. 41

Основы объектно-ориентированного программирования. 49

Полезные приемы. 51

Основы разработки программного обеспечения. 53

Глава 2. Основные алгоритмы машинного обучения. 55

Предобработка данных. 55

Алгоритмы снижения размерности данных. 58

Линейные методы. 59

Нелинейные методы. 66

Линейная регрессия. 76

Логистическая регрессия. 77

Дерево решений. 78

Метод опорных векторов. 80

Наивный байесовский классификатор. 81

Алгоритм k ближайших соседей. 83

Алгоритм k средних. 84

Случайный лес. 86

Алгоритмы градиентного бустинга. 88

Глава 3. Основы глубокого обучения. 91

Алгоритм обратного распространения ошибки. 91

Перцептрон. 92

Цепь Маркова. 94

Машина Больцмана. 94

Сеть Хопфилда. 96

Глубокая сеть доверия. 97

Глубокая сверточная сеть. 97

Капсульные нейронные сети. 99

Нейронная сеть с блоком внимания (трансформеры) 101

Рекуррентные нейронные сети. 103

Автокодировщики. 104

Генеративно-состязательные сети. 105

Практические примеры. 106

Система проактивной локализации пользователей киберфизической системы. 109

Концепция системы проактивной локализации. 116

Глава 4. Основы data science. 119

Методология CRISP-DM.. 119

Бизнес-анализ. 120

Анализ данных. 121

Подготовка данных. 122

Моделирование. 124

Оценка результата. 125

Внедрение. 126

Роли специалистов в команде ML-разработки. 127

Современные тренды data science. 129

Борьба с DeepFake-контентом. 129

Интерес бизнеса к полноценным (end-to-end) решениям на основе
машинного обучения. 130

Low-code- и no-code-платформы для ML-разработки. 130

Методы оптимизации (квантования) обученной нейросетевой модели. 130

MLOps 131

Full-stack deep learning-разработчик. 131

Обучение без учителя. 132

Few-shot-, one-shot-, zero-shot-обучение. 132

Обзор современных библиотек для ML-разработки. 133

TensorFlow.. 134

CNTK.. 135

PyTorch. 135

Keras 136

Theano. 136

Torch. 137

Caffe. 137

MxNet 138

Chainer 138

Глава 5. Задачи глубокого обучения. 141

Аугментация данных. 141

Методы аугментации данных. 141

Глубокое обучение в задачах компьютерного зрения. 142

Установка OpenCV.. 142

Загрузка и отображение изображений. 143

Рисование на изображении. 144

Задача оптического распознавания символов. 144

Обработка естественного языка. 148

Методы и инструменты обработки текста. 148

Статистические методы. 148

Текстовая классификация. 149

Извлечение текста. 150

Обработка аудио. 151

Задача идентификации спикера. 151

Как мы представляем звук в цифровом виде?. 152

Подготовка аудиоданных для модели глубокого обучения. 153

Спектр. 153

Аудиомодели глубокого обучения. 154

Какие проблемы решает глубокое обучение аудио?. 155

Классификация аудио. 155

Аудиоразделение и сегментация. 155

Классификация музыкальных жанров. 156

Создание и транскрипция музыки. 156

Распознавание голоса. 156

Преобразование речи в текст и текста в речь. 157

Обработка видеопоследовательности. 157

Декодирование и кодирование. 158

Интерполяция с отслеживанием. 159

Глава 6. Знакомство с TensorFlow.. 161

Начало работы с TensorFlow.. 161

Определение и запуск нейронной сети. 163

Определение нейронной сети. 163

Запуск нейронной сети. 164

Классификация изображений с помощью TensorFlow.. 165

Построение модели для трансферного обучения. 167

Обучение модели. 167

Тонкая настройка модели (fine tuning) 168

Обработка текста с TensorFlow.. 168

Представление текста в виде тензоров. 169

Векторизация текста. 171

Ограничение размера словарного запаса. 171

Текстовое представление набора слов через мешок слов. 171

Обучение классификатора мешка слов. 172

Обучение классификатора как одной сети. 173

Биграммы, триграммы и n-граммы. 174

Автоматический расчет векторов мешка слов. 175

Частота слова и обратная частота документа. 175

Сжатые векторные характеристики. 177

Рекуррентные нейронные сети для обработки текста. 184

Пересмотр последовательностей переменных. 188

Классификация аудио с TensorFlow.. 189

Импортирование набора данных речевых мини-команд. 189

Преобразование сигналов в спектрограммы. 192

Построение и обучение модели. 193

Оценка точности модели. 195

Глава 7. Знакомство с Keras 197

Функции. 197

Преимущества. 197

Установка пакетов. 198

Установка Keras с использованием Python. 200

TensorFlow.. 200

Theano. 201

Доступные модули. 201

Модуль Backend. 202

Модуль Utils 205

Основная концепция слоев в Keras 206

Форма ввода. 210

Модуль Initializers 210

Модуль Constraints 215

Модуль Regularizers 216

Функции активации. 217

linear 217

elu. 218

selu. 218

relu. 219

softmax. 220

softplus 220

softsign. 221

tanh. 221

sigmoid. 222

hard_sigmoid. 222

exponential 223

Классификация изображений с Keras 223

Трансферное обучение. 227

Keras для классификации аудио. 229

Предварительная настройка. 229

Построение кривых амплитуды. 230

Работа с tf.Keras 231

Классификация изображений с использованием TensorFlow 2.x. 231

Импортирование набора данных. 232

Предварительная обработка данных. 232

Компиляция и обучение модели глубокого обучения. 233

Классификация текста с использованием TensorFlow и Keras 234

Предварительная подготовка. 234

Импорт текста. 234

Очистка и предварительная обработка текста. 235

Заполнение текстовых последовательностей. 236

Создание тестовой выборки. 236

Построение и компиляция модели. 236

Обучение модели глубокого обучения. 236

Импорт тестовых данных. 237

Прогноз по набору тестов. 237

Глава 8. Знакомство с PyTorch. 239

Основы PyTorch. 239

Загрузка данных, устройств и CUDA.. 239

Создание параметров. 239

Пакет Autograd. 240

Процедура оптимизации. 240

Функция ошибки. 241

Модель. 241

Набор данных. 243

Метрика качества. 245

Классификация аудио с PyTorch. 245

Тензоры. 247

Классификация изображений с PyTorch. 247

PyTorch для компьютерного зрения. 247

Загрузка данных. 248

Обучение модели. 249

Классификация текста с PyTorch. 251

Подготовка конвейеров обработки данных. 252

Создание пакета данных и итератора. 252

Определение модели. 253

Глава 9. Разработка веб-приложения для демонстрации моделей
глубокого обучения. 259

Разработка веб-приложения на Django. 259

Пару слов о Heroku. 261

Заключение. 267

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

Малов Дмитрий

Малов Дмитрий Александрович, с 2017 по 2021 – научный сотрудник института Санкт-Петербургского Федерального исследовательского центра Российской академии наук, лаборатория больших данных в социокиберфизических системах, автор более 20 научных статей и монографии. Сфера профессиональных интересов – распознавание образов, синтетические данные. Является генеральным директором стартапа «Квант», занимающегося прикладными исследованиями в сфере квантовых вычислений.

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

Новинка: “Такса Клякса и волшебная флейта”

Такса Клякса и волшебная флейта

Такса Клякса — весёлая, сообразительная и ужасно любопытная. Из-за своего любопытства она попадает в дом волшебника Иван Иваныча и становится его помощницей. Кляксе поручается выснить, что задумал злой колдун Вермишайнен и зачем ему так нужна волшебная флейта. Ушастый детектив начинает расследование!

Павел Линицкий — известный петербургский автор и хозяин очаровательной таксы, которая и вдохновила писателя на эту смешную детективную историю.

В одном зелёном городке жила-была такса. Она была лохматой и совершенно чёрной, поэтому её так и прозвали — Клякса.  Клякса была ужасно, просто ужасно любопытной, именно поэтому она попадала в разные истории. Однажды она попала в подарочную коробку  и очутилась в доме волшебника Иван Иваныча.  Добрый волшебник взял Кляксу себе в помощники, и для нее сразу же нашлось важное дело — выяснить, что  задумал колдун Вермишайнен и зачем ему так нужна волшебная флейта. Ушастый детектив с любопытным носом и волшебными возможностями начинает расследование!

Павел Линицкий — автор семейного бестселлера «Мой папа — пират» и хозяин очаровательной таксы, которую зовут Мася. Она-то и вдохновила писателя на эту смешную детективную историю.

Автор

Павел Линицкий — писатель и переводчик из Петербурга, пишет для детей и для взрослых, у которых внутри живёт ребёнок. Не боится экспериментов и верит, что юмор помогает говорить даже на самые сложные темы, а серьёзное лицо — ещё не признак большого ума.

Художник

Екатерина Варжунтович

Екатерина Варжунтович — художник из Мурманска, где из окна можно потрогать северное сияние, а детей в школу возят ручные северные олени, и приходится откапывать дверь подъезда от снега, чтобы попасть домой. Рисовать любит с детства. Сказки  северного народа Саамов научили ее верить в подземных человечков из тундры. Сказки Андерсена, Туве Янссон и Астрид Линдгрен вдохновляли рисовать ночами, под одеялом с фонариком. После окончания художественного училища им. В.В. Верещагина много лет занималась дизайном упаковки, работала в рекламной сфере, рисовала декорации для театральных спектаклей.  В один прекрасный день проснулась с мыслью о том, что делает ее счастливой только иллюстрирование книг — то самое занятие, к которому педагоги училища относились с пренебрежительным снисхождением: «Это же не станковая живопись, это несерьёзно, баловство!» Но Екатерина верит, что книги делают нашу жизнь лучше, сказки учат наших детей хорошему, а через иллюстрации можно поделиться своим теплом и вдохновить кого-то еще на творчество.