Comments 22
я еще хотел сделать reinforcement learning, чтобы он сам вставать научился, может в будущем :)
Сразу об этом подумал. Работал с таким примером маятника Self-Contained Cartpole Swingup Task
решаемым, предложенным в том же репозитории, методом эволюционирующих сетей. Учитывая что у вас физическое устройство уже собрано интересно натренировать модель и дать в управление реально устройство.

Ключевое слово тут — модель и моделирование. Такие задачки как раз удобно решать на модели в симуляции, а потом, когда все отлажено, генерить готовый код для прошивки. Только контроллер должен быть реал-таймовый, а с Ардуино могут быть проблемы в этом месте.

А чем в вашем понятии реал-таймовый контроллер отличается от ардуино? Точнее чего нет в ардуино, что оно не может выполнять роль реал-тайм контроллера по вашей терминологии?

Реал-таймовый контроллер — это тот, который способен выполнять управляющую программу в режиме жесткого реального времени. Если Ардуино так может -то пожалуйста.


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


Чтобы сделать ее реалтаймовой надо бы:


  • функция loop должна вызываться по прерыванию таймера или с определенной частотой и гарантированно выполняться за время до следующего прерывания.
  • период вызова должен быть выбран таким, чтобы удовлетворял критерию устойчивости и регулируемости системы (чем меньше, тем лучше, ограничение в производительности процессора и I/O)
  • все функции, которые могут привести к не детерменируемому времени исполнения функции, должны быть убраны из этого кода (например printы)
  • все второстепенные функции должны иметь меньший приоритет, чем вызов управляющей функции и не прерывать ее исполнение.
  • Если функция loop не выполняется за указанное время, ватчдог должен сбрасывать контроллер и приводить систему в устойчивое состояние — это отказ.

Применив этот подход, вам будет:
а) легче писать и отлаживать программы для управления такими вещами, и они станут соответствовать моделям (так как модели обычно моделируются с фиксированным шагом симуляции, и у автора, вроде тоже)
б) в железе все начнет работать гораздо лучше, вы сможете повысить частоту работы контроллера, а следовательно сделать его более устойчивым, уменьшить время реакции.


Если парадигма программирования Arduino так не позволяет сделать — то вот вам и проблема.

Отлично. Замечания по правилам написания ПО вы написали верно. А ардуино как контроллер (железяка) то чем не угодил так и не объяснили?

Контроллер для меня — это железо + софт. Если там есть возможность забебехать такой таймер, есть ватчдог, а ввод/вывод сделан на детерминированных функциях/регистрах, то железом может быть и Ардуино.

Было бы круто запрограммировать еще режим маятника Капицы, когда никакой обратной связи нет, подвес просто вибрирует, отчего перевернутое положение становится устойчивым.
Спасибо. Очень качественное изложение. И очень качественный гитхаб проекта. Скачал себе немного поиграться :)
кто хочет сделать свой обратный маятник.

А можно узнать, зачем хотеть его делать? Честно, интересно.
Я пока вижу два варианта:
1. Игрушка (как на видео)
2. «сегвей».
Или есть еще что-то?
Кстати по данной теме есть еще интересный пример — обратный маятник Капицы ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%8F%D1%82%D0%BD%D0%B8%D0%BA_%D0%9A%D0%B0%D0%BF%D0%B8%D1%86%D1%8B, когда равновесие в верхней точке становится устойчивым при приложении колебаний к точке подвеса в вертикальном направлении. Это как раз иллюстрирует пример из приведённого видео, когда за счёт некоторых доработок неустойчивую систему можно скорректировать youtu.be/h7nJ6ZL4Lf0?list=PLMrJAkhIeNNR20Mz-VpzgfQs5zrYi085m&t=464
Это же физическая модель популярного бенчмарка для задачи обучения с подкреплением. CartPole. Там суть в том (если вы вдруг не интересовались), что, грубо говоря, по фотографии этой тележки (снимок с экрана / пиксели) НС дает команду влево/вправо/на месте. То есть все происходит внутри нейросетевой функции.

Я бы посмотрел в учебники типа "Автоматизированный электропривод типовых производственных механизмов и технологических комплексов", там и без обратной связи есть автоматизированные схемы управления и уравнения двигателей разнообразных.

оно собиралось исключительно в учебных целях? чтобы теорию с практикой сопоставить? или для чего-то еще?
В первом уравнении первой системы уравнений ошибка, знак перед g*sin(theta) должен быть минус (-g*sin(theta)). В следующей системе уравнений уже всё верно.
Спасибо за статью!

p.s. я тут новенький, кто-нибудь подскажет можно ли вставлять tex-формулы в комментарий?
Only those users with full accounts are able to leave comments. Log in, please.