
Калибровка моторов
Этот проект — первый шаг в работе с машинкой из конструктора СССР 2.0. Перед тем как переходить к более сложным задачам вроде движения по линии или объезда препятствий, нужно убедиться, что робот вообще умеет двигаться ровно. На практике почти всегда оказывается, что робот немного уходит в сторону, поворачивает не на тот угол или делает дугу вместо прямой линии. Это нормально и связано с тем, что моторы никогда не работают абсолютно одинаково.
На нашей платформе используется четыре мотор‑редуктора. Два мотора установлены слева и два справа. Моторы каждой стороны соединены параллельно и работают как одна группа. Это означает, что вся левая сторона робота управляется одним каналом драйвера, а вся правая — другим. Для управления моторами используется драйвер MX1508. Это компактный двухканальный драйвер для двигателей постоянного тока. Он позволяет задавать направление вращения моторов и регулировать их скорость с помощью PWM‑сигнала.Так как моторы объединены по сторонам, мы можем управлять только двумя значениями скорости: скоростью левой стороны и скоростью правой стороны. Именно их и приходится настраивать, чтобы робот двигался прямо.
Задача проекта очень простая: заставить робота проехать квадрат. Робот должен поехать вперёд, затем повернуть направо на 90 градусов. После этого он снова едет вперёд и повторяет поворот. Если всё настроено правильно, после четырёх сторон робот вернётся почти в ту точку, откуда начал движение. Если робот не возвращается в исходную точку, значит нужно немного подкорректировать скорость сторон или время поворота. Ниже приведён пример простого кода, который используется для проверки движения.
// Пины драйвера MX1508
const int LEFT_IN1 = 5;
const int LEFT_IN2 = 6;
const int RIGHT_IN1 = 9;
const int RIGHT_IN2 = 10;
// Скорость сторон
int leftSpeed = 180;
int rightSpeed = 176;
// Время движения и поворота
int forwardTime = 2000;
int turnTime = 550;
В начале программы мы задаём пины, к которым подключён драйвер моторов. Каждая сторона платформы управляется двумя пинами. Комбинация сигналов на этих пинах определяет направление вращения мотора.
Далее идут переменные leftSpeed и rightSpeed. Они задают скорость вращения левой и правой стороны робота. Если эти значения одинаковые, робот должен ехать прямо. Но на практике обычно приходится немного уменьшать скорость одной из сторон. Например, если робот постоянно уходит вправо, это значит, что левая сторона вращается быстрее. В этом случае нужно немного уменьшить значение leftSpeed.
Следующие параметры — forwardTime и turnTime. Первый определяет, сколько времени робот будет ехать вперёд. Второй задаёт длительность поворота. Поворот выполняется за счёт того, что одна сторона платформы движется вперёд, а другая — назад. Так робот разворачивается на месте.
После загрузки программы на контроллер нужно поставить робота на ровную поверхность и запустить движение. Сначала просто наблюдайте за траекторией. Если робот едет не прямо, попробуйте изменить значение leftSpeed или rightSpeed на несколько единиц. После каждой настройки запускайте программу снова и смотрите, как изменилась траектория.
Затем нужно настроить поворот. Если робот поворачивает слишком сильно и угол получается больше 90 градусов, уменьшите значение turnTime. Если наоборот поворот слишком маленький — увеличьте его. Когда параметры подобраны правильно, робот должен проехать квадратную траекторию и вернуться почти в исходную точку.
Попробуйте поэкспериментировать с алгоритмом движения. Например, измените программу так, чтобы робот ехал прямоугольник или треугольник. Можно также попробовать убрать остановку между поворотами и посмотреть, как изменится траектория.
Этот проект кажется очень простым, но на самом деле он очень важен. После такой калибровки платформа начинает вести себя предсказуемо, и с ней намного легче работать в следующих проектах.
Комментарии
0