Справочник UniBase

Основной класс для управления шасси робота, моторами и дисплеем.

Константы

Публичные константы, доступные для функций управления.

Имя Значение Описание
SOFT 0 Используется в stop() для плавного замедления (движение по инерции).
HARD 1 Используется в stop() для немедленного торможения.

Инициализация

begin void begin(const char* robotName = nullptr)

Инициализирует все компоненты робота (Моторы, Энкодеры, OLED, Датчики). Эта функция запускает фоновые задачи для одометрии и управления моторами. Должна быть вызвана один раз в setup().

Параметры

  • robotName (опционально): Имя для отображения на экране загрузки OLED. Тип const char*. При nullptr используется имя по умолчанию.

Пример

#include <UNI.h>

UniBase robot;
UniDev module;

void setup() {
  robot.begin("MY_BOT");
}

void loop() {
  
}

Управление моторами

motors void motors(int powerLeft, int powerRight)

Устанавливает мощность для обоих моторов напрямую. Положительные значения - движение вперед, отрицательные - назад.

Параметры

  • powerLeft: Мощность левого мотора (-100 до 100).
  • powerRight: Мощность правого мотора (-100 до 100).

Пример

// Полная скорость вперед
robot.motors(100, 100);
// Поворот влево на месте
robot.motors(-50, 50);
motorLeft void motorLeft(int power)

Устанавливает мощность только для левого мотора.

Параметры

  • power: Мощность мотора (-100 до 100).

Пример

// Вращать левый мотор назад на половины скорости
robot.motorLeft(-50);
motorRight void motorRight(int power)

Устанавливает мощность только для правого мотора.

Параметры

  • power: Мощность мотора (-100 до 100).

Пример

// Вращать правый мотор вперед на полной скорости
robot.motorRight(100);
motorsArc void motorsArc(int power, float angle)

Перемещает робота по дуге с заданной интенсивностью поворота. Это неблокирующая функция управления.

Параметры

  • power: Базовая мощность моторов (-100 до 100).
  • angle: Резкость поворота (-90 до 90). Положительное = Поворот Влево, Отрицательное = Поворот Вправо.

Пример

// Ехать вперед, поворачивая влево
robot.motorsArc(80, 45);
motorsSync void motorsSync(int powerLeft, int powerRight)

Движение с раздельными скоростями и синхронизацией по энкодерам. В отличие от motors(), удерживает заданное соотношение скоростей левого и правого колёс. Неблокирующая функция — работает до вызова stop().

Параметры

  • powerLeft: Мощность левого колеса (-100..100).
  • powerRight: Мощность правого колеса (-100..100).

Пример

// Плавная дуга с удержанием соотношения скоростей
robot.motorsSync(70, 40);
holdPosition void holdPosition()

Активное удержание текущей позиции: робот сопротивляется сдвигу с помощью ПИД-регулятора. Отменяется stop() или любой командой движения.

Пример

robot.holdPosition();
stop void stop(int stopType = HARD)

Останавливает оба мотора. Может выполнить плавную остановку (инерция) или жесткое торможение.

Параметры

  • stopType: SOFT (0) или HARD (1).

Пример

robot.stop(HARD); // Мгновенная остановка
stopLeft void stopLeft(int stopType = HARD)

Останавливает только левый мотор.

Параметры

  • stopType: SOFT (0) или HARD (1).

Пример

robot.stopLeft(SOFT); // Плавно остановить левый мотор
stopRight void stopRight(int stopType = HARD)

Останавливает только правый мотор.

Параметры

  • stopType: SOFT (0) или HARD (1).

Пример

robot.stopRight(HARD); // Резко остановить правый мотор

Движение (Блокирующее)

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

moveDist void moveDist(int power, int millimeters)

Перемещает робота на определенное расстояние, используя PID-контроль энкодеров.

Параметры

  • power: Мощность мотора (-100 до 100).
  • millimeters: Целевое расстояние.

Пример

// Ехать вперед 50см на 80% мощности
robot.moveDist(80, 500);
moveTime void moveTime(int power, int milliseconds)

Включает моторы на определенное время.

Параметры

  • power: Мощность мотора (-100 до 100).
  • milliseconds: Длительность в мс.

Пример

// Ехать вперед 2 секунды
robot.moveTime(100, 2000);
moveArcDist void moveArcDist(int power, int angle, int millimeters)

Движение по изогнутой траектории на определенное расстояние.

Параметры

  • power: Мощность мотора (-100 до 100).
  • angle: Угол руления (-90 до 90).
  • millimeters: Пройденное расстояние по дуге.

Пример

// Проехать 1 метр по широкой левой дуге
robot.moveArcDist(60, 20, 1000);
moveArcTime void moveArcTime(int power, int angle, int milliseconds)

Движение по изогнутой траектории в течение определенного времени.

Параметры

  • power: Мощность мотора (-100 до 100).
  • angle: Угол руления (-90 до 90).
  • milliseconds: Длительность в мс.

Пример

// Резкий поворот влево в течение 1.5 секунд
robot.moveArcTime(80, 60, 1500);
rotate void rotate(int power, int angle)

Вращает робота на месте на заданный угол.

Параметры

  • power: Скорость (0-100)
  • angle: Градусы. Положительный = Вправо, Отрицательный = Влево.

Пример

// Поворот на 90 градусов вправо
robot.rotate(60, 90);
rotateTo void rotateTo(int power, float angleDeg)

Поворот к абсолютному курсу одометрии кратчайшим путём. В отличие от rotate(), учитывает накопленную ошибку предыдущих манёвров.

Параметры

  • power: Скорость (0-100).
  • angleDeg: Целевой курс в градусах (в системе координат одометрии).

Пример

robot.rotateTo(50, 90);  // Повернуться на курс 90°
robot.rotateTo(50, 0);   // Вернуться на исходный курс
moveTo void moveTo(int power, float x, float y)

Движение к заданной точке одометрии: автоматически разворачивается на курс к цели, затем едет прямо.

Параметры

  • power: Скорость (0-100).
  • x, y: Целевая точка в мм (в системе координат одометрии).

Пример

robot.setPosition(0, 0, 0);
robot.moveTo(50, 400, 0);    // Вперёд 400 мм
robot.moveTo(50, 400, 400);  // Затем влево 400 мм
moveArcRadius void moveArcRadius(int power, float radiusMM, float angleDeg)

Дуга с точной геометрией: задаётся радиус поворота и угол дуги.

Параметры

  • power: Скорость (0-100).
  • radiusMM: Радиус дуги по центру робота (мм).
  • angleDeg: Угол дуги; знак задаёт направление поворота.

Пример

// Дуга радиусом 300 мм на 90° вправо
robot.moveArcRadius(60, 300, -90);

Асинхронное движение

Команды с суффиксом Async запускают движение и сразу возвращают управление — следующая строка кода выполняется, пока робот движется. Для синхронизации используйте isMoving() или waitMove().

moveDistAsync void moveDistAsync(int power, int millimeters)

Асинхронный аналог moveDist().

Параметры

  • power: Скорость (0-100).
  • millimeters: Расстояние в мм.

Пример

robot.moveDistAsync(80, 500);
module.setColor(0, 255, 0); // Светится зелёным во время движения
robot.waitMove();
moveTimeAsync void moveTimeAsync(int power, int milliseconds)

Асинхронный аналог moveTime().

Параметры

  • power: Скорость (0-100).
  • milliseconds: Длительность в мс.

Пример

robot.moveTimeAsync(100, 2000);
// ... другие действия ...
robot.waitMove();
moveArcDistAsync void moveArcDistAsync(int power, int angle, int millimeters)

Асинхронный аналог moveArcDist().

Параметры

  • power: Скорость (0-100).
  • angle: Угол руления (-90..90).
  • millimeters: Расстояние по дуге в мм.

Пример

robot.moveArcDistAsync(60, 30, 800);
moveArcTimeAsync void moveArcTimeAsync(int power, int angle, int milliseconds)

Асинхронный аналог moveArcTime().

Параметры

  • power: Скорость (0-100).
  • angle: Угол руления (-90..90).
  • milliseconds: Длительность в мс.

Пример

robot.moveArcTimeAsync(80, 60, 1500);
moveArcRadiusAsync void moveArcRadiusAsync(int power, float radiusMM, float angleDeg)

Асинхронный аналог moveArcRadius().

Параметры

  • power: Скорость (0-100).
  • radiusMM: Радиус дуги в мм.
  • angleDeg: Угол дуги.

Пример

robot.moveArcRadiusAsync(60, 300, -90);
rotateAsync void rotateAsync(int power, int angle)

Асинхронный аналог rotate().

Параметры

  • power: Скорость (0-100).
  • angle: Градусы. Положительный = Вправо, Отрицательный = Влево.

Пример

robot.rotateAsync(60, 90);
rotateToAsync void rotateToAsync(int power, float angleDeg)

Асинхронный аналог rotateTo().

Параметры

  • power: Скорость (0-100).
  • angleDeg: Целевой абсолютный курс в градусах.

Пример

robot.rotateToAsync(50, 90);
moveToAsync void moveToAsync(int power, float x, float y)

Асинхронный аналог moveTo().

Параметры

  • power: Скорость (0-100).
  • x, y: Целевая точка в мм.

Пример

robot.moveToAsync(50, 400, 400);
isMoving bool isMoving()

Возвращает true, пока активна задача асинхронного движения.

