Оглавление:

Робот продвинутого следования по линии: 22 шага (с изображениями)
Робот продвинутого следования по линии: 22 шага (с изображениями)

Видео: Робот продвинутого следования по линии: 22 шага (с изображениями)

Видео: Робот продвинутого следования по линии: 22 шага (с изображениями)
Видео: 📦 DIY KIT "Робот ездящий по линии" с АлиЭкспресс - Boston Dynamics отдыхает! 😆 2024, Июль
Anonim
Image
Image
Прототипирование - Перфорированная плита
Прототипирование - Перфорированная плита

Это продвинутый робот, следующий за линией, основанный на линейном датчике Teensy 3.6 и QTRX, который я построил и над которым работал в течение довольно долгого времени. По сравнению с моим предыдущим роботом-следователем, есть несколько серьезных улучшений в конструкции и производительности. Скорость и реакция робота улучшились. Общая конструкция компактная и легкая. Компоненты расположены близко к оси колеса, чтобы минимизировать угловой момент. Высокомощные микрометаллические мотор-редукторы обеспечивают соответствующий крутящий момент, а силиконовые колеса с алюминиевыми ступицами обеспечивают столь необходимое тяговое усилие на высоких скоростях. Защитный щиток и датчики колес позволяют роботу определять свое положение и ориентацию. Благодаря установленному на плате Teensyview вся необходимая информация может быть визуализирована, а важные параметры программы могут быть обновлены с помощью кнопок.

Чтобы начать сборку этого робота, вам понадобятся следующие материалы (а также много времени и терпения в вашем распоряжении).

Запасы

Электроника

  • Совет по развитию Teensy 3.6
  • Защитный щиток с датчиками движения
  • Sparkfun TeensyView
  • Матрица датчиков отражения Pololu QTRX-MD-16A
  • Двухсторонний прототип печатной платы 15x20 см
  • Повышающий / Понижающий регулятор напряжения Pololu S9V11F3S5
  • Регулируемый повышающий стабилизатор напряжения 4-5-20В Pololu U3V70A
  • Мотор-редуктор MP12 6V 1580 об / мин с энкодером (x2)
  • DRV8833 Держатель драйверов с двумя двигателями (x2)
  • Литий-полимерный аккумулятор 3,7 В, 750 мАч
  • Переключатель ВКЛ / ВЫКЛ
  • Электролитический конденсатор 470uF
  • Электролитический конденсатор 1000 мкФ (x2)
  • Керамический конденсатор 0,1 мкФ (x5)
  • Кнопки (x3)
  • Зеленый светодиод 10 мм (2 шт.)

Аппаратное обеспечение

  • Силиконовое колесо Atom 37x34 мм (x2)
  • Колесо для шариков Pololu с металлическим шариком 3/8”
  • Крепление двигателя N20 (x2)
  • Болт и гайки

Кабели и соединители

  • Гибкие провода 24AWG
  • 24-контактный переходник FFC на DIP и кабель FFC (тип A, длина 150 мм)
  • Заголовок с круглой внутренней резьбой
  • Круглый разъем с внутренней резьбой, длинный вывод
  • Угловой двухрядный женский жаток
  • Прямоугольный двухрядный мужской жаток
  • Заголовок штыря мужской
  • Заголовок иглы мужской

Инструменты

  • Мультиметр
  • Паяльник
  • Припой провод
  • Инструмент для зачистки проводов
  • Кусачки

Шаг 1. Обзор системы

Как и в случае с моей предыдущей конструкцией самобалансирующегося робота, этот робот представляет собой набор коммутационных плат, установленных на перфорированной плате, которая также служит конструкции.

Основные системы робота описаны ниже.

Микроконтроллер: плата разработки Teensy 3.6 с 32-битным процессором ARM Cortex-M4 с тактовой частотой 180 МГц.

Линейный датчик: 16-канальный линейный линейный датчик QTRX-MD-16A от Pololu со средней плотностью расположения (шаг датчика 8 мм).

Привод: 6 В, 1580 об / мин, высокомощные микрометаллические мотор-редукторы с магнитным датчиком положения колеса и силиконовыми колесами, установленными на алюминиевых ступицах.

Одометрия: пары энкодеров с магнитным колесом для оценки координат и пройденного расстояния.

Датчик ориентации: защитный экран с датчиками движения для оценки положения и направления робота.

Источник питания: липо-аккумулятор 3,7 В, 750 мАч в качестве источника питания. Повышающий / понижающий стабилизатор 3,3 В питает микроконтроллер, датчики и устройство отображения. Регулируемый повышающий регулятор приводит в действие два двигателя.

Пользовательский интерфейс: Teensyview для отображения информации. Разъем с тремя кнопками для приема пользовательского ввода. Два числа зеленых светодиода диаметром 10 мм для индикации состояния во время работы.

Шаг 2: приступим к созданию прототипа

Image
Image

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

Припаяв разъемы к коммутационным платам, установите Teensyview и коммутационную панель поверх Teensy.

Шаг 3: прототипирование - перфорированная плита

Прототипирование - Перфорированная плита
Прототипирование - Перфорированная плита

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

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

Шаг 4: прототипирование - опорный щит

Прототипирование - Prop Shield
Прототипирование - Prop Shield
Прототипирование - Prop Shield
Прототипирование - Prop Shield
Прототипирование - Prop Shield
Прототипирование - Prop Shield
Прототипирование - Prop Shield
Прототипирование - Prop Shield

Сначала мы припаяем соединения к опорному экрану. Поскольку мы используем только датчики движения щита опоры, нам нужно подключить только выводы SCL, SDA и IRQ, кроме выводов 3V и заземления щита опоры.

После завершения подключения вставьте Teensy и опорный экран и откалибруйте датчики движения, выполнив шаги, указанные здесь.

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

Прототипирование - мощность и земля
Прототипирование - мощность и земля

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

  • Выходное напряжение Li-po (обычно от 3 В до 4,2 В)
  • Выходное напряжение повышающего / понижающего регулятора (3,3 В)
  • Регулируемое выходное напряжение повышающего регулятора (установлено на 6 В)

Шаг 6: прототипирование - автодвигатель-носитель

Прототипирование - Автодвигатель Carrier
Прототипирование - Автодвигатель Carrier
Прототипирование - Автодвигатель Carrier
Прототипирование - Автодвигатель Carrier
Прототипирование - Автодвигатель Carrier
Прототипирование - Автодвигатель Carrier

Плата-носитель с двумя драйверами двигателя DRV8833 может обеспечивать постоянный ток 1,2 А и пиковый ток 2 А на канал. Мы подключим два канала параллельно, чтобы управлять одним двигателем. Припаяйте соединения, выполнив следующие действия.

  • Параллельно подключите два входа и два выхода держателя привода двигателя, как показано на рисунке.
  • Подключите провода управления входом к приводу мотора.
  • Подключите электролитический конденсатор емкостью 1000 мкФ и керамический конденсатор емкостью 0,1 мкФ между выводами Vin и Gnd двух несущих плат.
  • Подключите керамический конденсатор 0,1 мкФ к выходным клеммам драйвера двигателя.

Шаг 7: Прототипирование - Заголовок массива линейных датчиков

Прототипирование - Заголовок массива линейных датчиков
Прототипирование - Заголовок массива линейных датчиков
Прототипирование - Заголовок массива линейных датчиков
Прототипирование - Заголовок массива линейных датчиков
Прототипирование - Заголовок массива линейных датчиков
Прототипирование - Заголовок массива линейных датчиков
Прототипирование - Заголовок массива линейных датчиков
Прототипирование - Заголовок массива линейных датчиков

Teensy 3.6 имеет два АЦП - ADC0 и ADC1, которые мультиплексированы на 25 доступных контактов. Мы можем получить доступ к любым двум выводам двух АЦП одновременно. Мы подключим по восемь линейных датчиков к ADC0 и ADC1. Датчики четного числа будут подключены к ADC1, а датчики нечетного числа - к ADC0. Припаяйте соединения, выполнив следующие действия. Позже мы подключим линейный датчик с помощью адаптера FFC к DIP и кабеля.

  • Подключите все четные контакты датчика (16, 14, 12, 10, 8, 6, 4, 2), как показано на рисунке. Пропустите провод для подключения контакта 12 датчика через обратную сторону перфокартона.
  • Подключите контакт управления эмиттером (EVEN) к контакту 30 Teensy.
  • Подключите все нечетные контакты датчика (15, 13, 11, 9, 7, 5, 3, 1), как показано на рисунке.
  • Подключите электролитический конденсатор емкостью 470 мкФ между Vcc и Gnd.

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

Шаг 8: прототипирование - микромотор-редуктор и кодировщик

Прототипирование - микромотор-редуктор и энкодер
Прототипирование - микромотор-редуктор и энкодер
  • Закрепите микрометаллический редукторный двигатель с энкодером, используя крепления двигателя N20.
  • Подключите провода двигателя и энкодера, как показано на рисунке.
  • Левый энкодер - крошечные пины 4 и 0
  • Правый энкодер - крошечные контакты 9 и 27

Шаг 9: прототипирование - светодиоды

Прототипирование - светодиоды
Прототипирование - светодиоды
Прототипирование - светодиоды
Прототипирование - светодиоды

Два светодиода показывают, обнаружил робот поворот или нет. Я использовал резистор на 470 Ом для подключения светодиодов к Teensy.

  • Левый светодиодный анод к выводу 6 Teensy
  • Правый светодиодный анод к выводу 8 Teensy

Шаг 10: прототипирование - прорывы

Image
Image
Прототипирование - Прорывы
Прототипирование - Прорывы

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

Вставьте все коммутационные платы в соответствующие гнезда. Чтобы вставить переходник FFC-DIP и закрепить линейный датчик QTRX-MD-16A, см. Видео.

Шаг 11: Обзор программных библиотек

Обзор программных библиотек
Обзор программных библиотек

Мы запрограммируем Teensy в Arduino IDE. Прежде чем мы начнем, нам понадобятся некоторые библиотеки. Мы будем использовать следующие библиотеки:

  • Кодировщик
  • Teensyview
  • EEPROM
  • АЦП
  • NXPMotionSense

И некоторые из них были написаны специально для этого робота,

  • Нажать кнопку
  • LineSensor
  • TeensyviewMenu
  • Двигатели

Библиотеки, относящиеся к этому роботу, подробно обсуждаются и доступны для загрузки на следующих этапах.

Шаг 12: Объяснение библиотек - PushButton

Эта библиотека предназначена для взаимодействия кнопочной коммутационной панели с Teensy. Используемые функции:

PushButton (int leftButtonPin, int centreButtonPin, int rightButtonPin);

Вызов этого конструктора путем создания объекта настраивает контакты кнопки в режим INPUT_PULLUP.

int8_t waitForButtonPress (недействительно);

Эта функция ожидает нажатия и отпускания кнопки и возвращает код клавиши.

int8_t getSingleButtonPress (void);

Эта функция проверяет, нажата и отпущена ли кнопка. Если да, возвращает код клавиши, иначе возвращает ноль.

Шаг 13: Объяснение библиотек - датчик линии

LineSensor - это библиотека для взаимодействия массива линейных датчиков с Teensy. Ниже приведены используемые функции.

LineSensor (недействительно);

Вызов этого конструктора путем создания объекта инициализирует ADC0 и ADC1, считывает пороговые, минимальные и максимальные значения из EEPROM и настраивает контакты датчика в режим ввода, а вывод управления эмиттером - в режим вывода.

void calibrate (uint8_t CalibrateMode);

Эта функция калибрует линейные датчики. Калибровочный режим может иметь значение MIN_MAX или MEDIAN_FILTER. Эта функция подробно объясняется на более позднем этапе.

