Прямолинейная езда - это камень преткновения для всех робототехников Факторов влияющих на неравномерность несколько: 1) разные двигатели (то есть теоретически они одинаковы, но жизнь показывает, что это не так) 2) разные редукторы(здесь имеет смысл врубить на полную мощность и дать "притереться" минут 10) 3) разные транзисторы Н-моста (и тут может быть веселая ситуация, когда один из двигателей едет вперед быстрее чем другой, а назад - наоборот) 4) разная зависимость работы транзисторов Н-моста от напряжения питания (напряжение питания меняет всё кардинально!) 5) моторы по-разному стартуют и тормозят (если нет активного торможения) (старт вероятно связан с тем положением в котором остановился мотор) В простейшем случае можно подобрать соотношение значения PWM которое подается на один двигатель и на другой. Я сам давно делал программу, которая на ходу, по энкодерам, отслеживала скорости вращения колес и выравнивала их, для различных скоростей, направлений, корректируя PWM. Значения PWM после удачного прямолинейного тестового заезда (5с) записывались в EEPROM, чтобы потом использоваться. Казалось бы, калибровка на реальной задаче (сначала был вариант раздельной калибровки колес), но даже такое ухищрение не помогло получить совсем прямолинейную езду. Скажу больше, иногда роботу не удавалось даже пройти тестовый заезд (5с) с равными скоростями на колесах. Особенно показательна бывает ситуация, когда робот с одной и той же жесткой программой движения "рисует" сильно разные траектории раз от раза. То есть присутствует еще некоторая случайная не систематическая ошибка.
Спасибо, содержательно) С ШИМ я играться уже пробовал, проблема в том что он каждый раз по разному левое колесо тормозит. Не угадаешь. Похоже энкодеры это единственный выход
я думаю вам поможет акселерометр в центре тяжести робота (либо между ведущими колесами если не полный привод) Боковой канал будет чуять центростремительное ускорение так же как это используется в системах курсовой устойчивости авто. Так что если поиграться с алгоритмом управления колесами по данным акселерометра - все будет ок
Как услышу офффигенную идею - так сразу хочется воскликнуть "проект в студию!". Лучше реализованный в железе.
К сожалению машинки меня мало интересуют я изучаю и занимаюсь сборкой авиа моделей(конкретно сейчас - квадрокоптером) безусловно акселерометр поможет при долгом заезде по прямой, а вот что будет на маленьких переменных скоростях... хз, все будет зависеть от точности акселерометра и от рук с головой того кто будет исследовать движение)
Существует простейший способ: Уменьшать скорость более быстрого двигателя пока робот не поедет по прямой, запомнить разницу и везде подстовлять её
простейший не значит "хороший". Я даже не уверен, что этот способ рабочий. Разница в тяге зависит не только от мотора, но и напряжения батарей, сопротивления качению, уклона и тд. Простейшая поправка - крайне ненадежный метод. ИМХО, нужно контролировать отклонение от прямой прямо в движении и подстраивать разнмицу программно каждые N миллисекунд. Например, как выше написали - акселерометром.
Чтобы контролировать "прямо" нужен критерий .. то есть "датчик" который будет показывать "не прямо" и насколько "в граммах". ПИД-регулятор решает проблему в большинстве простых применений. Можно даже реализовать "самообучение" этому регулятору. К сожалению, энкодер - ещё не панацея как датчик. Колеса могут проскальзывать и снова будет "криво" вместо прямо. Гироскоп - аналогично плохо видит "медленные" уклонения. Ему может помочь "компас", но в условиях сильных и/или нестационарных полей (по хатке) тоже не всё так кучеряво. Движение по линии на ИК-датчиках - можно реализовать "прямо" достаточно точно, с точностью отрисовки линии. Но, это же не ваш случай, верно? Как вариант ИК-датчик и следование по "маяку" (виртуальной линии)..
Регулировать "прямо" внешними направляющими!? - Может сразу уж рельсы проложить? Давайте определимся - что такое "прямо"? Обычно под этим понимается равенство расстояний до неких опорных линий (бордюры проезжей части) или поверхностей (стены коридора), или до опорной линии (классика движения по линии). Как определим состояние "прямо", так и будем его контролировать! Если определим как постоянство геомагнитного азимута - берем компас, равенство расстояний - далномеры, и т.д... Как вариант - проще всего "прямо" - у ракеты - куда направили при старте - туда и "прямо". Осталось только стабилизировать основные углы (крен/тангаж/рыскание - достаточно гироскопа) - если не было отклонений по этим углам, то и отклонений от "прямо" не будет - придет куда направили..
ПИД здесь вообще ничего не решает. ПИД хорош там, где инерционность системы известна. Да и ПИД зачем? Обычный интегратор сгодится.
Видимо, ПТУР идет не прямо, а на указанную мишень: Мишень перемещается - ракета ее ищет, и рыскает, а спираль, наверное, от закрутки ракеты. Прямо движется, например, снаряд из пушки, и то - условно - силу тяжести никто не отменял - так, что траектория снаряда не прямая, а баллистическая кривая, но прямой наводкой - можно считать, что прямая.
Господа офицеры, прошу вас учесть - кто сберег свои нервы - не спас свою честь. Проще - не всегда - лучше. Повторюсь: Предложения "делать прямо на..." без определения понятия/состояния "прямо" - не имеют смысла. В данном случае - "на энкодерах" решает не задачу "прямо", а задачу "проще"! - Мною освоено - хоть сейчас с закрытыми глазами не напрягаясь соберу прямоездящую тележку. И, плевать, что никто не знает, что такое "прямо", и доказать, что задача решена - невозможно!