Пример

robot.moveDistAsync(80, 500);
while (robot.isMoving()) {
    module.setColor(255, 100, 0); // Оранжевый во время движения
}
module.setColor(0, 255, 0);       // Зелёный после остановки
waitMove bool waitMove(unsigned long timeoutMs = 0)

Блокирует выполнение до завершения текущей асинхронной команды движения. Возвращает true если движение завершилось штатно, false если истёк таймаут.

Параметры

  • timeoutMs (опционально): Максимальное время ожидания в мс. 0 — ждать бесконечно.

Пример

robot.moveDistAsync(80, 500);
// Здесь можно выполнять параллельные действия
bool ok = robot.waitMove(3000); // Ждать не более 3 секунд
if (!ok) robot.stop(HARD);     // Принудительная остановка по таймауту

Одометрия

Функции для отслеживания положения робота относительно точки старта.

getOdometry OdometryData getOdometry()

Возвращает текущую структуру оценки положения и ориентации.

Возвращает

Структура 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);
getAbsX float getAbsX()

Возвращает абсолютную координату X в миллиметрах.

Пример

float currentX = robot.getAbsX();
Serial.println(currentX);
getAbsY float getAbsY()

Возвращает абсолютную координату Y в миллиметрах.

Пример

float currentY = robot.getAbsY();
Serial.println(currentY);
getAbsAngle float getAbsAngle()

Возвращает абсолютный угол курса в градусах.

Пример

float currentAngle = robot.getAbsAngle();
Serial.println(currentAngle);
resetDistance void resetDistance()

Сбрасывает накопленный счетчик расстояния в 0. Используется для относительных измерений.

Пример

robot.resetDistance();
// Теперь getDistance() начнет отсчет с 0
getDistance float getDistance()

Возвращает расстояние, пройденное с момента последнего сброса, в миллиметрах.

Пример

robot.resetDistance();
robot.motorsArc(50, 0);
while(robot.getDistance() < 1000) {
  delay(10);
}
robot.stop(HARD);
resetAngle void resetAngle()

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

Пример

robot.resetAngle();
getAngle float getAngle()

Возвращает угол поворота с момента последнего сброса, в градусах.

Пример

float currentAngle = robot.getAngle();
Serial.println(currentAngle);
setPosition void setPosition(float x, float y, float angleDeg)

Задаёт начальную позу одометрии. Используется для привязки к координатам поля или сброса позиции в контрольной точке.

Параметры

  • x, y: Начальные координаты в мм.
  • angleDeg: Начальный курс в градусах.

Пример

// Стартовая позиция в начале координат, смотрит вдоль оси X
robot.setPosition(0, 0, 0);
getLeftTicks / getRightTicks long getLeftTicks() / long getRightTicks()

Возвращает количество тиков энкодера для соответствующего мотора.

Пример

long l = robot.getLeftTicks();
long r = robot.getRightTicks();
Serial.printf("L: %ld, R: %ld\n", l, r);
printOdometry void printOdometry()

Выводит текущие значения X, Y и Theta в Serial Monitor. Полезно для отладки.

Пример

void loop() {
    robot.printOdometry(); // Output: X: 10.5 Y: 5.2 Angle: 90.0
    delay(500);
}

Дисплей

displayPrint (Простой) void displayPrint(ValueType value)

Очищает экран OLED и выводит переданное значение по центру.

Поддерживаемые типы

Эта функция принимает разные типы данных, включая String, int, float, double и bool.

Пример

// Вывод текста
robot.displayPrint("Hello!");
// Вывод числа
robot.displayPrint(123);
displayPrint (Именованный) void displayPrint(const char* name, ValueType value)

Выводит название вверху экрана и значение по центру. Поддерживает все типы данных, как в простом displayPrint.

Пример

robot.displayPrint("Battery", 85);
robot.displayPrint("Mode", "Auto");
displayClear void displayClear()

Возвращает экран OLED в обычное состояние.

Пример

robot.displayClear();

Утилиты

getBatteryPower int getBatteryPower()

Возвращает текущий уровень заряда батареи в процентах (0-100). Возвращает -1 при ошибке или отсутствии связи.

Пример

int power = robot.getBatteryPower();
if (power < 10) {
    robot.displayPrint("LOW BATT");
}
blinkLED void blinkLED(int interval)

Задает фоновую задачу мигания встроенным светодиодом.

  • interval: Время в мс. Установите 0, чтобы остановить мигание.

Пример

// Мигать дважды в секунду
robot.blinkLED(500); 
// Остановить мигание
robot.blinkLED(0);
UniBaseControl void UniBaseControl()

Активирует цикл управления через UART.

Пример

void loop() {
    // Вход в режим удаленного управления UART
    robot.UniBaseControl();
}