Сборка балансировочного робота с дифференциальным приводом

8

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

Я как бы застрял на том, как запрограммировать его, чтобы он ездил, продолжая балансировать. Я думаю, что одним из способов было бы просто сделать так, чтобы управляющий вход двигателя действовал как нажатие. Таким образом, робот на мгновение выйдет из равновесия в том направлении, в котором я хочу, чтобы он двигался. Это кажется мне немного неуклюжим. Должен быть лучший способ сделать? Я думаю, что мне нужно объединить динамическую модель для балансировщика с дифференциальным приводом, но это немного выходит за рамки теории управления, которую я знаю.

Обновление От ответа Анортона У меня сейчас красивая матрица состояний.

Теперь о размещении полюсов: матрица A должна будет иметь размер 4x4 на основе нового вектора состояния. И тогда B должен быть матрицей 4x2, так как я могу контролировать только крутящий момент левого / правого колеса (вектор u = 2x1).

Возможно, мне нужно больше узнать об этом, но существует ли систематический способ определения матрицы А по расстановке полюсов? Мне кажется, для этого и еще более сложных примеров определение A путем догадки и проверки было бы очень сложным.

Обновление № 2 После небольшого прочтения, я думаю, что теперь понимаю. Мне все еще нужна динамика робота, чтобы определить матрицу А. Как только у меня будет это, я могу сделать установку полюсов, используя matlab или октаву.

JDD
источник
1
Какой тип подхода вы используете / какую теорию управления вы знаете? Я могу написать один подход, но это может быть супер базовый или супер продвинутый, в зависимости от вашего фона ... :)
apnorton
Спасибо! для старой конструкции с сервоприводами я вычислял угол наклона, используя данные гироскопа / акселерометра. Отправка этого на фильтр Калмана, а затем PID для положения сервопривода. Я хорош с дифференциальными уравнениями и хорошо с линейной алгеброй. Я все еще довольно новичок в управлении, так что, может быть, основной? Или оба, если хотите. Мне всегда интересно больше узнать :)
JDD
1
У меня есть только один подход, поэтому мой предыдущий комментарий действительно говорил, что его можно использовать в обоих направлениях (либо супер продвинутый, если вы только начинали с роботами, либо супер базовый, если у вас есть некоторые знания о средствах управления) ... На основании вашего предыдущего комментарий, у меня есть чувство, что я опередил. :) Мои знания по управлению очень скудны, но я добавлю туда свои 0,02 доллара ...
apnorton
Добро пожаловать в Robotics JDD. Лучше отредактировать дополнительную информацию в своем вопросе, чем добавлять ее в качестве комментария, чтобы комментарии можно было убирать (удалять) позже, и они перестанут отвлекать читателей от самого вопроса.
Марк Бут

Ответы:

8

Отказ от ответственности: я никогда не делал это сам, но видел только описание того, как это делается в «Контроле мобильной робототехники» компании Georgia Tech на Coursera. Мои знания о контроле тоже не точные. Таким образом ... возьми это с зерном соли.:)

Чтобы держать робота в вертикальном положении (и до сих пор), вы пытаетесь стабилизировать (отправить 0) штат x, где:

x=[leftVelocityrightVelocityangle from vertical]

Однако, когда эта система стабильна, скорости левого и правого колес будут 0, Итак, мы хотим смещение для целевой скорости:

xnew=[leftVelocityδLrightVelocityδRangle from vertical]
куда δ является целевой скоростью для любой из сторон.

Когда эта система стабилизируется, робот будет в вертикальном положении, и каждое колесо будет вращаться с желаемой скоростью.

Это основной подход / план. Завтра я отредактирую это с некоторыми подробностями (и с фактической математикой и т. Д.), Но я хотел, по крайней мере, опубликовать общую идею сейчас (В моем часовом поясе уже поздно, и у меня есть ранний класс, чтобы добраться до него.)

Отредактировано: о боже. Итак, я просто оглянулся на слайды, относящиеся к этому, в курсе Coursera (Раздел 4, слайд 29). Вы можете пойти и записаться в этот класс, чтобы просто загрузить этот набор слайдов ...:)

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

Иксзнак равно[vωφφ˙]

куда v это скорость сигвея, ω скорость вращения (насколько быстро робот поворачивается) и φ это угол от вертикали.

Мы хотим иметь желаемую скорость, поэтому давайте определим новый вектор состояния:

Икс~знак равноИкс-[vdωd00]знак равноИкс-δ

куда δ желаемая скорость и количество вращения (как видно выше).

Дифференцируя:

Икс~˙знак равноИкс˙-δ˙знак равноδ постоянноИкс˙

Таким образом, мы имеем

Икс~˙знак равноAИкс+ВU

куда A стандартная матрица коэф В является входной матрицей, и Uконтрольный вектор. Затем мы можем сказать:

Икс~˙знак равноA(Икс-δ)+ВU+Aδ
Но, основываясь на решении для A (от Coursera), Aδзнак равно0, Таким образом:
Икс~˙знак равноAИкс~+ВU

Теперь вы можете использовать расположение полюсов для определения правильных собственных значений и т. Д.

apnorton
источник
Огромное спасибо! Я тоже учился в классе Coursera, и мы, вероятно, не так уж далеки от знания контроля. Это оказывается намного сложнее проекта, чем я ожидал. Мне пока нравится ваша матрица состояний.
JDD
Ик! Похоже, я не отвечаю на это сегодня вечером! Я был на весенних каникулах на прошлой неделе и забыл о чем-то, что должно было быть, так что я сегодня был занят. Я отредактирую это завтра ...
apnorton
Нет проблем. Вчера я взорвал свой последний h-мост, пытаясь собрать его вместе, поэтому мне придется ждать замены.
JDD
Большое спасибо Anorton за помощь. Я думаю, я понимаю, как сделать это намного больше сейчас. Я обновил свой оригинальный вопрос. Как определить матрицы A и B все еще смущает меня.
JDD