void getSensorsAnalog (uint16_t * sensorValue, режим uint8_t);

Считывает массив датчиков в любом из трех режимов, переданных в качестве аргумента. Режим - это состояние эмиттеров и может быть ВКЛ, ВЫКЛ или ПЕРЕКЛЮЧЕНИЕ. Режим TOGGLE компенсирует показания датчика отражательной способности из-за окружающего света. Датчики, подключенные к ADC0 и ADC1, считываются синхронно.

int getLinePosition (uint16_t * sensorValue);

Вычисляет положение матрицы датчиков над линией методом средневзвешенного значения.

uint16_t getSensorsBinary (uint16_t * sensorValue);

Возвращает 16-битное представление состояния датчиков. Двоичная единица указывает на то, что датчик находится над линией, а двоичный ноль указывает на то, что датчик отключен от линии.

uint8_t countBinary (uint16_t binaryValue);

Передача 16-битного представления значений датчиков в эту функцию возвращает количество датчиков, которые находятся над линией.

void getSensorsNormalized (uint16_t * sensorValue, режим uint8_t);

Считывает значения датчика и ограничивает каждое значение датчика соответствующими минимальными и максимальными значениями. Затем значения датчиков отображаются от их соответствующего минимального до максимального диапазона в диапазоне от 0 до 1000.

Шаг 14: Объяснение библиотек - TeensyviewMenu

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

TeensyViewMenu (недействительно);

Вызов этого конструктора создает объект класса LineSensor, PushButton и TeensyView.

недействительное вступление (недействительное);

Это для навигации по меню.

недействительный тест (недействителен);

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

Шаг 15: Объяснение библиотек - двигатели

Motors - это библиотека, используемая для управления двумя двигателями. Ниже приведены используемые функции.

Моторы (недействительны);

Вызов этого конструктора путем создания объекта настраивает контакты управления направлением двигателя и ШИМ в режим вывода.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

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

Шаг 16: Тестирование - одометрия энкодера

Мы протестируем энкодеры магнитного колеса и отобразим положение и расстояние, пройденное роботом.

Загрузите DualEncoderTeensyview.ino. Программа отображает галочки кодировщика на Teensyview. Энкодер показывает инкремент, если вы двигаете робота вперед, и уменьшение, если вы двигаете его назад.

Теперь загрузите EncoderOdometry.ino. Эта программа отображает положение робота в координатах x-y, отображает общее пройденное расстояние в сантиметрах и угол поворота в градусах.

Я сослался на «Внедрение мертвого счисления по одометрии на роботе с R / C серво-дифференциальным приводом» Общества робототехники Сиэтла для определения положения по тикам кодировщика.

Шаг 17: Тестирование - датчики движения опорного щита

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

Теперь загрузите PropShieldTeensyView.ino. Вы должны увидеть значения акселерометра, гироскопа и магнитометра по всем трем осям на Teensyview.

Шаг 18: Обзор программы

Программа для продвинутого линейного повторителя написана в среде Arduino IDE. Программа работает в следующей последовательности, описанной ниже.

  • Считываются значения, хранящиеся в EEPROM, и отображается меню.
  • При нажатии кнопки ЗАПУСК программа входит в цикл.
  • Считываются нормализованные значения линейного датчика.
  • Двоичное значение положения линии получается с использованием нормированных значений датчика.
  • Подсчет количества датчиков, которые находятся над линией, рассчитывается из двоичного значения положения линии.
  • Метки энкодера обновляются, и обновляются общее пройденное расстояние, координаты x-y и угол.
  • Для различных значений двоичного счета от 0 до 16 выполняется набор инструкций. Если двоичный счет находится в диапазоне от 1 до 5 и если датчики, находящиеся над линией, находятся рядом друг с другом, вызывается процедура PID. Вращение выполняется в других комбинациях двоичного значения и двоичного счета.
  • В программе PID (которая фактически является программой PD) двигатели приводятся в действие со скоростями, рассчитанными на основе ошибки, изменения ошибки, значений Kp и Kd.

