Схемы

Как создать самоходного робота: 7 шагов

Ангел Бэби Новые серии - Игра окончена (29 серия) Поучительные мультики для детей

Ангел Бэби Новые серии - Игра окончена (29 серия) Поучительные мультики для детей

Оглавление:

Anonim

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

Расходные материалы:

Шаг 1: Базовая платформа

Пример того, как построить очень простую роботизированную платформу с компонентами и деталями, которые легко найти повсюду, без необходимости в профессиональных инструментах или оборудовании и без специальных навыков в области механических работ.
Размер базы позволяет использовать ее в различных категориях соревнований роботов: Explorer, Line Follower, Can Collector и т. Д.

Шаг 2: Что мы хотим получить? и как?

Этот робот, как и большинство роботов, созданных хоббистами, основан на дифференциальной системе рулевого управления, позволяющей нам знать координаты положения робота в любой момент, просто зная пространство, периодически покрываемое каждым колесом, с достаточной точностью.
Эта мертвая расплата навигационная система подвержена кумулятивной ошибке; точность измерения должна быть высокой, чтобы обеспечить небольшую погрешность круга после длинного пути. Итак, после некоторых хороших результатов с самодельными энкодерами, я решил использовать что-то лучшее: пару мотор-редукторов 12 В-200 об / мин, подключенных к паре энкодеров с подсчетом оборотов (cpr) 300, оба из которых доступны во многих интернет-магазинах робототехники.
Основные принципы
Чтобы перехватить все импульсы, генерируемые кодером 300 cpr на двигателе 3000 об / мин при методе декодирования 4x (120 кГц), нам необходимо выделенное оборудование для каждого кодера (QEI = интерфейс квадратурного кодера). После некоторых экспериментов с двойным PIC18F2431 я определил, что правильным обновлением является dsPIC. Вначале это были два контроллера мотора dsPIC30F4012 для контроля положения и скорости колес, для выполнения одометрии и для передачи данных двух моторов в dsPIC30F3013. Этот DSC общего назначения достаточно мощный, чтобы получать данные, выполнять некоторую тригонометрию для вычисления координат положения и сохранять данные, относящиеся к пройденному пути, чтобы получить карту поля, причем все с очень высокой скоростью.
Когда плата и программы были почти готовы, Microchip выпустил новый мощный 28-контактный SPDIP в серии dsPIC33F для версий контроллера мотора (MC) и общего назначения (GP). Они значительно быстрее, чем dsPIC30F, имеют намного больше доступной памяти программ и ОЗУ (полезно для отображения полей), им требуется меньше энергии (хорошо для робота с батарейным питанием), а их возможности DMA упрощают многие операции ввода-вывода.
Самое главное, что это первые контроллеры двигателя Microchip с двумя QEI на одном чипе. Давайте начнем новый порт снова! логическая блок-схема аналогична предыдущей плате , но аппаратное и программное обеспечение намного проще, так как Я могу использовать только один DSC из трех , Для обмена навигационными параметрами не требуется высокоскоростная связь между диспетчером и контроллерами двигателя. Каждый процесс прост для синхронизации, потому что он находится на одном чипе. Возможность выбора периферийных выводов серии dsPIC33F дополнительно упрощает печатную плату, обеспечивая внутреннее подключение периферийных устройств и большую гибкость.
Это приводит нас к «плате управления навигацией на основе dsPIC» или dsNavCon коротко. Эта доска разработана как часть более сложной системы. В полном роботе-исследователе другие платы будут управлять датчиками звука, света, газа, а также бамперами и ультразвуковыми дальномерами, чтобы находить цели и избегать препятствий.
В качестве отдельной доски, dsNavCon может также использоваться для простого робота «линейного последователя», чего-то более сложного, например, робота для соревнований по одометрии и расплате, или так называемого робота «может может» (для соревнований по сбору банок). По-прежнему достаточно свободной программной памяти для добавления кода для таких задач. С незначительными изменениями в программном обеспечении или без таковых, его также можно использовать автономно для автомобиля с дистанционным управлением, используя двунаправленный РЧ-модем с некоторым видом интеллектуального дистанционного управления. Этот пульт дистанционного управления может отправлять сложные команды, такие как «передвинуть вперед на 1 м», «повернуть на 15 ° влево», «запустить вперед» со скоростью 50 см / с, «перейти к координатам X, Y» или что-то подобное.
Доска и робот тоже предназначены для тех, кто дома, без профессиональных инструментов и оборудования.

