Балансирующий робот – это пример робототехники, который способен самостоятельно сохранять равновесие во время движения. Для этого робот использует технологию стабилизации с помощью гироскопа и акселерометра.
Программирование балансирующего робота требует определенных знаний и навыков. Сначала необходимо загрузить специальную программу на микроконтроллер Arduino, который будет управлять работой робота. Затем необходимо настроить значения коэффициента фильтра и шаговые моторы, чтобы достичь оптимальной стабилизации.
Для измерения угла наклона робота используется гироскоп. Помощью этого устройства робот определяет свое положение в пространстве и корректирует скорость движения, чтобы сохранить равновесие. Кроме того, балансирующий робот также использует акселерометр для измерения ускорения и определения момента силы, действующего на него.
Алгоритм, который используется для управления балансирующим роботом, комбинирует данные с гироскопа и акселерометра и применяет фильтр низких частот для сглаживания значений. Затем робот рассчитывает новое положение с помощью комплементарного фильтра и корректирует скорость движения, чтобы удерживать равновесие.
Построение балансирующего робота является достаточно сложным проектом, который требует знаний в области электроники и программирования. Однако, после его реализации можно получить неплохую модель робота, способную удерживать равновесие и двигаться вперед с помощью шаговых моторов и сервомашинки, управляемой 555-ом.
Балансирующий робот на 555-ом таймере
На 555-ом таймере будут установлены две частоты, которые будут использоваться для контроля скорости двигателя и сервомашинки, которые отвечают за управление балансом робота.
Основным алгоритмом, который будет использоваться в этой части проекта, является алгоритм комплементарного фильтра. Он позволяет получить неплохую стабилизацию и равновесие робота. В начале проекта загрузите код алгоритма с помощью vl-systemsbalansingrobot.
Чтобы робот мог двигаться вперед, он будет совершать шаги постепенно, изменяя значения угла наклона и скорости гироскопа соответствующим образом. В этой схеме использован шаговый двигатель, который будет управляться с помощью алгоритма комплементарного фильтра.
Кроме того, в проекте присутствуют две ветки, которые также играют свою роль в стабилизации робота на 555-ом таймере. Первая ветка отвечает за регулировку мощности сервомашинки, вторая ветка — за определение скорости двигателя.
Нулевое положение робота будет определено с помощью гироскопа. После определения нуля, робот будет способен самостоятельно поддерживать равновесие.
Шаговые моторы
Каждое колесо робота приводится в движение отдельным шаговым мотором. Гироскопом определяется текущий угол наклона робота (gyroangle). Затем, с помощью алгоритма, значения gyroangle пропускаются через фильтр для управления двигателями.
Это довольно сложная часть программирования робота, но есть неплохая библиотека для управления шаговыми моторами – «AccelStepper». С помощью неё можно довольно легко загрузить алгоритм управления шаговыми моторами в Arduino.
Для управления скоростью шаговых моторов задействуется таймер. Время выполнения каждого шага определяется скоростью мотора. Количеством отработанных шагов моментально рассчитывается текущая скорость робота.
Балансир робота осуществляется с помощью алгоритма PID (пропорционально-интегрально-дифференциальный регулятор). В проекте используется алгоритм, разработанный командой VL-Systems Balansing Robot.
Загрузите эту часть программы в папку «branches» и добавьте ссылку на неё в основном коде. После загрузки, алгоритм самобалансирующегося робота должен стабилизировать робота и обеспечить его удержание в равновесии.
Алгоритм стабилизации
Гироэлемент отслеживает угол наклона робота и передает значение этого угла в алгоритм. Он может быть реализован с помощью гироскопа, акселерометра или комбинации обоих. Значение угла обрабатывается алгоритмом и используется для вычисления момента силы, необходимого для удержания робота в вертикальном положении.
Алгоритм использует также скорости моторов для дополнительной стабилизации. Если робот наклоняется вперед, моторы крутятся с большей скоростью, чтобы вернуть его в вертикальное положение. Если робот наклоняется назад, моторы крутятся с меньшей скоростью.
Для вычисления момента силы в алгоритме используется коэффициент ослабления, который можно настроить. Значение этого коэффициента зависит от конкретных условий работы робота и может изменяться для достижения оптимальных результатов стабилизации.
Также особое внимание уделяется фильтрации и сглаживанию значений, получаемых от гироэлемента и моторов. Это позволяет устранить возможные помехи и нестабильности в работе робота.
Алгоритм стабилизации самобалансирующегося робота можно реализовать на платформе Arduino с использованием микроконтроллера и соответствующих датчиков. Код алгоритма может быть написан на языке программирования C или C++ и загружен в папку проекта для последующей загрузки на Arduino.
Управление скоростью
Для обеспечения равновесия балансирующего робота и удержания его в вертикальном положении необходимо управление скоростью двигателей.
В схеме управления скоростью используется алгоритм PID (пропорционально-интегрально-дифференциальный), который позволяет поддерживать постоянную скорость робота вперед при изменении наклона.
Первым шагом алгоритма является определение угла наклона робота с помощью гироскопа. Полученное значение (gyroangle) будет использоваться для стабилизации робота.
Затем, с помощью алгоритма PID, определяется значение ошибки – разность между желаемым углом равновесия и текущим углом робота. На основе этой ошибки вычисляется значение мощности, которое должно быть подано на моторы для исправления наклона и возвращения робота в равновесие.
Алгоритм PID сочетает пропорциональную, интегральную и дифференциальную составляющие, чтобы обеспечить неплохую скорость стабилизации робота. Значения коэффициентов PID могут быть настроены «шаговым» методом для достижения оптимальных результатов.
Кроме того, для более точного управления скоростью можно использовать комбинирование алгоритма PID с другими подходами, такими как «complementary filter» и усилителя мощности 555-ом.
В итоге, управление скоростью является важной частью самобалансирующегося робота, которая позволяет ему поддерживать равновесие и двигаться вперед с постоянной скоростью при изменении наклона.
Шаг 4 измерение угла наклона с помощью гироскопа
Для самобалансирующегося робота нам нужно знать угол его наклона. Для этого мы будем использовать гироскоп. Гироскоп измеряет скорость вращения робота вокруг своей оси и на основе этого значение можно рассчитать угол наклона.
Мы используем гироскоп MPU-6050, который можно легко подключить к плате Arduino. MPU-6050 — это устройство, которое комбинирует гироскоп и акселерометр в одном модуле. Он работает через интерфейс I2C, что позволяет подключить его к Arduino без особых проблем.
Первым шагом необходимо подключить гироскоп к Arduino. Подключите пины SDA и SCL гироскопа к соответствующим пинам на плате Arduino. Для пинов SDA и SCL на Arduino UNO используются пины A4 и A5 соответственно.
После подключения необходимо загрузить библиотеку MPU6050 на вашу плату Arduino. Библиотека MPU6050 позволяет взаимодействовать с гироскопом MPU-6050. Для загрузки библиотеки откройте Arduino IDE, выберите пункт «Библиотеки» в верхней панели, затем «Подключить библиотеку», и в появившемся меню найдите MPU6050 и установите ее.
Теперь можно написать код для измерения угла наклона с помощью гироскопа. Код будет реализовывать алгоритм стабилизации балансирующего робота. Мы будем использовать алгоритм комплементарного фильтра (complementary filter), который позволяет объединить данные гироскопа и акселерометра для более точного определения угла наклона.
В коде мы будем использовать переменные для хранения значений угла наклона и скорости вращения робота. Мы также будем использовать коэффициенты и константы для настройки алгоритма стабилизации и фильтрации данных.
После написания кода необходимо загрузить его на Arduino и запустить программу. Робот будет начинать движение вперед и стараться удерживать равновесие.
Пример кода для измерения угла наклона с помощью гироскопа:
- Подключите гироскоп MPU-6050 к Arduino;
- Загрузите библиотеку MPU6050;
- Напишите код для измерения угла наклона с помощью комплементарного фильтра;
- Загрузите код на Arduino и запустите программу.
#include
#include
MPU6050 mpu;
const float gyroScaleFactor = 65.5;
const float complementaryFilterConstant = 0.98;
float gyroAngleX = 0;
float gyroAngleY = 0;
void setup() {
Wire.begin();
mpu.initialize();
mpu.setDLPFMode(3);
}
void loop() {
int16_t gyroRawX, gyroRawY;
float gyroX, gyroY;
float accelX, accelY, accelZ;
float accelAngleX, accelAngleY;
float totalAngleX, totalAngleY;
mpu.getMotion6(&accelX, &accelY, &accelZ, &gyroRawX, &gyroRawY, &gyroRawZ);
gyroX = gyroRawX / gyroScaleFactor;
gyroY = gyroRawY / gyroScaleFactor;
accelAngleX = atan2(-accelY, accelZ) * RAD_TO_DEG;
accelAngleY = atan2(accelX, accelZ) * RAD_TO_DEG;
gyroAngleX += gyroX * (1 / 100);
gyroAngleY += gyroY * (1 / 100);
totalAngleX = complementaryFilterConstant * (gyroAngleX - accelAngleX) + (1 - complementaryFilterConstant) * accelAngleX;
totalAngleY = complementaryFilterConstant * (gyroAngleY - accelAngleY) + (1 - complementaryFilterConstant) * accelAngleY;
// Control the balancing robot here based on the totalAngleX and totalAngleY
delay(10);
}
Данный код выполняет измерение угла наклона с помощью гироскопа MPU-6050 и акселерометра. Затем алгоритм комплементарного фильтра объединяет данные гироскопа и акселерометра для более точного измерения угла наклона робота. Далее можно использовать полученные значения totalAngleX и totalAngleY для управления самобалансирующимся роботом.
Пожалуйста, обратите внимание, что приведенный выше код представляет собой основу для разработки самобалансирующегося робота. Для достижения лучших результатов могут потребоваться дополнительные доработки и настройки.
Источник кода и дополнительные шаги программирования для создания балансирующего робота вы можете найти на веб-сайте производителя гироскопа VL-Systems: .