Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2018, 19:41

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Балансирующий робот.
СообщениеДобавлено: 27 ноя 2017, 14:35 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
Всем здравствуйте.

Сделал я балансирующего робота. Вернее делаю...
Стоит (на месте) неплохо, а вот ехать со стабильной скоростью - никак не получается.

Железо почти целиком B-robot. А вот программу взять не могу.
Потому как мои знания языка С - околонулевые. :(
Делаю всё в Algorithm Builder. Ну привык я. Подсел, можно сказать.
Ну да не в "C vs ASM" дело. Вопрос, заморочка у меня не программная, а физико-математическая, так сказать.

Вот "выжимка" из исходников B-robotа. Реализовал этот алгоритм в AB.
Show

Но в силу слабых знаний С не совсем уверен в правильности прочтения исходников.
Я всё это понял так:

3-5 строки
Получаем текущий угол от MPU.

9-16 строки
Вычисляем скорость. Среднюю. Комплиментарным фильтром. Тут нюанс: angular_velocity.
Этой поправкой сдвигаем отстающую по времени среднюю скорость (estimated_speed_filtered) поближе к
мгновенной ( actual_robot_speed). Здесь надо искать компромисс. Чем ближе средняя к мгновенной по времени,
тем ближе она и по форме, т.е. эффект усреднения уменьшается.

20-39 строки
ПИ регулятор целевого угла (target_angle). К этому углу второй регулятор (Stability control) постоянно
стремится привести положение (angle_adjusted) робота.
Всё вроде просто, но именно тут и "не работает". Ниже на видео видно разницу между П и ПИ регуляторами.

44-75 строки
Вот тут непонятно тоже.
Написано "PD controller"
Но "плюс" перед "равно" в 47й строке ( control_output += stabilityPDControl(dt, angle_adjusted, target_angle, Kp, Kd);)
превращает П в И, а Д в П. Интегрирует PD, превращая его в PI.
Я не прав?

Спрошу чуть по другому.
Если переделать 47ю и 69ю строки из:
47я - control_output += stabilityPDControl(dt, angle_adjusted, target_angle, Kp, Kd);
69я - output = Kp * error + (Kd * (setPoint - setPointOld) - Kd * (input - PID_errorOld2)) / DT;
в:
47я - control_output = stabilityPDControl(dt, angle_adjusted, target_angle, Kp, Kd);
69я - output = Ki * error + (Kp * (setPoint - setPointOld) - Kp * (input - PID_errorOld2)) ;
получится то же самое?

80я строка и далее уже неинтерсно. Устновка моторов, подъём, управление, монитроинг...

Я переделал 47ю и 69ю, сделав "PD с плюсом" в "честный" ПИ, вернее полный ПИД регулятор.
На месте он "держит" робота вполне себе неплохо. А вот с движением...
Мож я неправильно всё (или частично) понял. Мож эти исходники далеко не финальные.

Подозреваю, что оба регулятора должны быть полноценными ПИДами. (Блин. Это ж надо было так их обозвать. :) ).
Не ПД, не ПИ. А все три составляющих в каждом нужны.
Роликов про это на ютубе море, а поговорить - не с кем. Только Mikhail Momot откликнулся.
Собственно этот пост обращён к нему.

Вот ролик с интегральной составляющей в speedPIControl:
https://www.youtube.com/watch?v=oaw-GQ3crsg
Изображение
Вот без интегральной составляющей в speedPIControl:
https://www.youtube.com/watch?v=f8I7JVVnnfU
Изображение
Под ссылками картинки того, что передал робот во время этих "заездов" в комп.
Синий на картинках - "нужная" скорость, та что я задаю с пульта.
Красный - средняя (estimated_speed_filtered).
Жёлтый - ошибка между ними.
Зелёный - целевой угол (target_angle).
Коричневый - интегральная составляющая.

Когда интегральная есть, держится на наклонной поверхности, возвращается в исходную точку если толкнуть,
но едет постоянно разгоняясь и тормозя.
Если нет, едет ровно, но если вовремя не остановить - падает.
Могу управлять переменной target_angle напрямую, с пульта наклоном. При определённом навыке получается.
Даже прикольно, этакий тренажёр.
Но хоцца "полный автомат", чтоб пультом задавать нужную мне скорость, а он уж сам...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 13 янв 2018, 18:45 
Здравствуйте!

Зарегистрирован: 13 янв 2018, 15:00
Сообщения: 1
Откуда: Санкт-Петербург
И как решилась проблема?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 17 янв 2018, 08:06 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
да никак...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 17 янв 2018, 16:04 
Старожил
Аватара пользователя