Шаг 3: Оборудование с открытым исходным кодом

Блок-схема
Подсистема управления навигацией состоит из dsNav в качестве «умной» платы системы и двойной H-мостовой платы на базе L298 для управления мотор-редукторами 12 В (Hsiang Neng HN-GH12-1634TR). Обратная связь по движению поступает от пары кодеров на 300 кпр (американский цифровой e4p-300-079-ht).
Связь с внешним миром осуществляется через два последовательных интерфейса UART; один для телеметрии, а другой для получения данных с платы датчиков. Модуль XBee может быть подключен к UART1 или UART2 через перемычки JP1 и JP2. Разъемы J1 и J16 доступны для других видов соединений. Порт COMM1 (J16) также можно использовать для связи I2C благодаря возможности выбора периферийных выводов серии dsPIC33F.
Исходную принципиальную схему в формате Eagle можно найти здесь:
http://www.guiott.com/Rino/dsNavCon33/dsNavCon33_Eagle_project/DsPid33sch.zip
Как видите, схема настолько проста, что может быть реализована на плате, как я. Если вы не хотите использовать эту систему и не хотите реализовывать свою собственную печатную плату, коммерческая плата, основанная на моей оригинальной работе и полностью совместимая с моим программным обеспечением с открытым исходным кодом, доступна по адресу: http: //www.robot-italy. .com / product_info.php? products_id = тысячу пятьсот шестьдесят четыре

Шаг 4: Программное обеспечение с открытым исходным кодом

Программное обеспечение разработано с использованием бесплатной IDE MPLAB® и написано с помощью компилятора MPLAB® C30 (даже в бесплатной или для студенческой версии), оба (конечно) от Microchip:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=81
Весь проект доступен с открытым исходным кодом в Google Code
http://code.google.com/p/dspid33/
Пожалуйста, ознакомьтесь с последней версией, комментариями, описаниями и т. Д.
Программа описана пошагово внутри кода. Чтобы иметь высокий уровень комментирования и более читаемый код, в каждой существенной точке есть число в скобках (например: 7) как ссылка на внешний файл (то есть: descrEng.txt) в проекте MPLAB ,
Диаграмма показывает общую архитектуру процедур управления платы dsNav и стратегии навигации, применяемые на основе проекта.
Контроллеры двигателя можно рассматривать как черные ящики, которые заботятся о скорости колес. Супервизорная часть программы отправляет им контрольную скорость (VeldDesX: желаемая скорость). Модули Input Capture микроконтроллера получают импульсы от датчиков, подключенных к оси двигателя, и определяют скорость вращения двигателей (VelMesX: измеренная скорость). Комбинируя каждые 1 мс этого значения в ПИД-регуляторе «Speed ​​PID», мы получаем правильное значение PWM, чтобы сохранить желаемую скорость каждого отдельного колеса.
Модули QEI (интерфейса квадратурного кодера) получают импульсы A и B от кодеров и возвращают функции супервизора направление движения и количество импульсов в режиме 4x (считая нарастающие и падающие фронты сигнала A и сигнала B: 2 х 2 = 4).
Умножая количество импульсов на K, которое указывает расстояние, пройденное для каждого отдельного импульса энкодера, мы получаем расстояние, пройденное правым и левым колесами каждые 10 мс. Супервайзер объединяет эту информацию о поездках и применяет процедуру мертвых расчетов, чтобы получить измеренные координаты положения бота: Xmes, Ymes, θMes (угол ориентации).
Супервизор получает навигационную команду извне по последовательному интерфейсу (телеметрия).
Могут применяться разные стратегии:
- двигаться с заданной скоростью в заданном направлении (VelDes, θDes).
В - двигаться к заданной точке с координатами XDes, YDes.
С - путешествие на заданное расстояние в заданном направлении (DistDes, θDes).
Режим А : при «логических переключателях управления» в положении 1 только функции ПИД-управления «Angle PID» используются функциями супервизора. Он объединяет желаемый угол θDes с измеренным углом θMes, рассчитанным с помощью процедуры одометрии, чтобы получить значение угловой скорости ω вращения транспортного средства вокруг его вертикальной оси, необходимое для исправления ошибки ориентации.
Значение DeltaV пропорционально ω. Он добавляется в VelDes для получения скорости левого колеса и вычитается в VelDes для получения скорости правого колеса, чтобы поддерживать курс, соответствующий значению θDes, в то время как центр робота все еще движется со скоростью VelDes.
Режим Б : при «логических переключателях» в положении 2 требуемая скорость VelDes рассчитывается с помощью ПИД-регулятора «Dist PID» и используется как в режиме A. Измеренный вход для этого PID (DistMes) вычисляется как функция от текущие координаты и координаты назначения. Желаемая ориентация угла θDes также исходит из одной и той же процедуры, и он используется в качестве опорного входного сигнала для «Угла PID». Эталонный вход для «Dist PID» равен 0, что означает, что пункт назначения достигнут. При наличии ω и VelDes управление скоростью колес выполняется как в режиме А.
Режим С : при «логических переключателях управления» в положении 2 пункт назначения объединяет Xdes, Ydes, которые вычисляются один раз в начале как функция входных параметров DistDes, θDes. После этого все идет как в режиме B

