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