Программа отправила обоим моторам одинаковое число. Робот всё равно медленно уходит вправо. Добавить левому мотору несколько процентов — значит скрыть симптом, не выяснив, одинаковы ли команды, скорости валов, пройденные расстояния и силы в контакте с полом.
В дифференциальном приводе прямая получается не из равенства чисел в программе, а из равенства фактических линейных скоростей колёс при подходящем контакте с поверхностью.
Принципиальная диагностическая цепочка, не схема конкретной версии «Зари 40».
Идеальная модель
Пусть скорости левого и правого колеса равны vL и vR, а расстояние между линиями контакта — L:
v = (vR + vL) / 2
ω = (vR - vL) / L
При vR = vL идеальная модель предсказывает прямую. При равных по величине противоположных скоростях корпус разворачивается на месте.
Учебник Стивена Лавалля описывает эту кинематику. Modern Robotics подчёркивает её допущение: качение без бокового скольжения на твёрдой плоской поверхности.
Одинаковые обороты не означают одинаковое расстояние
Линейная скорость обода равна v = rω. Если эффективные радиусы различаются, одинаковые обороты дают разные расстояния. Причиной могут быть шины, давление, износ, деформация под нагрузкой, налипший материал или ошибка измерения.
ROS 2 diff_drive_controller предусматривает отдельные множители радиуса левого и правого колеса. Это не доказывает причину конкретного ухода, но подтверждает необходимость учитывать возможную асимметрию радиусов в модели.
Одинаковая команда не означает одинаковые обороты
Одинаковый PWM duty cycle — вход, а не результат. Стороны могут различаться по сопротивлению обмоток и редукторов, падению напряжения, прижиму колеса, ограничению тока и характеристике «команда → скорость».
Без обратной связи открытое управление только предполагает одинаковый ответ. Энкодеры позволяют сравнить вращение с целью, но не измеряют проскальзывание относительно пола.
Равные показания энкодеров не означают равный путь
При проскальзывании энкодер честно сообщает поворот вала, которого не было в перемещении корпуса. На неоднородной поверхности стороны могут терять сцепление по-разному. Боковое скольжение при развороте также нарушает модель чистого качения.
Разделяйте три наблюдения:
- команда контроллера;
- измеренное вращение колеса;
- внешнее перемещение корпуса.
Совпадение первых двух проверяет контур колеса. Для сопоставления второго и третьего нужна внешняя опора: разметка, камера, маяки или другая система позиционирования.
Механика и нагрузка
Смещённый центр масс меняет нормальные реакции колёс. Перекошенный ролик, задевающий кожух, жёсткий кабель или несоосное крепление создают разное сопротивление. На столе без нагрузки симптом способен исчезнуть, а с грузом — вернуться.
Поэтому механику проверяют раньше программной поправки. Постоянный коэффициент может компенсировать один режим и ухудшить другой.
Диагностический маршрут
- Геометрия: измерить эффективные диаметры, колею, соосность и свободный ход.
- Повторяемость: выполнить одинаковые короткие проходы в обоих направлениях на одной поверхности.
- Локализация: определить, следует ли симптом за колесом/модулем или остаётся на стороне платформы.
- Обратная связь: сопоставить команды и скорости обоих колёс во времени.
- Нагрузка: повторить протокол с зафиксированной массой и её положением.
- Внешний путь: сравнить колёсную оценку с независимым измерением траектории.
Скачайте матрицу диагностики. Каждая гипотеза в ней получает ожидаемое наблюдение, а не случайную настройку коэффициента.
Калибровка — не универсальная заплатка
Систематическую разницу радиусов можно учитывать множителями. Ошибка колеи проявляется в поворотах; ROS 2 предупреждает, что неверный wheel_separation искажает движение по кривой.
Но если причина меняется с температурой, зарядом, поверхностью или нагрузкой, один коэффициент не делает систему симметричной. Сначала отделяют стабильную ошибку от случайной и режимной.
Связь с «Зарёй 40»
«Заря 40» — открытый дневник разработки и испытаний нескольких вариантов роботизированных платформ, доступных для изучения, доработки и адаптации под разные задачи.
Материал задаёт будущий протокол, но не утверждает, что текущая платформа уходит с прямой или уже откалибрована. Для вывода потребуются версия конфигурации, поверхность, нагрузка, команды, измерения колёс и независимая траектория.
Равная команда — только начало цепочки. Прямая появляется, когда равны пройденные по поверхности расстояния, а не цифры в двух регистрах.
Протокол вместо подкручивания коэффициента
Сделайте 6–10 проходов в обе стороны с одинаковыми нагрузкой, покрытием и малой скоростью. Для каждого сохраните команды, обратную связь колёс, внешнюю траекторию и температуру/заряд. Если ошибка «переезжает» вместе с модулем — ищите его; если остаётся на стороне — проверяйте механику и контакт с поверхностью. В кинематике скорость рыскания лучше обозначать θ̇, чтобы не спутать её с угловой скоростью колеса. ROS 2 diff_drive_controller отдельно учитывает радиусы и базу колёс, потому что один общий коэффициент часто скрывает проблему.