Зарегистрирован: 28 мар 2012, 10:33
Сообщения: 1146
Откуда: Сочи
У микрочипа есть аппноут по перевернутому маятнику. Поищите
Там они вывели регулировку коэффициентов п и д на переменные резисторы и изменяя их значение наблюдали реакцию

А вот он
http://ww1.microchip.com/downloads/en/A ... 00964A.pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 17 янв 2018, 17:03 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
Не то.
ПИД у меня давно подобран - работает. "Первый" ПИД, удерживающий к целевому углу.
А вот с установкой этого самого "целевого угла" - проблема...
Там просто ПИДом, похоже не обойтись.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 26 мар 2018, 09:17 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 594
Откуда: Киев
Извините за то, что влезаю не в своё дело. Но целевой угол определяет не скорость, а ускорение. Для нахождения скорости его нужно интегрировать. Тогда управление по скорости движения будет в два этапа:
1) задаём максимально возможное ускорение, при котором робот устойчив, задачей целевого угла.
2) при достижении заданной скорости целевой угол нужно уменьшать, вплоть до нуля при равномерном движении. Интегратор здесь как раз поможет.
И при торможении всё в обратном порядке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 29 мар 2018, 13:52 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
Ну почему не своё...
Тут всё.. наше. :)

" Для нахождения скорости его нужно интегрировать." Интегрировать целевой угол.
Не понимаю.

Понимаю, что надо "наклонить" для начала разгона.
По достижении нужной скорости убрать "наклон", но не до нуля (до исходного). Иначе остановится.
Чтобы не останавливался надо оставить наклон (меньший чем для разгона), но не нулевой.
Есть же сопротивление качению, которое надо компенсировать.
Компенсировать постоянно, вернее непрерывно, т.к. это сопротивление качению непрерывно меняется (спуски, подъёмы, ямки, кочки).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 17 май 2018, 05:01 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 758
Я когда-то считал эту конструкцию. Там по скорости неустойчивое звено должно быть в регуляторе. Грубо говоря, чтобы начать движение вперед, нужно сперва колёсами отъехать чуть назад, завалив тем самым корпус вперед, после чего стабилизация по углу наклона должна выровнять это чудо.Надо будет вспомнить...

P.S. Вах... Как же приятно снова заниматься железом :). Нафиг этот c#... Уволюсь нафиг.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 17 май 2018, 21:45 
Старожил
Аватара пользователя

Зарегистрирован: 28 янв 2010, 20:18
Сообщения: 462
Не надо в рукопашную продумывать такие детали как наклон перед стартом. Надо сделать контур стабилизации который держит заданное положение системы. Поверх него уже подавать требуемую траекторию.

Я бы начал с модели и определения параметров системы, затем нашел бы подходящие коэффициенты регулятора и проверил как работает на модели.

1) Очень странно брать угловую скорость каким-то фильтром имея датчик угловой скорости;
2) Рассматривайте вектор состояния их 4-х переменных
- угол
- угловая скорость
- линейное положение
- линейная скорость
Регулятор тогда будет функцией от четырем параметров, четыре коэффициента.

Вроде бы так, модель я вот здесь брал, делал давно и подробностей сейчас не помню.

https://pdfs.semanticscholar.org/98d9/3 ... ed35b3.pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 18 май 2018, 10:05 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
amaora писал(а):
- угол
- угловая скорость
- линейное положение
- линейная скорость

Это всё есть.
Похоже, маловато будет...
Чую, надо ещё и ускорение.

Ссылки на математику это, конечно, круто, но я троечник по математике. :)
С физикой бы разобраться...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 18 май 2018, 14:50 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 758
Должно работать. У меня в лаборатории был стэнд с обратным маятником. Отлично работал на этих четырех сигналах. Управление по скорости отлично отрабатывалось. Система стабилизации была полностью линейной.

amaora все правильно говорит. Не надо никаких искусственных наклонов. Все наклоны должен отрабатывать регулятор. (собственно потому и неустойчивое звено в регулятор вводится).

Лишние сигналы не нужны. Когда есть лишние сигналы, сложнее сделать устойчивый контур.

P.S. На самом деле, эта штука даже без сигнала по углу работает (как ни странно), но с плохим качеством. На досуге пересчитаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 18 май 2018, 14:56 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 758
Попробую вечером пересчитать. Надо вспомнить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 18 май 2018, 18:48 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
А ускорение?
Без него обойтись можно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 18 май 2018, 19:18 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 758
Использование производной скорости (то есть ускорения) в законе регулирования может улучшить динамику. Но ухудшит устойчивость.
А как регулируемая величина ускорение бесполезно, так как относительно него не выполняется закон непрерывности.