Шаг 5. Подробная информация о программном обеспечении: управление скоростью и другие основные функции

Программа заполнена управляемый прерыванием , При запуске, после инициализации, программа входит в очень простой основной цикл, действуя как конечный автомат. В основном цикле программа проверяет флаги, включенные внешними событиями, и переходит в относительное состояние в соответствии с их значениями.
Так как это своего рода очень простой кооператив "Операционная система реального времени «каждая подпрограмма должна быть выполнена в кратчайшие сроки, освобождая систему для обработки очень частых прерываний.
Там нет «ждать до» и никаких задержек в коде. Когда это возможно, используются прерывания, в частности, для медленных операций, таких как передача или прием строк символов. Связь по протоколу UART использует преимущества возможностей DMA dsPIC33F, чтобы сэкономить процессорное время, выполняя всю «грязную» работу оборудования.
Периферийные устройства, используемые на dsPIC33FJ128MC802:
- QEI для расчета пройденного пути.
- Входной захват (IC) для расчета скорости.
- Аналого-цифровые преобразователи для считывания тока двигателя.
- Усовершенствованные ШИМ для управления двигателями.
- UARTs для общения с внешним миром
Модули QEI используются, чтобы узнать, сколько колес прошло и в каком направлении. Это значение алгебраически накапливается в переменной каждые 1 мс и отправляется функциям супервизора по его запросу. После отправки значения переменные сбрасываются.
Скорость измеряется на импульсе каждого датчика, как описано ниже. Каждые 1 мс он вычисляет среднюю скорость путем усреднения выборок, выполняет алгоритм ПИД-регулятора и корректирует скорость двигателя в соответствии с его результатом, изменяя рабочий цикл ШИМ. Подробное описание приложения библиотеки P30 C30 см. В разделе Пример кода микрочипа: CE019 - Использование пропорциональных интегральных производных (PID) контроллеров в системах управления с обратной связью. http://ww1.microchip.com/downloads/en/DeviceDoc/CE019_PID.zip
Изменения скорости двигателей выполняются плавно, ускоряясь или замедляясь с наклонной или наклонной рампой, чтобы избежать сильных механических нагрузок и проскальзывания колес, которые могут привести к ошибкам одометрии. Замедление происходит быстрее, чем ускорение, чтобы избежать столкновений с препятствиями во время торможения.
IC входные модули захвата используются для измерения времени, прошедшего между двумя импульсами, генерируемыми кодером, т.е. значения, когда колеса перемещаются в течение хорошо известного фиксированного количества пространства (постоянное SPACE_ENC ). Подключенные параллельно к QEA (внутренне к DSC благодаря возможностям выбора периферийных выводов dsPIC33F), они фиксируют истекшее время по переднему фронту сигналов энкодеров. TIMER2 используется в автономном режиме. При каждом прерывании IC сохраняется текущее значение TMR2 и из него вычитается его предыдущее значение; это период импульса. Тогда текущее значение становится предыдущим значением, ожидая следующего прерывания. Необходимо проверить флаг TMR2, чтобы узнать, произошло ли переполнение в 16-битном регистре. Если да, то разница между 0xFFFF и предыдущей выборкой должна быть добавлена ​​к текущему значению. Образцы алгебраически добавляются в IcPeriod переменная в соответствии с _UPDN немного, чтобы определить также направление скорости. Это один из предложенных методов в Замечание по применению микрочипа AN545 .
Переменная IcIndx содержит количество образцов, добавленных в IcPeriod .
Каждые 1 мс средняя скорость рассчитывается как V = Пространство / Время
где Пробел = SPACE_ENC • IcIndx
(= пространство, покрытое одним импульсом энкодера • количество импульсов)
а также Время = TCY • IcPeriod
(= один период TMR • произошло суммирование периодов).
Single_TMR_period = TCY = 1 / FCY (тактовая частота).
Так V = Kvel • (IcIndx / IcPeriod)
где Kvel = SPACE_ENC • FCY иметь скорость в м / с.
Сдвиг оставил 15 бит Kvel const ( KvelLong = Kvel << 15 ) скорость рассчитывается уже в дробном формате (также, если используются только целочисленные переменные), готовом к использованию в процедуре PID. Смотрите файл «descrEng.txt» в проекте MPLAB для более подробного описания.
Аналого-цифровые преобразователи непрерывно измеряйте ток двигателя, сохраняя значения в 16 позиционных буферах ADCBUF. Когда буферы заполнены, происходит прерывание, и среднее значение вычисляется приблизительно каждые 1 мс.
УАПП используются для получения команд извне и для отправки результатов измерений. Часть связи программы работает как конечный автомат. Переменные состояния используются для последовательного выполнения действий. Очень простые и быстрые подпрограммы обработки прерываний (ISR) получают или помещают каждый байт из буфера или в него и устанавливают правильные флаги, чтобы позволить правильной функции быть выполненной.
Если во время приема возникает какая-либо ошибка (UART, контрольная сумма, ошибки синтаксического анализа), переменная состояния устанавливается на отрицательное число, а красный светодиод включается для внешней передачи данных об этой неисправности. Смотрите файл «descrEng.txt» в проекте MPLAB для получения полного списка возможных ошибок.
Протокол, используемый для рукопожатия, независимый физический уровень и может также использоваться с шиной I2C или RS485 для связи.
первый слой контролируется периферийным интерфейсом dsPIC. Ошибки кадров или переполнения (UART) или коллизии (I2C) обнаруживаются аппаратно, устанавливая соответствующий флаг.
второй слой обрабатывается процедурами ISR. Они заполняют буфер RX байтами, полученными от интерфейсов. Они также обнаруживают переполнение буфера и переполнение команд.
Функции UartRx или UartRx2 управляют третий слой , Как уже описано (см. Также блок-схемы), эти процедуры действуют как конечный автомат, получая байты из буфера и декодируя командную строку.
Обмен байтами происходит между вторым и третьим уровнями (функция ISR и UartRx) через кольцевой буфер. ISR получает байт, сохраняет его в массиве и увеличивает указатель на массив, если указатель достигает конца массива, он перезапускается к началу. Функция UartRx имеет свой собственный указатель для чтения того же массива, увеличенный (тоже по кругу), как только байт будет декодирован в текущем состоянии RX. Основной цикл вызывает функцию UartRx всякий раз, когда указатель «in» отличается от указателя «out».
Каждый пакет команд состоит из:
0 - Заголовок @
1 - ID 0-9 ASCII
2 - Cmd A-Z ASCII
3 - CmdLen N = 1-MAX_RX_BUFF # байт после (контрольная сумма включена)
4 - Данные …

