Разработка алгоритмов для поддержания стабильной скорости движения мобильного робота с дифференциальным приводом. Курсовая работа (т). Информационное обеспечение, программирование.

👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻
Информационное обеспечение, программирование
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!
Похожие работы на - Разработка алгоритмов для поддержания стабильной скорости движения мобильного робота с дифференциальным приводом
Нужна качественная работа без плагиата?
Не нашел материал для своей работы?
Поможем написать качественную работу Без плагиата!
Целью данного курсового проекта является разработка алгоритмов для поддержания стабильной скорости движения мобильного робота с дифференциальным приводом.
Среди множества разнообразных типов мобильных роботов в настоящее время наибольший практический интерес вызывают колесные наземные мобильные роботы. Предложено большое количество принципов классификации колесных наземных мобильных роботов: Если воспользоваться классификацией по способу управления работой колес, то можно выделить следующие три группы колесных роботов: автомобильная группа (поворот осуществляется только за счет передних колес); группа с произвольным независимым управлением поворотом каждого колеса влево или вправо (например, кресло-каталка); группа роботов, способных перемещаться во всевозможных направлениях. Большинство применяемых на практике колесных мобильных роботов относится ко второй группе, т.е. данный метод управления оказывается наиболее важным. Что касается роботов, колеса которых могут поворачиваться в любую сторону, то они пока находятся на стадии экспериментальных исследований и опытных испытаний.
Стабилизация скорости имеет очень важное значение для управления роботом, ведь малейшее отклонение скорости одного из колёс может значительно изменить траекторию робота.
· Выполнить анализ типов приводов мобильных платформ
· Выполнить анализ подходов к стабилизации скорости
· Разработать алгоритм стабилизации скорости мобильной платформы Rover 5 с дифференциальным приводом.
· Систему управления реализовать на основе микроконтроллера Arduino.
1. Анализ типов приводов мобильных платформ
Дифференциальный привод : мобильная платформа с таким типом привода (Рис. 1.1) имеет два активных колеса. Разница между скоростями колес определяет угол поворота. Это наиболее часто используемая кинематическая модель [5].
Рис. 1.1 Схема дифференциального привода
Синхронный привод : в мобильной платформе с данным типом привода (Рис. 1.2) все колеса приводятся в движение с одинаковой скоростью. Также все колеса вращаются одновременно и всегда параллельны друг другу [5].
Трицикл : мобильная платформа с таким приводом (Рис. 1.3) имеет два мотора: один для движения, другой для рулежки. Только переднее колесо может поворачивать. Задние колеса приводят в движение робота [5].
Всенаправленный привод : мобильная платформа с таким (Рис. 1.4) приводом может двигаться во всех направлениях от начальной точки. Такие роботы имеют специальные колеса, которые позволяют им добиться этого [5].
Рис. 1.4 Схема всенаправленного привода
Колесная конфигурация мобильного робота определяет характер его передвижения. При выборе определенного типа привода для робота необходимо учитывать следующие моменты:
· точность позиционирования (повторяемость);
· гибкость и робастность (надежность) при различных условиях;
· эффективность (низкое энергопотребление).
2. Мобильная платформа с дифференциальным приводом
Rover 5 Chassis (Рис. 2.1) - это роботизированное шасси с гусеницами, созданное специально для студентов или любителей. В отличие от обычных гусеничных шасси дорожный просвет может быть настроен путем поворота редукторов с шагом в 5 градусов. "Растягивающиеся" резиновые протекторы сохраняют натяжение с увеличением дорожного просвета.
Рис. 2.1 Гусеничная платформа Rover 5
Характеристики встроенных энкодеров, которые изображены на рисунке 2.2: 1000 импульсов на 3 оборота выходного вала (333,33 импульса за оборот).
На рисунке 2.3 изображен чертеж мобильной платформы Rover 5, на котором указаны его размеры.
3. Разработка системы стабилизации скорости движения мобильной платформы
.1 Обзор подходов к стабилизации скорости
Пропорциональная стабилизация скорости:
Равномерное изменение скорости при её регулировании
При отклонении скорости от заданной происходит увеличение (или уменьшение) скорости на определённое заданное число (коэффициент k ).
При этом скорость изменяется линейно. При достижении заданного уровня скорости происходят автоколебания (Рис. 3.1).
Рис. 3.1 Графики пропорциональной стабилизации скорости
При малом коэффициенте k скорость изменяется медленно, при этом возникают небольшие автоколебания при достижении нужного уровня. При увеличении коэффициента k скорость изменяется быстрее, но усиливаются автоколебания. При слишком большом k возникнут большие автоколебания или расходящиеся колебания, что недопустимо.
Данная стабилизация удобна при малых отклонениях, при больших отклонениях происходит долгая регулировка, как это видно на рисунке 3.2. При этом необходимо подбирать оптимальный коэффициент k .
Рис.3.2 График использования пропорциональной стабилизации
Стабилизация скорости по отклонению от заданного значения:
Скорость регулировки зависит от степени отклонения.
При большом отклонени скорость нарастает быстро, при малом - медленно.
При этом скорость изменяется нелинейно (Рис. 3.3).
Рис. 3.3 Графики стабилизации скорости по отклонению
Данная стабилизация работает аналогично дифференциальной стабилизации. Скорость регулировки зависит от коэффициента k , чем он больше тем выше скорость, при больших значениях k будет возникать перерегулирование. Стабилизация скорости по отклонению быстрее пропорциональной, при этом отсутствуют автоколебания (Рис. 3.4).
Рис.3.4 График использования стабилизации скорости по отклонению
Стабилизация состоит из трех составляющих - Пропорциональной, Интегральной и Дифференциальной (ПИД). Формула ПИД-регулятора:
где P - пропорциональная составляющая; I - интегральная составляющая; D - дифференциальная составляющая; e(t) - текущая ошибка; Kp - пропорциональный коэффициент; Ki - интегральный коэффициент; Kd - дифференциальный коэффициент [3].
В программной реализации переходят к дискретной форме:
u(t) = P (t) + I (t) + D (t);(t) = Kp * e (t);(t) = I (t - 1) + Ki * e (t);(t) = Kd * {e (t) - e (t - 1)}.
Сложность ПИД-регулирования в том, что для оптимальной работы требуется подбор множества коэффициентов, так же его использование требует большей вычислительной мощности, поэтому в данной работе он использоваться не будет.
В зависимости от выбранных коэффициентов стабилизация скорости ПИД-регулированием будет преобретать различный характер (Рис. 3.5)
Рис. 3.5 Графики стабилизации скорости ПИД-регулированием
3.2 Программно-аппаратная реализация
Система стабилизация скорости мобильной платформы Rover 5 реализована на микроконтроллере Arduino Mega (Рис. 3.6). Для управления двигателями использован Motor Driver (Рис. 3.7).
МикроконтроллерATmega2560Рабочее напряжение5ВВходное напряжение (рекомендуемое)7-12ВВходное напряжение (предельное)6-20ВЦифровые Входы/Выходы54 (14 из которых могут работать также как выходы ШИМ)Аналоговые входы16Постоянный ток через вход/выход 40 mAПостоянный ток для вывода 3.3 В50 mAФлеш-память256 KB (из которых 8 КB используются для загрузчика)ОЗУ8 KBЭнергонезависимая память4 KBТактовая частота16 MHz
Таблица 2. Характеристики Motor Driver [2]
Напряжение питания логики5ВМаксимальное напряжение питания двигателей12ВМаксимальный ток питания двигателей4,5А
Двигатели Rover 5 питаются от батареи напряжением 11,5В и подключены к плате Motor Driver к которой также подключены оба энкодера (Рис. 3.8).
На энкодерах: 1 - Vcc; 2 и 3 - выходы сигналов A и B; 4 - Gnd.
Рис. 3.8 Схема подключения Arduino Mega и Motor Driver
Платы Arduino Mega и Motor Driver крепятся сверху мобильной платформы Rover 5 (Рис. 3.9).
Рис. 3.9 Rover 5 с подключенной электроникой
При программировании Arduino будут проверены 2 метода стабилизации скорости: пропорциональный и стабилизации по отклонению._1 - итоговое число импульсов за период с 1-го энкодера_2 - итоговое число импульсов за период с 2-го энкодера- число импульсов с энкодера для установления нужной скорости- коэф. изменения ШИМ- уровень ШИМ 1-го двигателя- уровень ШИМ 2-го двигателя- максимально допустимое число ШИМ
Алгоритм пропорциональной стабилизации скорости:
//определение ШИМ для 1-го двигателя
if (shim1>P) {shim1 = P;} //ограничение ШИМ(shim1<0) {shim1 = 0;}
//определение ШИМ для 2-го двигателя
if (spe_2enk) shim2 = shim2-a;
if (shim2>P) {shim2 = P;} //ограничение ШИМ(shim2<0) {shim2 = 0;}
Алгоритм стабилизации скорости по отклонению:
//определение ШИМ для 1-го двигателя(spe_1enk) //если число импульсов с 1-го энкодера > заданного
shim1 = round(shim1-K); //уменьшение ШИМ для 1-го двигателя
}(shim1>P) shim1 = P; //ограничение ШИМ(shim1<0) shim1 = 0;
//определение ШИМ для 2-го двигателя(spe_2enk) //если число импульсов с 2-го энкодера > заданного
shim2 = round(shim2-K); //уменьшение ШИМ для 2-го двигателя
}(shim2>P) shim2 = P; //ограничение ШИМ(shim2<0) shim2 = 0;
Информация о данных с энкодеров и уровня ШИМ выводилась в COM порт. По этим данным строились графики, на которых указаны: заданная скорость, скорость 1го двигателя, скорость 2го двигателя (измеряются числом импульсов с энкодера за период Т) и уровень мощностей 1го и 2го двигателя (определялся по ШИМ).
Тестирование пропорциональной стабилизации скорости:
Тестирования проводились с разными коэффициентами изменения скорости: низким k=2 и высоким k=5, период измерения импульсов с энкодеров Т=50мс (Рис. 4.1).
Рис. 4.1 Графики пропорциональной стабилизации скорости
Как видно увеличение скорости двигателей с низким k до заданного уровня происходит значительно долго по сравнению с высоким k, при этом в обоих случаях заметны значительные кратковременные колебания скорости. Это указывает на низкое быстродействие стабилизации.
Тестирование стабилизации скорости по отклонению:
Тестирования проводились с разными коэффициентом изменения скорости: высоким k=50 и низким k=5, период измерения импульсов с энкодеров Т=100мс (Рис. 4.2).
Рис. 4.2 Графики стабилизации скорости по отклонению
Как видно коэффициент изменения скорости влияет на скорость стабилизации, при этом видно, что скорость изменяется нелинейно. Отклонения скорости являются небольшими (всего на 1 импульс от заданной), но они быстро убираются. Это указывает на высокое быстродействие стабилизации.
Таблица 3. Сравнение ошибок стабилизации
Тип стабилизацииЗначения коэф. kСКОпропорциональная22,229451,7174по отклонению501,537751,5912
В ходе выполнения данного курсового проекта были выполнены следующие задачи:
· Анализ типов приводов мобильных платформ;
· Анализ подходов к стабилизации скорости;
· Разработка алгоритмов стабилизации скорости;
В ходе разработки алгоритмов стабилизации скорости были реализованы два различных метода стабилизации, которые затем были протестированы. Результаты тестирования позволяют сравнить теоретические данные с реальными, а также выявить эффективность каждого метода.
Так же были получены новые знания и навыки для работы с мобильной платформой Rover 5, разработки алгоритмов стабилизации и программировании Arduino.
Код программы пропорциональной стабилизации скорости
#include dirPin1 = 9; //пин направления 1-го двигателяpvmPin1 = 10; //пин шим-а 1-го двигателяdirPin2 = 7; //пин направления 2-го двигателяpvmPin2 = 6; //пин шим-а 2-го двигателяencoderPinA = 2; //пин считывающий сигналы энкодера 1 (они вызывают прерывание)encoderPinB = 3; //пин считывающий сигналы энкодера 2 (они вызывают прерывание)time_1; //счетчик прерываний(каждый импульс с энкодера вызывает прерывание) 1-го энкодераspe_1; //итоговое число импульсов за период с 1-го энкодераtime_2; //счетчик прерываний(каждый импульс с энкодера вызывает прерывание) 2-го энкодераspe_2; //итоговое число импульсов за период со 2-го энкодера
SimpleTimer timer; //конструктор (см библиотеку SimpleTimer)
String S = ""; //строка считанного числа скоростиU = 0; //заданная скорость в процентах (U = от 0% до 100%)MaxEnk = 10; //значение энкодера при U = 100%a = 2; //число изменения ШИМP = 200; //максимально допустимое число ШИМT = 50; //период подсчитывания числа импульсов с энкодеровshim1 = 0; //уровень ШИМ 1-го двигателяshim2 = 0; //уровень ШИМ 2-го двигателяenk = 0; //число импульсов с энкодера для установления нужной скоростиsetup()
{ .begin(9600); //скорость обмена данными с COM портом(pvmPin1, OUTPUT); //настройка портов на прием или передачу данных
pinMode(dirPin1, OUTPUT);(pvmPin2, OUTPUT);(dirPin2, OUTPUT);(encoderPinA,INPUT);(encoderPinB,INPUT);(0, encoder_1, RISING); //настройка прерывания 0-номер прерывания, которому соответствует порт 2 encoder_1 процедура вызываемая прерыванием.
attachInterrupt(1, encoder_2, RISING); //RISING - режим прерывания означающий что прервание возникнет при переходе от низкого уровня сигнала к высокому.setInterval(T, timer_1); //настройка таймера: после T мс запускать процедуру timer_1(dirPin1,LOW); //направление 1-го двигателя(dirPin2,LOW); //направление 2-го двигателя
{.run(); //запуск таймера(Serial.available() > 0) //если в буфере есть символы
{inChar = Serial.read(); //считать символ
if (isDigit(inChar)) //если символ является цифрой
{+= (char)inChar; //прибавить символ к строке
}(inChar == '!') //символ окончания строки
{= S.toInt(); //перевод string в integer
//ограничения в заданной скорости(U>100) U = 100;(U<0) U = 0;
//алгоритм стабилизации скорости= round((MaxEnk/100)*U); //необходимое число импульсов на энкодере для установления нужной скорости(enk == 0) //если число импульсов равно 0
//определение ШИМ для 1-го двигателя(spe_1P) {shim1 = P;} //ограничение ШИМ(shim1<0) {shim1 = 0;}
//определение ШИМ для 2-го двигателя
if (spe_2enk) shim2 = shim2-a;
if (shim2>P) {shim2 = P;} //ограничение ШИМ(shim2<0) {shim2 = 0;}
//установление уровней ШИМ для двигателей
analogWrite(pvmPin1, shim1);(pvmPin2, shim2);
{_1+=1; //счетчик прерываний (числа импульсов с 1-го энкодера)
{_2+=1; //счетчик прерываний (числа импульсов с 2-го энкодера)
}timer_1() //подпрограмма, запускаемая каждые T мс
{_1 = time_1; //число импульсов с 1-го энкодера _1 = 0; //обнуление счетчика прерываний_2 = time_2; //число импульсов с 2-го энкодера_2 = 0; //обнуление счетчика прерываний
//вывод данных.print(U); //вывод заданной скорости %.print(" ");.print(enk); //вывод расчётного числа импульсов с энкодера для установления нужной скорости.print(" ");.print(spe_1); //вывод числа импульсов с 1-го энкодера.print(" ");.print(spe_2); //вывод числа импульсов с 2-го энкодера.print(" ");.print(shim1); //вывод уровня ШИМ для 1-го двигателя.print(" ");.println(shim2); //вывод уровня ШИМ для 2-го двигателя
Код программы стабилизации скорости по отклонению
#include dirPin1 = 9; //пин направления 1-го двигателяpvmPin1 = 10; //пин шим-а 1-го двигателяdirPin2 = 7; //пин направления 2-го двигателяpvmPin2 = 6; //пин шим-а 2-го двигателяencoderPinA = 2; //пин считывающий сигналы энкодера 1 (они вызывают прерывание)encoderPinB = 3; //пин считывающий сигналы энкодера 2 (они вызывают прерывание)time_1; //счетчик прерываний(каждый импульс с энкодера вызывает прерывание) 1-го энкодераspe_1; //итоговое число импульсов за период с 1-го энкодераtime_2; //счетчик прерываний(каждый импульс с энкодера вызывает прерывание) 2-го энкодераspe_2; //итоговое число импульсов за период со 2-го энкодера
SimpleTimer timer; //конструктор (см библиотеку SimpleTimer)
String S = ""; //строка считанного числа скоростиU = 0; //заданная скорость в процентах (U = от 0% до 100%)MaxEnk = 8; //значение энкодера при U = 100%a = 50; //коэф. изменения ШИМP = 200; //максимально допустимое число ШИМT = 50; //период подсчитывания числа импульсов с энкодеровK; //вычисляющийся коэф. (К = от 0 до 1)shim1 = 0; //уровень ШИМ 1-го двигателяshim2 = 0; //уровень ШИМ 2-го двигателяenk = 0; //число импульсов с энкодера для установления нужной скоростиsetup()
{ .begin(9600); //скорость обмена данными с COM портом(pvmPin1, OUTPUT); //настройка портов на прием или передачу данных
pinMode(dirPin1, OUTPUT);(pvmPin2, OUTPUT);(dirPin2, OUTPUT);(encoderPinA,INPUT);(encoderPinB,INPUT);(0, encoder_1, RISING); //настройка прерывания 0-номер прерывания, которому соответствует порт 2 encoder_1 процедура вызываемая прерыванием.
attachInterrupt(1, encoder_2, RISING); //RISING - режим прерывания означающий что прервание возникнет при переходе от низкого уровня сигнала к высокому.setInterval(T, timer_1); //настройка таймера: после T мс запускать процедуру timer_1(dirPin1,LOW); //направление 1-го двигателя(dirPin2,LOW); //направление 2-го двигателя
{.run(); //запуск таймера(Serial.available() > 0) //если в буфере есть символы
{inChar = Serial.read(); //считать символ
if (isDigit(inChar)) //если символ является цифрой
{+= (char)inChar; //прибавить символ к строке
}(inChar == '!') //символ окончания строки
{= S.toInt(); //перевод string в integer
{_1+=1; //счетчик прерываний (числа импульсов с 1-го энкодера)
{_2+=1; //счетчик прерываний (числа импульсов с 2-го энкодера)
}timer_1() //подпрограмма, запускаемая каждые T мс
{_1 = time_1; //число импульсов с 1-го энкодера _1 = 0; //обнуление счетчика прерываний_2 = time_2; //число импульсов с 2-го энкодера_2 = 0; //обнуление счетчика прерываний
//алгоритм стабилизации скорости= round((MaxEnk/100)*U); //необходимое число импульсов на энкодере для установления нужной скорости(enk == 0) //если число импульсов равно 0
//определение ШИМ для 1-го двигателя(spe_1enk) //если число импульсов с 1-го энкодера больше заданного
shim1 = round(shim1-K); //уменьшение ШИМ для 1-го двигателя
}(shim1>P) shim1 = P; //ограничение ШИМ(shim1<0) shim1 = 0;
//определение ШИМ для 2-го двигателя(spe_2enk) //если число импульсов с 2-го энкодера больше заданного
shim2 = round(shim2-K); //уменьшение ШИМ для 2-го двигателя
}(shim2>P) shim2 = P; //ограничение ШИМ(shim2<0) shim2 = 0;
//установление уровней ШИМ для двигателей
analogWrite(pvmPin1, shim1);(pvmPin2, shim2);
Похожие работы на - Разработка алгоритмов для поддержания стабильной скорости движения мобильного робота с дифференциальным приводом Курсовая работа (т). Информационное обеспечение, программирование.
Статья: Участие России в деятельности "Большой восьмерки"
Реферат: День освобождения тибетцев от крепостного рабства
Урок Письма Конкурс Сочинений 2022
Дипломная работа по теме Модернизация системы управления сушильной частью БДМ №1 ОАО 'ПЗБФ' с разработкой системы управления влажностью бумажного полота
Контрольная работа: Характеристика основних фінансово-промислових груп України
Графика Как Вид Изобразительного Искусства Реферат
Реферат: Картина Куинджи А.И. "Лунная ночь на Днепре"
Реферат: Принципы формирования и предварительной подготовки инвестиционных проектов
Реферат На Тему Основные Функции Семьи
Реферат: Plutonium Essay Research Paper Plutonium Plutonium is
Даланың Ұлы Әдеби Эссе
Организация Хранения Документов Реферат
Контрольная работа по теме Історія книги
Реферат: Варшавский договор 1920
Дипломная работа по теме Модернизация трансформаторной подстанции
Реферат На Тему Робот
Контрольная работа по теме Туристская характеристика Забайкалья
Реферат по теме История болезни инфекционніе болезни
Курсовая работа: Финансовые риски
Научные Открытия Древнего Рима Реферат
Реферат: Определение общения
Реферат: Традиционное природопользование, сохранение этнокультурного разнообразия в условиях социальных трансформаций
Похожие работы на - Акционерное общество как субъект гражданского права