Вот народ массово предлагает ставить энкодеры на колеса и, более того, ставят... Как я понимаю, число импульсов на оборот там не очень большое и в основном они используются только для мониторинга колеса, а не для прямого управления в петле короткой обратной связи. Поэтому вопросы:
Вопрос №1 Позволяют ли такие энкодеры держать скорость колеса? Например ехать мееедленно, но с хорошим моментом (как серва).
Вопрос №2 Позволяют ли такие энкодеры держать позицию колеса? Например повернуть на четверть оборота (как серва).
Понятно, что зависит от софта, но есть ли живые примеры такого использования?
Я делал работу с энкодерами под RealRobot'а - у него одинарные энкодеры, но в принципе работало - ставил робота между двумя бутылками, он делал вокруг них восьмерку и возвращался на место с некоторой погрешностью.
Регулировать ПИДом можно либо скорость, либо расстояние, либо какую-то их линейную комбинацию. Существенные проблемы есть в сохранении траектории - т.е. совсем независимые ПИДы плохо делать.
К сожалению код не могу найти, давно было
Проект [[Open Robotics]] - Универсальные модули для построения роботов
=DeaD= писал(а):Регулировать ПИДом можно либо скорость, либо расстояние
Ну, понятно, что величины связаны. Меня в конкретном случае больше интересует скорость. Давайте пока про нее говорить.
Допустим у меня есть бот, который может кататься со скоростью метр в секунду. Моторчики "игрушечные" (читай "плохенькие"). Я хочу, чтобы он поехал со скоростью пять сантиметров в секунду. Нагрузка плохопредсказуемая (может тапок под колесо попасть, например). Понятно, что без ОС такое сделать нереально... (Если снизить пропорционально напряжение - движок просто встанет.)
Каково должно быть разрешение энкодера? Реально ли сделать такое на, ну например, пололушных колесах с энкодерами? Имеет ли смысл считать, например, период между каждым импульсом энкодера или нужно сильно усреднять? и т.п.
Обычно это обозначает, что у моторчика маленький динамический диапазон, т.е. регулировать скорость можно лишь в небольших пределах. Кроме того, зачастую в таких моторчиках есть сухое трение, т.е. для того чтобы двигаться медленно, надо сперва "тронуться" на больших оборотах. В итоге у нас получается объект управления с нелинейным звеном и маленьким диапазоном. Пытаться хоть что-то сделать с таким - малореально. Пололушные движки у меня этим не страдают (ну от нагрузки зависит, но у меня они могут как ползти, так и довольно резво ездить).
Нагрузка плохопредсказуемая (может тапок под колесо попасть, например).
Если разрешение энкодера маленькое, то начинают исхитряться и считать не количество импульсов за единицу времени, а время между импульсами которое также пропорционально скорости движения. Ну а дальше измеряем рассогласование между желаемым временем между импульсами и текущим временем и изменяем напряжение на двигателе в соответствии с каким-то законом, например пропорциональным.
Каково должно быть разрешение энкодера?
Оно может быть любым, но тогда увеличиться время реакции на внешнее возмущение.
Вот мои эксперименты с плохими энкодерами (1 импульс на сантиметр пути) и плохими движками. Движение на заданное расстояние с заданной скоростью. http://www.youtube.com/watch?v=7qulIGaBEU8
Виталий писал(а):В итоге у нас получается объект управления с нелинейным звеном и маленьким диапазоном.
Ну вот и я про то же... как тут выкручиваться?
Виталий писал(а):Пытаться хоть что-то сделать с таким - малореально.
Ну вот серва, между прочим, позицию держит очень неплохо (для "игрушечного" движка). Хотя простая по сути как валенок. Там, правда, и обратная связь по скорости есть (то есть это ПД-регулятор все-таки). Что-то не верится, что там движки на порядок лучше... ну по крайней мере в тех дешевеньких сервах, в которые я лазил.
А вообще, по вашим ощущениям (на примере этого танка, скажем) можно ли ползти очень медленно? (в ролике этого не заметил) - ну например на 1/10 или 1/20 номинала?
Michael_K писал(а):Я хочу, чтобы он поехал со скоростью пять сантиметров в секунду. Каково должно быть разрешение энкодера? Реально ли сделать такое на, ну например, пололушных колесах с энкодерами? Имеет ли смысл считать, например, период между каждым импульсом энкодера или нужно сильно усреднять? и т.п.
Реально конечно, разрешение энкодера зависит от допустимой ошибки по расстоянию (по скорости примерно так же, но не пробовал ), я бы посоветовал, чтобы допустимая ошибка была в пределах 5-10 кликов энкодера, чтобы ПИД-регулятор успевал её исправить. Считать время между импульсами энкодера 1 раз пробовал, как-то не очень порадовало, с тех пор забил на это дело.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
=DeaD= писал(а):...в пределах 5-10 кликов энкодера, чтобы ПИД-регулятор успевал её исправить...
Ну, я бы тоже так предположил, но вот смотрю на пололушные колеса - там всего 12 дырок на оборот (ну пусть даже 48, если оба фронта на обоих глазах ловить и расположены они достаточно симметрично).
Это ж насколько тормозная ОС получается - 10 импульсов - это аж целых пять сантиметров два с половиной сантиметра... Он на таком расстоянии успевает встать до нуля и разогнаться до максиумума, то есть на дистанции в 2.5 сантиметров считать скорость "примерно постоянной" ну никак нельзя. Хм...
Добавлено спустя 3 минуты 14 секунд: Наврал - не пять, а два с половиной, но тоже ведь прилично...
Не-не... меня интересуют практические результаты. Проблема понятна, как ее лечить "правильно и красиво" - тоже понятно. Но может существуют и другие решения или хотя бы реальная практика, чего достичь удается, чего нет. Ну вот например в мувике Виталия видно, что он подбирал (или вычислял???) параметры регулятора, чтобы убрать перерегулирование и т.п.
Добавлено спустя 5 минут 33 секунды:
RealRobot писал(а):Сам бот едет по заранее заложенному маршруту в декартовой плоскости по точкам (х,y)
я про координаты не спрашивал. Я спрашивал, как крутить игрушечный мотор медленно и стабильно. Разницу чувствуете?
медленно и стабильно - по идее нужна ОС по току.. + ось по скорости..
«Как сердцу выразить себя? … Мысль изреченная есть ложь!» В этом мире меня подводит доброта и порядочность... "двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
что значит ЛУЧШЕ? стабилизация тока даст стабилизацию момента... по идее нужна подчиненка...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!» В этом мире меня подводит доброта и порядочность... "двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"