N-1 - данные
N - контрольная сумма 0-255, полученная простым сложением в 8-битную переменную, причем все байты составляют сообщение (сама контрольная сумма исключена).
Этот уровень контролирует время ожидания и ошибки контрольной суммы, а также согласованность пакетов (правильный заголовок, правильная длина). Если все в порядке, включается процедура Parser (четвертый слой ) декодировать сообщение и выполнить требуемое действие. Эта процедура устанавливает соответствующий флаг ошибки, если полученный код сообщения неизвестен.
TMR1 генерирует тактовые частоты 1000 Гц - сердцебиение программы. При каждом прерывании TMR1 внутренние таймеры обновляются, сторожевой таймер очищается, и устанавливается флаг, чтобы включить функцию, которая запрашивает значение пройденного пространства. Каждые 10 мс функция «All_Parameters_Ask» (скорость, позиция, ток) включена.

Шаг 6: Подробная информация о программном обеспечении: одометрия и картирование поля = Где я?

Оптимизация общего алгоритма для использования в системах на основе DSC или MCU
Как только мы получим информацию о расстоянии, пройденном каждым колесом в обновлении с дискретным временем (одометрия), мы можем оценить координаты положения робота с той же периодичностью без какой-либо внешней привязки (расчет без учета).
Некоторое теоретическое обоснование расплаты за счет мертвой одометрии можно найти в книге Иоганна Боренштейна:
«Где я? - датчики и методы для мобильного позиционирования робота»
и на следующих веб-страницах:
http://www.seattlerobotics.org/encoder/200010/dead_reckoning_article.html
Математическое обоснование и глубокое объяснение общего используемого метода можно найти на G.W. Статья Лукаса «Модель учебного пособия и элементарной траектории для дифференциальной системы рулевого управления приводов колес роботов», доступная в Интернете:
http://rossum.sourceforge.net/papers/DiffSteer/DiffSteer.html
Некоторые упрощенные алгоритмы также могут быть найдены в той же документации, так что можно получить правильный компромисс между точностью и скоростью разработки, используя математические (тригонометрические) возможности серии dsPIC33F.
Описание математики, используемой для вычисления положения, можно найти на рисунках, прикрепленных к этому этапу. Первый показывает значение символов, второй показывает формулы, используемые с этими символами. Нажав на флажки рядом с каждым вычислительным этапом, вы увидите краткое описание.
В конце мы знаем, насколько робот переместился за этот промежуток времени как дельта ориентации, дельта по оси X и дельта по оси Y в эталонном поле.
Суммируя каждое дельта-значение в его собственной переменной, мы знаем текущие координаты (положение и ориентацию) платформы.
Чтобы избежать ошибок в вычислениях (делить на ноль) и тратить время контроллера, необходимо заранее проверить обе переменные Sr и Sl. Определив квазинулевое значение, которое учитывает минимальные механические и вычислительные приближения, мы можем упростить формулы, если робот движется по прямой линии (пространство, покрытое правым колесом, почти такое же, как пространство, пройденное левым колесом) или если он поворачивается вокруг своей вертикальной оси (пространство, покрытое правым колесом, почти такое же, как пространство, пройденное левым колесом, но в противоположном направлении), как подробно показано в блок-схеме, показанной на последнем рисунке.

