Код для поиска

Урок 7 из 10: Отслеживание линии, обнаружение обрыва. Калибровка датчика оттенков серого. Автомобиль на Raspberry Pi Pico

Этот урок является частью: Умный автомобиль Raspberry Pi Pico 4WD

Урок 7 из 10: Отслеживание линии, обнаружение обрыва. Калибровка датчика оттенков серого. Автомобиль на Raspberry Pi Pico

В этом уроке из курса по умному автомобилю на Raspberry Pi Pico мы исследуем увлекательный мир автономной навигации, объединяя сервопривод, ультразвуковой датчик и управление двигателями, чтобы автомобиль мог обнаруживать и объезжать препятствия. Этот проект превращает базовый четырехколесный комплект в интеллектуального робота, способного ориентироваться в динамичной среде, что делает его отличной основой для изучения слияния данных датчиков и алгоритмов реактивного управления. Практическая ценность этого проекта выходит далеко за пределы класса, предлагая платформу для реальных приложений, таких как создание робота-пылесоса, который объезжает мебель, создание охранного патрульного робота, который картографирует безопасные зоны, или разработка прототипа автономного транспортного средства для доставки, способного передвигаться в переполненных пространствах.

Суть этого проекта заключается в использовании сервопривода для вращения ультразвукового датчика, создавая простую радиолокационную систему. Сканируя окружающую среду от 0 до 180 градусов, автомобиль может измерять расстояния до препятствий и определять наиболее свободный путь вперед. Этот урок предоставляет пошаговое руководство по реализации логики, которая интерпретирует данные датчика для принятия интеллектуальных решений о движении.

Оборудование/Компоненты

Этот проект основан на комплекте четырехколесного автомобиля SunFounder Raspberry Pi Pico. Хотя точная модель может отличаться, необходимы следующие основные компоненты:

  • Микроконтроллер Raspberry Pi Pico
  • Комплект шасси умного автомобиля SunFounder 4WD (или аналогичный)
  • Ультразвуковой датчик расстояния (например, HC-SR04)
  • Сервопривод (для вращения ультразвукового датчика)
  • Плата драйвера двигателей (встроена в комплект автомобиля)
  • Источник питания (батареи)

Руководство по подключению

Подключение для этого проекта обычно предварительно настроено на плате расширения комплекта SunFounder. Контакты триггера и эха ультразвукового датчика, а также сигнальный контакт сервопривода подключены к определенным GPIO-контактам Raspberry Pi Pico. Драйвер двигателей также подключен к Pico для управления направлением и скоростью четырех двигателей.

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

Объяснение кода

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

Вот основные настраиваемые пользователем параметры, которые вы найдете в коде:

  • Опорное расстояние радара: Это пороговое расстояние (например, 20 см), которое определяет, считается ли препятствие "опасным". Если датчик считывает расстояние меньше этого значения, автомобиль начнет маневр объезда.
  • Угол шага: Это приращение (например, 10 градусов), на которое вращается сервопривод при сканировании окружающей среды. Меньший угол шага обеспечивает более детальное сканирование, но занимает больше времени.
  • Скорость движения вперед: Эта переменная (например, 30) задает уровень мощности для двигателей, когда автомобиль движется вперед.
  • Скорость поворота: Эта переменная (например, 50) задает уровень мощности для двигателей при повороте автомобиля, который обычно выше скорости движения вперед, чтобы обеспечить решительный поворот.
  • Угол сканирования вперед: Это значение (например, 50 градусов) задает диапазон углов, которые сервопривод будет сканировать при движении автомобиля вперед. Более узкое сканирование быстрее и достаточно для обнаружения препятствий непосредственно на пути.

Чтобы понять, как использовать эти переменные, представьте, что вы хотите, чтобы автомобиль был более осторожным. Вы можете увеличить RADAR_REFERENCE до 25 см, что позволит обнаруживать и объезжать препятствия с большего расстояния. И наоборот, для более быстрого и агрессивного автомобиля вы можете уменьшить это значение до 15 см.

Основная логика использует функцию get_direction() для анализа данных датчика. Эта функция преобразует массив показаний расстояния в строку из '1' (свободное пространство) и '0' (препятствие). Затем она разделяет эту строку по нулям, чтобы найти самый широкий непрерывный путь. Основываясь на положении этого самого широкого пути, функция возвращает направление: 'left', 'right' или 'forward'. Затем основной цикл выполняет соответствующий маневр.

Живой проект/Демонстрация

(в видео на 02:47) Инструктор начинает с демонстрации функции объезда препятствий. Автомобиль использует сервопривод для вращения ультразвукового датчика, действуя как радар. По мере движения автомобиль сканирует окружающую среду, чтобы найти свободный путь.

(в видео на 03:34) Код запускается, и автомобиль тестируется на открытой площадке. Инструктор объясняет структуру кода, показывая, как функция get_distance() из модуля sonar используется для измерения расстояний. Показания датчика отображаются в оболочке, демонстрируя его точность и ограничения.

(в видео на 07:45) Затем инструктор открывает пример "obstacle_avoid" и проходит по его блок-схеме. Это визуальное пособие объясняет процесс принятия решений: автомобиль сканирует, проверяет на опасность, и если путь заблокирован, определяет лучшее направление для поворота на основе самого широкого открытого пути.

(в видео на 16:02) Проводится живой тест. Автомобиль успешно обнаруживает препятствие (коробку) и объезжает его, поворачивая влево, чтобы найти свободный путь. Инструктор объясняет данные в реальном времени, выводимые в оболочку, показывая '0' для препятствия и '1' для свободного пространства.

(на видео на 22:53) Финальная, более сложная демонстрация проводится с несколькими препятствиями. Автомобиль проходит трассу, принимая решения повернуть влево или вправо, чтобы избежать столкновений и найти свободный путь, что демонстрирует эффективность алгоритма в более сложной среде.

Главы

  • [00:00] Введение в урок
  • [01:31] Обзор курса и комплекта
  • [02:47] Демонстрация функции объезда препятствий
  • [03:34] Тестирование ультразвукового датчика
  • [07:45] Понимание алгоритма объезда препятствий
  • [12:49] Разбор кода: основной цикл и логика
  • [16:02] Живое тестирование и анализ данных
  • [22:53] Демонстрация сложной трассы с препятствиями
Нет кода.

Ресурсы и ссылки

Ресурсов пока нет.

Файлы📁

Нет доступных файлов.