ARDUINO Балансирующий робот на MPU6050 и шаговых двигателях

Maksim Tsyganok

✩✩✩✩✩✩✩
7 Дек 2020
5
7
Привет, разработал свой вариант балансирующего робота на ардуино, MPU6050 и шаговых двигателях.
Создавал для кайфа и своего ютуб канала Max Gear
Робот при хорошей настройке ПИД коэффициентов балансирует очень хорошо.

Алгоритм работы : Берём данные с MPU6050 с помощью библиотеки I2Cdevlib, вычисляем угол наклона к вертикальной оси, засовываем в два ПИД регулятора последовательно и получаем скорость вращения колёс. Затем по таймеру 32000 раз в секунду хитрым кодом идейно подсмотренным в прошивке GRBL для чпу станков делаем шаги. В итоге получаем плавно балансирующего двухколёсного робота, на воздействия извне реагирует очень бодро :)

Настройка : Заключается в подборе ПИД коэффициентов, Алекс писал на эту тему ролики, сложность в том что регулятора два, в самой прошивке я написал подробные комментарии ко ВСЕМУ коду. Я подобрал неплохие коэффициенты гадая на кофейной гуще и гороскопам, а затем подогнав все более точно.

Настройка ПИДов осуществляется изменением define значений в главном файле прошивки MaxGear_BalancingRobot.ino:
дефайны ПИД коэффициентов:
// коэффициенты ПИДов, определяют поведение робота
#define SPEED_KP 0.000015 // позволяет достичь целевой скорости
//#define SPEED_KI 0.0000008
#define SPEED_KI 0.0000000  // когда > 0, у робота появляется стремление сократить пройденный путь, посколько интеграл от скорости - путь
#define SPEED_KD 0.00000027 // позволяет с меньшими колебаниями достичь целевой скорости

#define ANGLE_KP 2100.0 // позволяет достичь целевого угла
//#define ANGLE_KI 8500.0
#define ANGLE_KI 300.0 // убирает статическую ошибку отклонения угла от целевого
#define ANGLE_KD 180.0 // позволяет с меньшими колебаниями достичь заданного угла
Реализация : Прикрепляю полную схему устройства и внешний вид, корпус напечатан PETG пластиком и представляет из себя простую раму для крепления всех компонентов винтиками да горячими соплями.
ТАМБ.jpgПОЛНАЯ СХЕМА РОБОТА.png

Что можно улучшить:
Не реализовано дистанционное управление, изначально хотел взять esp8266 и сделать управление роботом через браузер любого устройства, столкнулся с проблемой - нельзя из javascript создать UDP соединение, если есть знатоки подскажите может я ошибаюсь и возможно сделать кроссплатформерное управление с минимальной задержкой.

Также питание от 3 банок лития получается 12.6 вольт максимум, что для шаговиков маловато :) На подсевших батареях поведение робота постепенно ухудшается, легче вызвать пропуск шагов. Как вариант взять 4 банки и стабилизировать их чем-то импульсным, стабильное напряжение обеспечит одинаковое поведение робота вне зависимости от просадки банок.

Все файлы необходимые для реализации робота можно найти по ссылке ссылке
Примерная стоимость комплектующих 2800 рублей

Робот в действии, разъяснения как он устроен и процесс сборки и частично настройки:

Спрашивайте, предлагайте, надеюсь кому-то пригодятся мои наработки :)
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,799
579
44
Для балансирующих роботов центр тяжести (аккумуляторы и в идеале двигатели) нужно поднимать чем выше - тем лучше, так ему проще балансировать.
 
Изменено:

kDn

★★★★★✩✩
18 Ноя 2019
1,109
437
Что можно улучшить: Не реализовано дистанционное управление, изначально хотел взять esp8266 и сделать управление роботом через браузер любого устройства, столкнулся с проблемой - нельзя из javascript создать UDP соединение, если есть знатоки подскажите может я ошибаюсь и возможно сделать кроссплатформерное управление с минимальной задержкой.
Зачем вам UDP? Читайте тему по фреймворку и получите управление через вебсокеты за день изучения.
 
  • Лойс +1
Реакции: Maksim Tsyganok

Maksim Tsyganok

✩✩✩✩✩✩✩
7 Дек 2020
5
7
@Геннадий П, интуитивно понимаю о чем вы, а в идеале бы подробное доказательство с точки зрения физики, с конкретным критерием легкости) Я видел статьи научные на тему таких роботов, но что-то вдуплить в их формулы мне не хватает знаний..

@kDn, спасибо большое за наводку, кажется это прям то что нужно! бегло пролистал текст и не понял, какие задержки между отправкой команды и её исполнением?
 

kostyamat

★★★★★★✩
29 Окт 2019
1,097
630
Я вот думаю - робот конечно хорошо, но почему на шаговиках не делают подвесы-стабилизаторы для камер? Для дронов например. Ведь алгоритм схожий. Находил проекты на сервах, ну и само собой на трехфазных бесколекторниках (это вообще классика). А на шаговиках почему нет? У кого какие мысли по этому поводу, скорости шаговика не хватает, или что?
 

Maksim Tsyganok

✩✩✩✩✩✩✩
7 Дек 2020
5
7
Избыточное цитирование
Я вот думаю - робот конечно хорошо, но почему на шаговиках не делают подвесы-стабилизаторы для камер? Для дронов например. Ведь алгоритм схожий. Находил проекты на сервах, ну и само собой на трехфазных бесколекторниках (это вообще классика). А на шаговиках почему нет? У кого какие мысли по этому поводу, скорости шаговика не хватает, или что?
тяжелые и слабые, для полётов так точно
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,799
579
44
@Maksim Tsyganok, Ну, самый простейший пример:
Возьмите две палки, длинную и короткую. Какой проще балансировать? Конечно же длинной, т.к. у нее центр тяжести гораздо выше.
То же самое, если взять две одинаковые палки и у одной привязать груз к самому верху, а у другой к нижней части. Балансировать проще той, у которой груз сверху, т.к. центр тяжести у нее выше.

А двигатели перемещать из нижней части нужно для облегчения, чтобы уменьшить инерцию нижней части.
 
  • Лойс +1
Реакции: Maksim Tsyganok