Это видео показывает пример того, какую точность мы можем получить:
http://www.youtube.com/watch?v=d7KZDPJW5n8


Полевое картографирование
С данными, вычисленными предыдущими функциями, выполняется отображение поля.
Каждые Xms, после проработки текущей позиции, выполняется отображение поля, разделяющее неизвестное поле на сетку ячеек 10 x 10 см. Определяя максимальный размер поля 5 x 5 м, мы получаем матрицу 50 x 50 = 2500 ячеек. Каждая ячейка определяется полубайтом с общим объемом памяти 1250 байт. Шестнадцать различных значений могут быть назначены для каждой ячейки:
n = 00 неизвестная клетка
n = 01 - 10 посещенных ячеек n раз
n = 11 препятствий найдено
n = 12 газовых мишеней найдено
n = 13 легких целей найдено
n = 14 найденных звуковых целей
Робот может стартовать с любой позиции на поле; они будут опорные координаты (0,0) в своей системе отсчета.
Полевое картирование полезно, чтобы найти лучшую стратегию исследования в неизвестной области. Робот может направить себя к менее изученной части поля (меньшее значение «n»), может сэкономить время, не останавливаясь дважды в уже обнаруженной цели, может найти лучший путь для достижения заданной координаты и многое другое.

Шаг 7: Удаленная консоль

Это приложение, которое удаленно управляет платой dsNavCon с Mac / ПК через последовательную связь через пару устройств XBee, как описано в блок-схеме.
Чтобы его можно было легко разрабатывать и хорошо запускать в любой операционной системе, он написан с обработка язык:
http://www.processing.org/
Исходный код этой программы также доступен как открытый исходный код на Google Code:
http://code.google.com/p/dsnavconconsole/
С главная панель (первые рисунки) мы можем выполнить телеметрию, посмотрев на сетку путь, по которому следует робот (по оценке одометрии) в поле настраиваемого размера и некоторые другие важные значения, считанные на dsNav .
Датчики показывают измеренные значения:
- MesSpeed ​​в диапазоне +/- 500 мм / с, среднее значение скорости двух колес (скорость центра платформы).
- Измеренный ток в мА (сумма тока от двух двигателей).
- Измеренный угол, рассчитанный по одометрии.
Другие панели используются для настройки параметров робота и для сохранения в роботе определенного пути, по которому нужно следовать (при необходимости). Важной панелью, по крайней мере во время разработки робота, является детальная панель (вторая картинка), которая показывает скорость каждого колеса в реальном времени, очень полезна для калибровки всех параметров.
Центральный вид сетки можно переключать с помощью веб-камеры, чтобы контролировать, даже путем просмотра, путь, по которому следует робот.
Практический пример использования этой консоли показан в этом видео:
http://www.youtube.com/watch?v=OPiaMkCJ-r0