Если вы никогда не видели в действии перевернутый маятник — это весело. Еще интереснее реализовать его. Это Интернет вещей? Это теория управления? Это ИИ? Это может быть что угодно — и я уже упоминал, что это весело?
Что такое перевернутый маятник?
Что ж, если вы возьмете палку и попытаетесь удержать ее на пальце, у вас будет правильная идея. Большинство перевернутых маятников реализовано в виде небольшой приводной тележки с рычагом, поворачиваемым на шарнире тележки. Тележка может двигаться влево и вправо и тем самым прикладывать ускорение — или, если хотите, силу — к концу маятника:
Есть несколько вариаций основной идеи — например, в видео есть поворот на 360 градусов, поэтому он начинается с опущенного положения.
Это классическая проблема в теории управления, и это была одна из первых проблем, которые я решил с помощью обучения с подкреплением — но это был всего лишь симулированный перевернутый маятник, а реальный намного лучше.
Бен Винер и Филип Цукер создали ZIPY — Zippy Inverted Pendulum Yakshave — после того, как прошли курс обучения недостаточно управляемым роботам и хотели чего-то, что не было бы просто «хромой симуляцией».
Реальный мир также может усложнять задачу, чем симуляция. Оборудование представляет собой тележку, напечатанную на 3D-принтере, с двигателем постоянного тока и ременным приводом. Маятник, мешалка для краски, закреплен на поворотном энкодере, который измеряет угол. Второй поворотный энкодер прикреплен к ремню и показывает положение тележки. Контроллер представляет собой Arduino Uno, который ограничивает точность до 600 позиций на оборот.
В программном обеспечении реализованы два контроллера: один для поднятия вехи в нужное положение, а другой для удержания ее в этом положении. Контроллер балансировки основан на линейно-квадратичном регуляторе (LQR), реализованном на Python.
Вы можете увидеть результаты:
Пока интересно узнать, что не сработало. Наблюдение за положением с помощью маркеров и системы технического зрения OpenCV вроде как сработало, но оказалось сложнее, чем ожидалось, из-за ложных объектов в кадре и задержки обработки. Пока они не реализовали алгоритм обучения с подкреплением.
Если вы хотите попробовать свои силы, весь код и файлы 3D-принтера доступны. Такие проекты стоит делать только для того, чтобы узнать, каков мир на самом деле.