Справочник UniBase
Основной класс для управления шасси робота, моторами и дисплеем.
Константы
Публичные константы, доступные для функций управления.
| Имя | Значение | Описание |
|---|---|---|
SOFT |
0 | Используется в stop() для плавного замедления (движение по инерции). |
HARD |
1 | Используется в stop() для немедленного торможения. |
Инициализация
Инициализирует все компоненты робота (Моторы, Энкодеры, OLED, Датчики). Эта функция запускает
фоновые задачи для одометрии и управления моторами. Должна быть вызвана один раз в
setup().
Параметры
robotName(опционально): Имя для отображения на экране загрузки OLED. Типconst char*. Приnullptrиспользуется имя по умолчанию.
Пример
#include <UNI.h>
UniBase robot;
UniDev module;
void setup() {
robot.begin("MY_BOT");
}
void loop() {
}
Управление моторами
Устанавливает мощность для обоих моторов напрямую. Положительные значения - движение вперед, отрицательные - назад.
Параметры
powerLeft: Мощность левого мотора (-100 до 100).powerRight: Мощность правого мотора (-100 до 100).
Пример
// Полная скорость вперед
robot.motors(100, 100);
// Поворот влево на месте
robot.motors(-50, 50);
Устанавливает мощность только для левого мотора.
Параметры
power: Мощность мотора (-100 до 100).
Пример
// Вращать левый мотор назад на половины скорости
robot.motorLeft(-50);
Устанавливает мощность только для правого мотора.
Параметры
power: Мощность мотора (-100 до 100).
Пример
// Вращать правый мотор вперед на полной скорости
robot.motorRight(100);
Перемещает робота по дуге с заданной интенсивностью поворота. Это неблокирующая функция управления.
Параметры
power: Базовая мощность моторов (-100 до 100).angle: Резкость поворота (-90 до 90). Положительное = Поворот Влево, Отрицательное = Поворот Вправо.
Пример
// Ехать вперед, поворачивая влево
robot.motorsArc(80, 45);
Движение с раздельными скоростями и синхронизацией по энкодерам. В отличие от motors(), удерживает заданное соотношение скоростей левого и правого колёс. Неблокирующая функция — работает до вызова stop().
Параметры
powerLeft: Мощность левого колеса (-100..100).powerRight: Мощность правого колеса (-100..100).
Пример
// Плавная дуга с удержанием соотношения скоростей
robot.motorsSync(70, 40);
Активное удержание текущей позиции: робот сопротивляется сдвигу с помощью ПИД-регулятора. Отменяется stop() или любой командой движения.
Пример
robot.holdPosition();
Останавливает оба мотора. Может выполнить плавную остановку (инерция) или жесткое торможение.
Параметры
stopType:SOFT(0) илиHARD(1).
Пример
robot.stop(HARD); // Мгновенная остановка
Останавливает только левый мотор.
Параметры
stopType:SOFT(0) илиHARD(1).
Пример
robot.stopLeft(SOFT); // Плавно остановить левый мотор
Останавливает только правый мотор.
Параметры
stopType:SOFT(0) илиHARD(1).
Пример
robot.stopRight(HARD); // Резко остановить правый мотор
Движение (Блокирующее)
Эти функции блокируют выполнение программы до завершения движения. Они используют обратную связь от энкодеров для точности.
Перемещает робота на определенное расстояние, используя PID-контроль энкодеров.
Параметры
power: Мощность мотора (-100 до 100).millimeters: Целевое расстояние.
Пример
// Ехать вперед 50см на 80% мощности
robot.moveDist(80, 500);
Включает моторы на определенное время.
Параметры
power: Мощность мотора (-100 до 100).milliseconds: Длительность в мс.
Пример
// Ехать вперед 2 секунды
robot.moveTime(100, 2000);
Движение по изогнутой траектории на определенное расстояние.
Параметры
power: Мощность мотора (-100 до 100).angle: Угол руления (-90 до 90).millimeters: Пройденное расстояние по дуге.
Пример
// Проехать 1 метр по широкой левой дуге
robot.moveArcDist(60, 20, 1000);
Движение по изогнутой траектории в течение определенного времени.
Параметры
power: Мощность мотора (-100 до 100).angle: Угол руления (-90 до 90).milliseconds: Длительность в мс.
Пример
// Резкий поворот влево в течение 1.5 секунд
robot.moveArcTime(80, 60, 1500);
Вращает робота на месте на заданный угол.
Параметры
power: Скорость (0-100)angle: Градусы. Положительный = Вправо, Отрицательный = Влево.
Пример
// Поворот на 90 градусов вправо
robot.rotate(60, 90);
Поворот к абсолютному курсу одометрии кратчайшим путём. В отличие от rotate(), учитывает накопленную ошибку предыдущих манёвров.
Параметры
power: Скорость (0-100).angleDeg: Целевой курс в градусах (в системе координат одометрии).
Пример
robot.rotateTo(50, 90); // Повернуться на курс 90°
robot.rotateTo(50, 0); // Вернуться на исходный курс
Движение к заданной точке одометрии: автоматически разворачивается на курс к цели, затем едет прямо.
Параметры
power: Скорость (0-100).x, y: Целевая точка в мм (в системе координат одометрии).
Пример
robot.setPosition(0, 0, 0);
robot.moveTo(50, 400, 0); // Вперёд 400 мм
robot.moveTo(50, 400, 400); // Затем влево 400 мм
Дуга с точной геометрией: задаётся радиус поворота и угол дуги.
Параметры
power: Скорость (0-100).radiusMM: Радиус дуги по центру робота (мм).angleDeg: Угол дуги; знак задаёт направление поворота.
Пример
// Дуга радиусом 300 мм на 90° вправо
robot.moveArcRadius(60, 300, -90);
Асинхронное движение
Команды с суффиксом Async запускают движение и сразу возвращают управление — следующая строка кода выполняется, пока робот движется. Для синхронизации используйте isMoving() или waitMove().
Асинхронный аналог moveDist().
Параметры
power: Скорость (0-100).millimeters: Расстояние в мм.
Пример
robot.moveDistAsync(80, 500);
module.setColor(0, 255, 0); // Светится зелёным во время движения
robot.waitMove();
Асинхронный аналог moveTime().
Параметры
power: Скорость (0-100).milliseconds: Длительность в мс.
Пример
robot.moveTimeAsync(100, 2000);
// ... другие действия ...
robot.waitMove();
Асинхронный аналог moveArcDist().
Параметры
power: Скорость (0-100).angle: Угол руления (-90..90).millimeters: Расстояние по дуге в мм.
Пример
robot.moveArcDistAsync(60, 30, 800);
Асинхронный аналог moveArcTime().
Параметры
power: Скорость (0-100).angle: Угол руления (-90..90).milliseconds: Длительность в мс.
Пример
robot.moveArcTimeAsync(80, 60, 1500);
Асинхронный аналог moveArcRadius().
Параметры
power: Скорость (0-100).radiusMM: Радиус дуги в мм.angleDeg: Угол дуги.
Пример
robot.moveArcRadiusAsync(60, 300, -90);
Асинхронный аналог rotate().
Параметры
power: Скорость (0-100).angle: Градусы. Положительный = Вправо, Отрицательный = Влево.
Пример
robot.rotateAsync(60, 90);
Асинхронный аналог rotateTo().
Параметры
power: Скорость (0-100).angleDeg: Целевой абсолютный курс в градусах.
Пример
robot.rotateToAsync(50, 90);
Асинхронный аналог moveTo().
Параметры
power: Скорость (0-100).x, y: Целевая точка в мм.
Пример
robot.moveToAsync(50, 400, 400);
Возвращает true, пока активна задача асинхронного движения.
Пример
robot.moveDistAsync(80, 500);
while (robot.isMoving()) {
module.setColor(255, 100, 0); // Оранжевый во время движения
}
module.setColor(0, 255, 0); // Зелёный после остановки
Блокирует выполнение до завершения текущей асинхронной команды движения. Возвращает true если движение завершилось штатно, false если истёк таймаут.
Параметры
timeoutMs(опционально): Максимальное время ожидания в мс.0— ждать бесконечно.
Пример
robot.moveDistAsync(80, 500);
// Здесь можно выполнять параллельные действия
bool ok = robot.waitMove(3000); // Ждать не более 3 секунд
if (!ok) robot.stop(HARD); // Принудительная остановка по таймауту
Одометрия
Функции для отслеживания положения робота относительно точки старта.
Возвращает текущую структуру оценки положения и ориентации.
Возвращает
Структура OdometryData, содержащая float x, float y и
float angle.
Пример
OdometryData odom = robot.getOdometry();
Serial.print("X: "); Serial.println(odom.x);
Serial.print("Y: "); Serial.println(odom.y);
Serial.print("Angle: "); Serial.println(odom.angle);
Возвращает абсолютную координату X в миллиметрах.
Пример
float currentX = robot.getAbsX();
Serial.println(currentX);
Возвращает абсолютную координату Y в миллиметрах.
Пример
float currentY = robot.getAbsY();
Serial.println(currentY);
Возвращает абсолютный угол курса в градусах.
Пример
float currentAngle = robot.getAbsAngle();
Serial.println(currentAngle);
Сбрасывает накопленный счетчик расстояния в 0. Используется для относительных измерений.
Пример
robot.resetDistance();
// Теперь getDistance() начнет отсчет с 0
Возвращает расстояние, пройденное с момента последнего сброса, в миллиметрах.
Пример
robot.resetDistance();
robot.motorsArc(50, 0);
while(robot.getDistance() < 1000) {
delay(10);
}
robot.stop(HARD);
Сбрасывает накопленный счетчик угла в 0.
Пример
robot.resetAngle();
Возвращает угол поворота с момента последнего сброса, в градусах.
Пример
float currentAngle = robot.getAngle();
Serial.println(currentAngle);
Задаёт начальную позу одометрии. Используется для привязки к координатам поля или сброса позиции в контрольной точке.
Параметры
x, y: Начальные координаты в мм.angleDeg: Начальный курс в градусах.
Пример
// Стартовая позиция в начале координат, смотрит вдоль оси X
robot.setPosition(0, 0, 0);
Возвращает количество тиков энкодера для соответствующего мотора.
Пример
long l = robot.getLeftTicks();
long r = robot.getRightTicks();
Serial.printf("L: %ld, R: %ld\n", l, r);
Выводит текущие значения X, Y и Theta в Serial Monitor. Полезно для отладки.
Пример
void loop() {
robot.printOdometry(); // Output: X: 10.5 Y: 5.2 Angle: 90.0
delay(500);
}
Дисплей
Очищает экран OLED и выводит переданное значение по центру.
Поддерживаемые типы
Эта функция принимает разные типы данных, включая String, int,
float, double и bool.
Пример
// Вывод текста
robot.displayPrint("Hello!");
// Вывод числа
robot.displayPrint(123);
Выводит название вверху экрана и значение по центру. Поддерживает все типы данных, как в простом displayPrint.
Пример
robot.displayPrint("Battery", 85);
robot.displayPrint("Mode", "Auto");
Возвращает экран OLED в обычное состояние.
Пример
robot.displayClear();
Утилиты
Возвращает текущий уровень заряда батареи в процентах (0-100). Возвращает -1 при ошибке или отсутствии связи.
Пример
int power = robot.getBatteryPower();
if (power < 10) {
robot.displayPrint("LOW BATT");
}
Задает фоновую задачу мигания встроенным светодиодом.
interval: Время в мс. Установите 0, чтобы остановить мигание.
Пример
// Мигать дважды в секунду
robot.blinkLED(500);
// Остановить мигание
robot.blinkLED(0);
Активирует цикл управления через UART.
Пример
void loop() {
// Вход в режим удаленного управления UART
robot.UniBaseControl();
}