В настоящее время программа не измеряет значения ориентации от опорного щита. Это незавершенная работа, которая обновляется.

Загрузите TestRun20.ino. Мы увидим, как перемещаться по меню, настраивать параметры и откалибровать линейные датчики на следующих этапах, после которых мы протестируем нашего робота.

Шаг 19: навигация по меню и настройкам

В меню есть следующие настройки, по которым можно перемещаться с помощью левой и правой кнопок и выбирать с помощью центральной кнопки. Настройки и их функции описаны ниже.

  1. КАЛИБРОВКА: для калибровки линейных датчиков.
  2. ТЕСТ: для отображения значений линейного датчика.
  3. ЗАПУСК: Для начала следования по строке.
  4. МАКС. СКОРОСТЬ: установка верхнего предела скорости робота.
  5. СКОРОСТЬ ВРАЩЕНИЯ: установка верхнего предела скорости робота, когда он выполняет поворот, то есть когда оба колеса вращаются с одинаковой скоростью в противоположных направлениях.
  6. КП: постоянная пропорциональности.
  7. KD: Постоянная производная.
  8. РЕЖИМ РАБОТЫ: выбор одного из двух режимов работы - НОРМАЛЬНЫЙ и ACCL. В НОРМАЛЬНОМ режиме робот работает с предварительно заданными скоростями, соответствующими значениям положения линии. В режиме ACCL MAX SPEED робота заменяется на ACCL SPEED на заранее определенных этапах трека. Это можно использовать для ускорения робота на прямых участках пути. Следующие настройки доступны только в том случае, если РЕЖИМ РАБОТЫ установлен как ACCL.
  9. РАССТОЯНИЕ КРУГА: установка общей длины гоночной трассы.
  10. ACCL SPEED: установить скорость разгона робота. Эта скорость заменяет МАКСИМАЛЬНУЮ СКОРОСТЬ на разных этапах трека, как определено ниже.
  11. НЕТ. OF STAGES: установка количества стадий, на которых используется ACCL SPEED.
  12. ЭТАП 1: для установки начального и конечного расстояний этапа, на котором МАКСИМАЛЬНАЯ СКОРОСТЬ заменяется на СКОРОСТЬ ACCL. Для каждого этапа можно отдельно установить начальное и конечное расстояние.

Шаг 20: Калибровка датчика линии

Image
Image

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

СРЕДНИЙ ФИЛЬТР: в этом методе линейные датчики размещаются над белой поверхностью, и для всех 16 датчиков снимается заранее определенное количество показаний датчиков. Определяются средние значения всех 16 датчиков. Тот же процесс повторяется после размещения линейных датчиков на черной поверхности. Пороговое значение - это среднее значение медианы черных и белых поверхностей.

MIN MAX: в этом методе значения датчика считываются повторно, пока пользователь не попросит остановиться. Сохраняются максимальные и минимальные значения, обнаруженные каждым датчиком. Пороговое значение - это среднее минимальное и максимальное значения.

Полученные таким образом пороговые значения отображаются в диапазоне от 0 до 1000.

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

  • 16-битное двоичное представление положения линии с двоичной 1, указывающей, что соответствующий датчик линии находится над линией, и двоичным 0, указывающим, что датчик линии находится вне линии.
  • Подсчет общего количества датчиков, находящихся над линией.
  • Минимальные, максимальные и значения датчиков (необработанные и нормализованные) для 16 датчиков, по одному датчику за раз.
  • Положение строки в диапазоне от -7500 до +7500.

Затем минимальные и максимальные значения линейного датчика сохраняются в EEPROM.

Шаг 21: тестовый запуск

Image
Image

На видео показан тестовый заезд, в котором робот запрограммирован на остановку после прохождения одного круга.

Шаг 22: Заключительные мысли и улучшения

Конкурс роботов
Конкурс роботов

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

Удачи.

Конкурс роботов
Конкурс роботов

Второй приз в конкурсе роботов

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