Easyelectronics.ru

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

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



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

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

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

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

Железо почти целиком 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
Сообщения: 10
Откуда: Бурятия
да никак...


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

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

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


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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

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


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

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


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

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

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