Оглавление:

Автономный автомобиль: 7 шагов (с изображениями)
Автономный автомобиль: 7 шагов (с изображениями)

Видео: Автономный автомобиль: 7 шагов (с изображениями)

Видео: Автономный автомобиль: 7 шагов (с изображениями)
Видео: Замена для Крузака! Новый кроссовер КАМАЗ «ФАНТОМ» - 7 мест, полный привод и турбо-мотор КАМАЗ-43118 2024, Ноябрь
Anonim
Автономный автомобиль
Автономный автомобиль
Автономный автомобиль
Автономный автомобиль

Этот проект представляет собой автономно перемещающегося робота, который пытается достичь своей цели, избегая препятствий на своем пути. Робот будет оснащен датчиком LiDAR, который будет использоваться для обнаружения объектов в его окрестностях. По мере обнаружения объектов и движения робота карта в реальном времени обновляется. Карта будет использоваться для сохранения местоположения обнаруженных препятствий. Таким образом, робот не будет повторно пытаться пройти неудачный путь к цели. Вместо этого он будет пробовать пути, на которых либо нет препятствий, либо пути, которые еще не были проверены на наличие препятствий.

Робот будет двигаться с помощью двух колес с приводом от двигателя постоянного тока и двух колес. Моторы будут прикреплены ко дну круглой платформы. Двигатели будут управляться двумя приводами двигателей. Драйверы двигателей будут получать команды ШИМ от процессора Zynq. Все энкодеры на каждом моторе используются для отслеживания положения и ориентации транспортных средств. Вся система будет питаться от LiPo батареи.

Шаг 1: Сборка автомобиля

Сборка автомобиля
Сборка автомобиля
Сборка автомобиля
Сборка автомобиля
Сборка автомобиля
Сборка автомобиля
Сборка автомобиля
Сборка автомобиля

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

В качестве двигателя был выбран двигатель Port Escap 12 В постоянного тока со встроенными энкодерами. Этот мотор можно купить на ebay по очень разумной цене (см. Спецификацию материалов). Чтобы найти двигатель, выполните поиск по ключевым словам «12V Escap 16 Двигатель постоянного тока без сердечника с редуктором и кодировщиками». Обычно есть изрядное количество продавцов, из которых можно выбрать. Технические характеристики и распиновка двигателей показаны на схемах ниже.

Сборка робота началась с CAD-модели шасси. На представленной ниже модели показан вид сверху двухмерного профиля, предназначенного для шасси.

Предлагается, чтобы шасси было спроектировано как 2D-профиль, чтобы его можно было легко изготовить. Мы вырезаем из листа алюминия 12 "X12" форму шасси с помощью водоструйного резака. Платформу шасси также можно было разрезать ленточной пилой.

Шаг 2: Установка двигателей

Монтаж двигателей
Монтаж двигателей
Монтаж двигателей
Монтаж двигателей

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

Отверстия M2 двигателя и другая поверхность могут быть прикреплены к платформе болтами. В креплении двигателя необходимо просверлить отверстия, чтобы можно было использовать винты для крепления двигателя к креплению двигателя и крепления двигателя на платформе. Крепление двигателя показано на рисунке выше.

Затем концентратор двигателя Pololu (см. Спецификацию материалов) помещается на вал двигателя и затягивается с помощью прилагаемого установочного винта и шестигранного ключа. Схема расположения отверстий ступицы двигателя Pololu не соответствует схеме расположения отверстий на колесе VEX, поэтому необходимо изготовить специальную промежуточную муфту. Предлагается использовать алюминиевый лом из листового металла, из которого изготовлена платформа шасси, для изготовления муфты. Схема расположения отверстий и размеры этой пары показаны на рисунке ниже. Внешний диаметр и форма (не обязательно круг) нестандартной алюминиевой муфты не имеют значения, если все отверстия подходят к детали.

Шаг 3: Создание блочного дизайна Vivado

Создание блочного дизайна Vivado
Создание блочного дизайна Vivado
Создание блочного дизайна Vivado
Создание блочного дизайна Vivado

- Начните с создания нового проекта Vivado и выберите Zybo Zynq 7000 Z010 в качестве целевого устройства.

- Затем нажмите «Создать новый дизайн блока» и добавьте Zynq IP. Дважды щелкните IP-адрес Zynq и импортируйте предоставленные настройки XPS для Zynq. Затем включите UART0 с MIO 10..11 на вкладке конфигурации MIO, а также убедитесь, что таймер 0 и сторожевой таймер включены.

- Добавьте два AXI GPIOS в конструкцию блока. Для GPIO 0 включите двойной канал и установите оба для всех выходов. Установите ширину GPIO для канала 1 до 4 бит и для канала 2 до 12 бит, эти каналы будут использоваться для установки направления двигателя и отправки количества тиков, измеренных кодировщиком, на процессор. Для GPIO 1 установите только один канал для всех входов с шириной канала 4 бита. Это будет использоваться для получения данных от кодировщиков. Сделайте все порты GPIO внешними.

- Затем добавьте два таймера AXI. Сделайте порты pwm0 на обоих таймерах внешними. Это будут ШИМ, которые контролируют скорость вращения двигателей.

- Напоследок запустите автоматизацию блоков и автоматизацию соединений. Убедитесь, что конструкция блока у вас соответствует предоставленному.

Шаг 4: общение с лидаром

Этот LiDAR использует протокол SCIP 2.0 для связи через UART, прикрепленный файл описывает весь протокол.

Для связи с LiDAR мы будем использовать UART0. LiDAR возвращает 682 точки данных, каждая из которых представляет расстояние до объекта под этим углом. LiDAR сканирует против часовой стрелки от -30 градусов до 210 градусов с шагом 0,351 градуса.

- Вся связь с LiDAR осуществляется с помощью символов ASCI, см. Используемый формат в протоколе SCIP. Начнем с отправки команды QT для включения LiDAR. Затем мы несколько раз отправляем команду GS, запрашивая 18 точек данных одновременно в ft в 64-байтовом FIFO UARTS. Данные, возвращаемые LiDAR, затем анализируются и сохраняются в глобальном массиве SCANdata.

- Каждая сохраненная точка данных представляет собой 2 байта закодированных данных. Передача этих данных в декодер вернет расстояние в миллиметрах.

В файле main_av.c вы найдете следующие функции для связи с LiDAR

sendLIDARcmd (команда)

- Это отправит входную строку в LiDAR через UART0

recvLIDARdata ()

- Он получит данные после того, как команда будет отправлена в LiDAR, и сохранит данные в RECBuffer

requestDistanceData ()

- Эта функция отправит серию команд для получения всех 682 точек данных. После получения каждого набора из 18 точек данных вызывается parseLIDARinput () для анализа данных и постепенного сохранения точек данных в SCANdata.

Шаг 5: заполнение сетки препятствиями

Заполнение сетки препятствиями
Заполнение сетки препятствиями
Заполнение сетки препятствиями
Заполнение сетки препятствиями

Сохраняемая GRID представляет собой двумерный массив, в котором каждое значение индекса представляет местоположение. Данные, хранящиеся в каждом индексе, имеют значение 0 или 1, нет препятствий и препятствий соответственно. Квадратное расстояние в миллиметрах, которое представляет каждый индекс, можно изменить с помощью определения GRID_SCALE в файле vehicle.h. Размер 2D-массива также можно изменять, чтобы позволить транспортному средству сканировать большую область, изменяя определение GRID_SIZE.

После сканирования нового набора данных о расстоянии из LiDAR вызывается updateGrid (). Это будет перебирать каждую точку данных, хранящуюся в массиве SCANdata, чтобы определить, какие индексы в сетке имеют препятствия. Используя текущую ориентацию автомобиля, мы можем определить угол, соответствующий каждой точке данных. Чтобы определить, где находится препятствие, вы просто умножаете соответствующее расстояние на cos / sin угла. Добавление этих двух значений к текущему положению x и y транспортного средства вернет индекс в сетке препятствия. Разделение расстояния, возвращаемого этой операцией, на GRID_SCALE позволит нам варьировать, насколько велик квадрат расстояния каждого индекса.

На рисунках выше показаны текущее окружение транспортных средств и итоговая сетка.

Шаг 6: общение с двигателями

Для связи с двигателями мы начинаем с инициализации GPIO, чтобы контролировать направление вращения двигателя. Затем запись непосредственно в базовый адрес ШИМ в таймере AXI позволяет нам устанавливать такие параметры, как период и рабочий цикл, которые напрямую контролируют скорость вращения двигателя.

Шаг 7: планирование пути

Будет реализовано в ближайшее время.

Используя ранее описанные функциональные возможности сети и двигателя, очень легко реализовать такие алгоритмы, как A *. По мере движения транспортного средства оно будет продолжать сканировать окружающую территорию и определять, действителен ли путь, по которому он движется.

Рекомендуемые: