Я уже построил двухколесный балансировочный робот, используя несколько сервоприводов непрерывного вращения и акселерометр / гироскоп. Я модернизировал сервоприводы для некоторых редукторных двигателей постоянного тока с 8-битными энкодерами, чтобы робот двигался во время балансировки.
Я как бы застрял на том, как запрограммировать его, чтобы он ездил, продолжая балансировать. Я думаю, что одним из способов было бы просто сделать так, чтобы управляющий вход двигателя действовал как нажатие. Таким образом, робот на мгновение выйдет из равновесия в том направлении, в котором я хочу, чтобы он двигался. Это кажется мне немного неуклюжим. Должен быть лучший способ сделать? Я думаю, что мне нужно объединить динамическую модель для балансировщика с дифференциальным приводом, но это немного выходит за рамки теории управления, которую я знаю.
Обновление От ответа Анортона У меня сейчас красивая матрица состояний.
Теперь о размещении полюсов: матрица A должна будет иметь размер 4x4 на основе нового вектора состояния. И тогда B должен быть матрицей 4x2, так как я могу контролировать только крутящий момент левого / правого колеса (вектор u = 2x1).
Возможно, мне нужно больше узнать об этом, но существует ли систематический способ определения матрицы А по расстановке полюсов? Мне кажется, для этого и еще более сложных примеров определение A путем догадки и проверки было бы очень сложным.
Обновление № 2 После небольшого прочтения, я думаю, что теперь понимаю. Мне все еще нужна динамика робота, чтобы определить матрицу А. Как только у меня будет это, я могу сделать установку полюсов, используя matlab или октаву.
:)
Мои знания по управлению очень скудны, но я добавлю туда свои 0,02 доллара ...Ответы:
Отказ от ответственности: я никогда не делал это сам, но видел только описание того, как это делается в «Контроле мобильной робототехники» компании Georgia Tech на Coursera. Мои знания о контроле тоже не точные. Таким образом ... возьми это с зерном соли.
:)
Чтобы держать робота в вертикальном положении (и до сих пор), вы пытаетесь стабилизировать (отправить0 ) штат Икс , где:
Однако, когда эта система стабильна, скорости левого и правого колес будут0 , Итак, мы хотим смещение для целевой скорости:
Когда эта система стабилизируется, робот будет в вертикальном положении, и каждое колесо будет вращаться с желаемой скоростью.
Это основной подход / план. Завтра я отредактирую это с некоторыми подробностями (и с фактической математикой и т. Д.), Но я хотел, по крайней мере, опубликовать общую идею сейчас (В моем часовом поясе уже поздно, и у меня есть ранний класс, чтобы добраться до него.)
Отредактировано: о боже. Итак, я просто оглянулся на слайды, относящиеся к этому, в курсе Coursera (Раздел 4, слайд 29). Вы можете пойти и записаться в этот класс, чтобы просто загрузить этот набор слайдов ...
:)
Трудная часть вычисленийA а также В матрицы (это большой беспорядок линеаризации). В любом случае, вы хотите сделать свою матрицу состояний следующим образом (не так, как указано выше - моя память была не совсем правильной):
кудаv это скорость сигвея, ω скорость вращения (насколько быстро робот поворачивается) и φ это угол от вертикали.
Мы хотим иметь желаемую скорость, поэтому давайте определим новый вектор состояния:
кудаδ желаемая скорость и количество вращения (как видно выше).
Дифференцируя:
Таким образом, мы имеем
кудаA стандартная матрица коэф В является входной матрицей, и U контрольный вектор. Затем мы можем сказать:
Теперь вы можете использовать расположение полюсов для определения правильных собственных значений и т. Д.
источник