Иначе говоря, зачем управлять ускорением, когда можно напрямую управлять скоростью.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 18 май 2018, 19:20 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 758
Да... Если хотите получить движение с постоянной скоростью, обратная связь по линейному положению не нужна. Это только для управления по положению.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 19 май 2018, 03:52 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
Ну если у меня сейчас всё "как надо", то почему скорость "пульсирует"?
Плавает вокруг заданной от нуля до удвоенной.
Какой должен быть алгоритм регулировки скорости? На "пальцах", так сказать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 19 май 2018, 19:50 
Старожил
Аватара пользователя

Зарегистрирован: 28 янв 2010, 20:18
Сообщения: 462
u = K1 * w + K2 * a + K3 * (s - s_sp)

u - управляющее воздействие (момент создаваемый мотором, то есть ток через него),
w - угловая скорость,
a - угол,
s - линейная скорость,
s_sp - заданная линейная скорость.

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

Та модель по мой ссылке похоже не подойдет, там тележка и на ней маятник, а у вас одно твердое тело на колесах, так ведь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 20 май 2018, 08:14 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
Тело - да, нифига не мягкое :)

Верно ли я понимаю ваше формулу:
а - (угол) - текущий угол наклона робота, по сути данные из MPU6050.
w - (угловая скорость) - скорость падения робота (НЕ скорость вращения колёс), т.е. это дифференциал от а (угла).
s - s_sp - это "ошибка" скорости движения робота.

Не маловато параметров? Этого будет достаточно для уверенного движения по "пересечённой" местности?

У меня сейчас аж вот такой алгоритм. Взял я его отсюда. Возможно исказил, перевёл, так сказать неправильно.
Этот алгоритм очень похож на вот это, там в конце третьего абзаца есть ссылка (Here is a diagram) на собственно алгоритм.
И ещё там есть видео (надо скачивать) как он движется по "пересечённой" местности. КРУТО. Мне б такую... :)

На ютубе полно роликов, где подобные девайсы колесят по идеально ровному полу. Роликов много, а описания нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 20 май 2018, 14:29 
Старожил
Аватара пользователя

Зарегистрирован: 28 янв 2010, 20:18
Сообщения: 462
Да верно. Параметров достаточно, не надо усложнять.

Ток через двигатель контролируете? Или только заполнение модуляции задаете? Надо чтобы выход этой формулы u задавал ток через двигатель (и делал это быстрее чем идут механические процессы), иначе неправильно будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 20 май 2018, 16:36 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
Двигатели - шаговые.

Чёт сомневаюсь я в работоспособности этой формулы...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 20 май 2018, 18:31 
Старожил
Аватара пользователя

Зарегистрирован: 28 янв 2010, 20:18
Сообщения: 462
Тогда момент сложно будет задать, регулятор надо как-то иначе строить. Для коллекторного мотора бы подошла формула.

Добавка: А почему бы тогда не задавать ускорение? То что выдал регулятор использовать как величину изменения скорости в единицу времени, это будет близко к управлению моментом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 21 май 2018, 12:58 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 758
Тонко намекаю, что сигнал по скорости должен браться со знаком минус. Иначе говоря, коэффициент при скорости должен быть отрицательным.

Надеюсь, все таки дойдут руки схему нарисовать.


Последний раз редактировалось Mirmik 21 май 2018, 13:05, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 21 май 2018, 13:00 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 758
При отладке регуляторов полезно снимать телеметрию. На графиках все прекрасно видно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 21 май 2018, 14:13 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 сен 2011, 11:02
Сообщения: 30
Откуда: Бурятия
Блин...
Мужики...
:)
При всём уважении - пишете очевидные вещи.
И телеметрия есть, и за плюсы/минусы я в курсе...
И ускорение надо как то освоить...

КАК?
Мне б конкретики. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Балансирующий робот.
СообщениеДобавлено: 21 май 2018, 18:09 
Старожил
Аватара пользователя

Зарегистрирован: 28 янв 2010, 20:18
Сообщения: 462
DPANYTA писал(а):
Блин...
Мужики...
:)
При всём уважении - пишете очевидные вещи.
И телеметрия есть, и за плюсы/минусы я в курсе...
И ускорение надо как то освоить...

КАК?
Мне б конкретики. :)


Ускорение я предлагаю задавать. Или говорите, что задаете сейчас, что на выходе регулятора?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB