Почему ваш двухколёсный робот не едет прямо

Одинаковые двигатели не вращаются с одинаковой скоростью. Разбираем, почему жёстко прописанные поправки мощности не работают и как добиться настоящего движения по прямой с помощью энкодеров.
Когда вы подаёте сигнал со 100-процентным коэффициентом заполнения на два одинаковых двигателя постоянного тока робота с дифференциальным приводом, робот почти всегда уводит влево или вправо. Причина в том, что два серийных двигателя постоянного тока никогда не бывают одинаковыми ни электрически, ни механически: небольшие расхождения во внутреннем трении, силе магнитов и сцеплении колёс дают разную частоту вращения при абсолютно одинаковом электрическом входе.
В классе или на соревновательной мастерской этот увод — одно из первых препятствий, которое выводит учеников из себя. Понимание того, почему так происходит и почему быстрые программные хитрости этого не решают, и есть мост между игрушечной робототехникой и настоящей инженерией.
Анатомия разброса двигателей
Небольшие мотор-редукторы постоянного тока — особенно распространённые в учебных наборах любительские двигатели в жёлтом корпусе — изготавливаются с широкими производственными допусками. Несколько микроскопических различий гарантируют, что двигатель A поведёт себя иначе, чем двигатель B:
- Намотка катушки и внутреннее сопротивление: медный провод, намотанный на якорь, немного отличается по длине и натяжению, что создаёт небольшую разницу в сопротивлении и противо-ЭДС (электродвижущей силе).
- Сила постоянных магнитов: у спечённых ферритовых магнитов есть небольшой разброс плотности магнитного потока, а он меняет отдаваемый момент.
- Трение щёточного контакта: механические щётки прижимаются к коллектору с разным усилием пружины, добавляя неравномерное сопротивление.
- Допуски редуктора: многоступенчатые редукторы с прямозубыми шестернями, установленные на такие двигатели, дают разное трение в зависимости от постоянства профиля зубьев, соосности валов и распределения смазки внутри.
Проблему усугубляют и механические факторы за пределами самого двигателя. Если одна резиновая шина посажена на обод на 0,5 мм глубже, её эффективный радиус качения меняется. Если аккумуляторный блок робота смещён на 10 мм влево от осевой линии, на левое колесо приходится большая нормальная сила и большее сопротивление качению. В итоге приводная база оказывается несимметричной.
Почему жёстко прописанные «поправки» всегда подводят
Первое, что приходит ученику в голову, — вручную уравнять двигатели в коде:
// The standard beginner workaround
motorLeft.setSpeed(255);
motorRight.setSpeed(238); // trim down the faster motorЭто называется разомкнутым управлением: команда отправляется, а результат в реальном мире считается совпадающим с запросом, хотя никто его не проверяет. Ручная поправка, может, и заставит робота проехать прямо три метра по гладкому линолеуму на свежих батареях, но в реальных условиях она стабильно разваливается:
- Кривые разряда батареи: когда за 45-минутный урок напряжение падает, двигатели постоянного тока теряют скорость нелинейно. Поправка, откалиброванная при 8,2 В, начнёт уводить в сторону, как только батарея просядет до 7,4 В.
- Изменение трения поверхности: переезд с гладкой плитки кабинета на офисный ковролин с коротким ворсом меняет сопротивление качению неодинаково для обеих шин.
- Тепловые изменения: по мере нагрева редукторов и обмоток при непрерывной работе внутреннее трение падает, и соотношение скоростей двух сторон смещается.
Решение: замкнутая обратная связь с энкодерами
Чтобы робот ехал прямо независимо от напряжения батареи и фактуры поверхности, микроконтроллер должен в реальном времени измерять, что на самом деле делают колёса. Для этого нужно замкнутое управление.
Проще всего добиться этого с помощью поворотных энкодеров на колёсах. Энкодер состоит из датчика (обычно оптического прерывателя или магнитного датчика Холла) и вращающегося элемента на валу двигателя или на колесе (щелевого диска или многополюсного магнитного кольца). Каждый раз, когда колесо поворачивается, датчик выдаёт импульсы.
| Подход к управлению | Механизм | Поведение при севшей батарее | Поведение на новой поверхности |
|---|---|---|---|
| Разомкнутое (фиксированный ШИМ) | Считает двигатели одинаковыми | Уводит непредсказуемо | Уводит непредсказуемо |
| Разомкнутое (жёсткая поправка) | Вручную смещает один двигатель | Теряет калибровку | Теряет калибровку |
| Замкнутое (обратная связь по энкодерам) | Динамически подстраивает мощность по измеренным тикам колёс | Держит прямой курс | Держит прямой курс |
Как реализовать пропорциональное управление скоростью
Чтобы сделать работающий замкнутый регулятор, продвинутый курс матанализа не нужен. Для школьной робототехники достаточно простого пропорционального (П) контура, выполняющегося каждые 50–100 миллисекунд.
Вместо того чтобы задавать мощность двигателей напрямую, программа измеряет обороты колёс за фиксированный интервал времени и подстраивает мощность так, чтобы убрать разницу:
- Считайте импульсы энкодеров на обоих колёсах за фиксированное окно (например, каждые 50 мс).
- Вычислите ошибку:
error = leftTicks - rightTicks. - Если
error > 0, левое колесо вращается быстрее правого. Немного уменьшите ШИМ левого двигателя, немного увеличьте ШИМ правого — или примените поправку, пропорциональную величине ошибки:correction = error * Kp(гдеKp— подобранный коэффициент усиления). - Обнулите счётчики тиков и повторите.
Если вы собираете собственную программу занятий или подбираете аппаратные платформы, выбор наборов с микроконтроллерами, поддерживающими аппаратные прерывания, и со встроенными магнитными энкодерами — таких как модульные экосистемы на платформах вроде Sheen Canvas или робототехнические платформы линейки Infinity — экономит десятки часов ученических мучений. Фокус обучения смещается с борьбы с механическими дефектами на освоение обратной связи по датчикам и теории управления.
Главный вывод
Механические несовершенства — не дефекты, которые надо прятать за временными программными заплатками; это фундаментальная реальность физических вычислений. Если научить учеников измерять реальную работу двигателей энкодерами и замкнутыми алгоритмами, привычный источник раздражения в мастерской превращается в понятный практический урок по реальным системам управления.



