Руководство · Средний · 30 min

Люфт редуктора в роботах: как измерить и устранить

Люфт в зубчатой передаче, из-за которого рука провисает, а одометрия дрейфует. Измерьте его в градусах и решите, устранять его или учесть при проектировании.

Введение

Существует семейство неисправностей роботов, которые проявляются одинаково: машина исправна при движении в одну сторону и неверна при движении в другую. Рука достигает одной точки слева и справа, но останавливается в двух разных положениях. Балансирующий робот дрожит вокруг вертикали и не успокаивается, как бы его ни настраивали. Курс робота для прохождения лабиринта уходит на градус после каждого поворота и на пятнадцать — после забега.

Ни одна из этих проблем не связана с настройкой, и у всех одна причина. Между двигателем и тем, что он приводит в движение, находится зубчатая передача, а у неё должен быть зазор между зубьями, иначе она заклинила бы. Этот зазор называется люфтом: всякий раз, когда двигатель меняет направление, выход не перемещается, пока зубья не пересекут зазор и не встретятся с другой стороны.

На этом сайте люфт указан на семи страницах как причина, почему что-то не работает. Эта страница объясняет его.

Что это такое на самом деле

Люфт — не трение и не задержка. Это мёртвая зона с памятью.

Представьте ведущий зубец, прилегающий к одной стороне ведомого зубца. Толкните — выход точно повторяет вход, без ошибки. Теперь измените направление. Ведущий зубец сходит с этой стороны и проходит через зазор, и всё время пересечения выход остаётся точно на месте. Когда контакт возникает на противоположной стороне, выход снова следует за входом, но теперь его положение постоянно смещено на ширину зазора.

Из этого описания непосредственно следуют два важных свойства:

  • При движении в одном направлении люфт ничего не стоит. Это налог за смену направления, взимаемый один раз за каждую смену, независимо от того, сколько робот проедет после неё. Самая дорогая смена направления у робота — аварийная остановка, где люфт непосредственно добавляется к тормозному пути.
  • Ошибка зависит от того, откуда вы пришли. Именно это делает её гистерезисом, а не простым смещением, и поэтому константа калибровки не может её устранить.

Какую форму он создаёт

Приведите сустав с люфтом 4° туда и обратно и постройте график поведения выхода.

Два наложенных графика для сустава с люфтом в четыре градуса. На верхнем графике задаваемая позиция показана пунктирной синусоидой, а фактический выход — сплошной кривой в зависимости от времени. При каждой смене направления фактический выход остаётся ровным внутри заштрихованной полосы, пока задаваемая позиция продолжает двигаться, а затем снова следует за ней. На нижнем графике фактическая позиция построена против задаваемой и образует параллелограмм вокруг пунктирной диагонали, которую прошёл бы редуктор без люфта; ширина петли измеряется как четыре градуса.
Один и тот же проход дважды. Во времени люфт — это участок без движения при каждой смене направления; на графике выхода относительно входа это параллелограмм, ширина которого по горизонтали точно равна люфту — здесь 4.07° при зазоре 4°, а разница вызвана шириной полосы дискретизации. Скачать SVG

Нижняя панель даёт полезный умственный образ: две ветви становятся очевидными. При движении вверх выход отстаёт на половину зазора. При движении вниз он опережает на половину зазора. Между ними выход остаётся там, где его оставили.

Измерьте свой люфт за десять минут

Нельзя проектировать, не зная численного значения, а каждый редуктор отличается. Получить его можно двумя способами.

Вручную, для любого варианта. Отключите питание двигателя и удерживайте шасси неподвижным. Прикрепите полоску ленты к ободу колеса или концу руки и осторожно поворачивайте выходной вал между двумя упорами — не настолько сильно, чтобы что-то прогнулось, а лишь до появления сопротивления в каждом направлении. Отметьте оба предела и измерьте дугу между ними. Переведите:

backlash (°) = arc / (π · D) × 360

Повторите измерение в четырёх или пяти положениях вокруг полного оборота выхода и сохраните худшее значение. Разброс от зубья к зубью и эксцентриситет вала реальны, поэтому первое проверенное положение не обязательно показательно.

С энкодером, точнее. Если на валу двигателя есть энкодер — например, в двигателе N20 с энкодером — медленно вращайте его в одну сторону, пока выход едва не начнёт двигаться, обнулите счётчик, затем измените направление и считайте до следующего движения выхода. Это число и есть зазор:

backlash (°) = counts / counts-per-output-rev × 360

Для N20 с 7 импульсами на канал за оборот двигателя, после декодирования ×4 и редуктора 1:100 это 2800 отсчётов на оборот выхода — значит, 31 отсчёт равен 4°. Разрешения достаточно, чтобы измерить то, что едва заметно.

Где стоит энкодер, определяет, что вы можете увидеть

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

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

Энкодер на валу выхода расположен после редуктора и сообщает правду — но именно поэтому во время пересечения он показывает ноль. Поэтому для измерения люфта используют энкодер двигателя. Энкодер, который не может компенсировать люфт, — это тот, который способен его увидеть.

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

Во что он вам обходится

Люфт в суставе измеряется в углах, а его стоимость выражается в расстоянии; величина определяется длиной рычага. Один и тот же люфт 4°, три робота:

Место Рычаг Стоимость одной смены направления
Плечо роботизированной руки звено 150 mm 10.5 mm у захвата
Приводное колесо колесо 65 mm 2.27 mm хода
Колесо Micromouse колесо 42 mm 1.47 mm хода

Строка с рукой объясняет, почему шарнирные руки сильнее всего страдают при допусках радиолюбительской сборки: люфт плеча умножается на всю длину руки до инструмента. Один градус в плече звена 150 mm уже даёт 2.6 mm у захвата.

Строки с колёсами выглядят безобидно, пока не посчитать смены направления. Micromouse разворачивается на месте на каждом перекрёстке, а разворот меняет направление одного колеса каждый раз. При колёсах 42 mm и ширине колеи 90 mm люфт 4° даёт 0.93° ошибки курса на один поворот — а ошибка курса не усредняется, потому что каждый следующий прямой участок прокладывается по неверному азимуту. Сто поворотов дают 147 mm пути, который одометрия посчитала, но робот не прошёл.

Самобалансирующийся робот — крайний случай, потому что он постоянно меняет направление сотни раз в секунду, небольшими приращениями, причём каждое приращение меньше зазора. Большую часть времени робот находится в мёртвой зоне — поэтому никакой набор коэффициентов не может его стабилизировать.

Исправление 1: уменьшить его

Самое дешёвое исправление обычно находится в компоненте.

Металлические шестерни вместо пластиковых. Литые шестерни имеют большие допуски и со временем разбалтываются ещё сильнее. Металлическая зубчатая передача не устраняет люфт, но обычно оставляет только его долю. Это главная причина появления двигательов N20 в каждом балансирующем роботе и конструкции Micromouse, а также причина, по которой редукторный двигатель TT подходит роботу, следующему по линии, который чаще едет вперёд.

Знайте, какая ступень важна. Люфт каждой ступени, приведённый к выходу, делится на передаточное число между этой ступенью и выходом. Последняя ступень имеет передаточное число один к выходу, поэтому весь её люфт проявляется, а всё, что выше, уменьшается. Редуктор с высоким передаточным числом не обязательно хуже; если улучшать одну шестерню, улучшайте последнюю.

Преднатяжение. Шестерни с пружинным прижатием друг к другу, гайки ходовых винтов без люфта, натянутый ремень вместо пары шестерён. Все эти решения удерживают зубья на обеих сторонах одновременно. Все они увеличивают трение, потери и износ — это и есть компромисс.

Или удалите редуктор. В шарнире с ременной передачей или прямым приводом нет зубчатого люфта. Вместо него появляется податливость — другая проблема, рассмотренная ниже.

Исправление 2: подходить с одной стороны

Старейшее исправление в обработке и самое выгодное в программном обеспечении, потому что оно ничего не стоит.

Люфт взимается только при смене направления. Поэтому организуйте так, чтобы последняя часть каждого перемещения была в одном направлении, и к моменту прибытия зазор уже будет пересечён. Если нужно подойти к цели сверху, проедьте за неё и вернитесь вверх. Так делают 3D-принтеры по оси Z; операторы CNC делают это вручную, уже на автомате.

// Always arrive travelling positive: the gap is crossed before we get there.
void moveTo(float target) {
  if (target < currentPosition()) {
    driveTo(target - APPROACH_MARGIN);   // margin > measured backlash
  }
  driveTo(target);
}

APPROACH_MARGIN должен быть заметно больше измеренного люфта — двойной люфт служит разумной отправной точкой. Цена — время на половине перемещений, а преимущество — повторяемость, больше не зависящая от точки, откуда вы пришли.

Для мобильного робота тот же приём выглядит иначе: если карта позволяет, предпочитайте широкую дугу развороту на месте, потому что дуга не меняет направление ни одного колеса.

Исправление 3: не давайте регулятору бороться с ним

ПИД-регулятор (PID) встречает люфт как мёртвую зону в середине собственного диапазона управления и реагирует на него плохо в узнаваемом смысле.

В зазоре выход растёт, а ничего не происходит, поэтому ошибка не уменьшается. Интегральная составляющая продолжает накапливаться в период, когда никакое усилие не помогло бы. Когда зубья наконец сцепляются, накопленная составляющая применяется сразу к уже соединённому механизму, и сустав рывком проходит мимо цели. Затем он меняет направление, снова пересекает зазор и повторяет то же самое в другую сторону. Это предельный цикл — устойчивое колебание, которое не сходится, — и его амплитуда задаётся механикой, а не коэффициентами.

Что действительно помогает:

  • Прекращайте интегрирование, когда вы не двигаетесь, но подаёте команду. Если выход выше порога, который должен вызвать движение, а энкодер сообщает, что выход не движется, остановите накопление интеграла. Это та же логика защиты от накопления, которую применяют к насыщенному исполнительному механизму; мёртвая зона — просто временно отключённый исполнительный механизм.
  • Снижайте Ki раньше, чем Kp. Именно интегральная составляющая превращает мёртвую зону в предельный цикл.
  • Не гонитесь за последними долями градуса. Если люфт 4°, допуск 1° фактически требует колебаний. Примите мёртвую зону немного шире люфта, и контур перестанет искать положение.
  • Профилируйте смену направления. Профиль движения плавно проходит через нулевую скорость вместо удара по противоположной стороне зуба — тише и гораздо бережнее к пластиковым шестерням.

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

Податливость — вторая половина потерянного перемещения

Если измерять люфт, поворачивая выходной вал, вы измеряете одновременно люфт и податливость, а исправления у них разные. Различите их одним тестом: приложите нагрузку, отметьте отклонение, затем отпустите.

Люфт Податливость
Деформация в зависимости от нагрузки Фиксированный зазор, не зависит от нагрузки Пропорционально нагрузке
При отпускании Остаётся там, где его оставили Возвращается обратно
Исправление Лучшие шестерни, преднатяжение, подход с одной стороны Более жёсткие детали, короткие рычаги, раскосы
Симптом Ошибка зависит от направления Провисание под нагрузкой, звон после перемещений

У длинной акриловой руки очень малый люфт и огромная податливость. У дешёвого пластикового редуктора на коротком выступу вала — наоборот. Оба случая читаются как «рука не идёт туда, куда я сказал», поэтому двухминутный тест стоит выполнить до покупки чего-либо.

Когда всё идёт не так

Симптом Обычно
Рука достигает точки по-разному с разных сторон Люфт, безусловно — измерьте его до любой настройки
Балансирующий робот дрожит и не успокаивается Люфт больше шагов коррекции; нужен металлический редуктор, а не больше настроек
Курс уходит на градус за поворот Люфт колеса, меняющего направление; предпочитайте дуги или добавьте гироскоп
Одометрия говорит, что робот переместился, но он не переместился Энкодер на двигателе не видит зазор редуктора
Устойчивое колебание вокруг уставки Интегральная составляющая накапливается через мёртвую зону
Положение повторяемо, но провисает под нагрузкой Податливость, а не люфт — усильте конструкцию, а не меняйте шестерни
Со временем стало хуже Износ пластиковых шестерён; люфт растёт по мере эксплуатации

Люфт — причина того, что робот, идеальный в симуляции, разочаровывает на стенде: это ровно тот эффект, который идеальная модель оставляет без внимания. Измерьте его один раз, запишите число, и большая часть загадок исчезнет. Если число окажется достаточно большим, чтобы навредить, ответом обычно будут более подходящие двигатель и редуктор, а не ещё один день настройки.

Исследуйте граф

Входит в эти сборки

Проекты и учебные пути, в которые входит это руководство.

Дополнительные материалы

Источники