смартдрайв#

Введение#

Класс SmartDrive smartdrive управляет движением и поворотами робота с помощью двигателей, колес и датчика. SmartDrive smartdrive может использовать инерциальный датчик, гироскопический датчик или GPS-датчик для отслеживания направления и вращения.

smartdrive использует датчик для точного перемещения и поворота робота. В начале каждого проекта привод автоматически калибрует датчик. Во время калибровки удерживайте робота неподвижно около 2 секунд, чтобы он мог правильно двигаться и поворачивать.

Класс smartdrive основан на классе drivetrain. Он может использовать те же функции привода и поворота, что и drivetrain, а также добавляет функции на основе датчиков, такие как turnToHeading и turnToRotation.

Конструкторы классов#

1 — Создает смарт-привод, используя существующие motor_group для левой (&l) и правой (&r) сторон, а также инерциальный датчик, гироскоп или GPS-датчик.

smartdrive(
    motor_group     &l,
    motor_group     &r,
    inertial        &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

2 — Creates a smartdrive using existing motor objects for the left (&l) and right (&r) sides, along with an Inertial Sensor, Gyro Sensor, or GPS Sensor.

smartdrive(
    motor           &l,
    motor           &r,
    inertial        &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

Деструктор класса#

Уничтожает объект smartdrive smartdrive и освобождает связанные с ним ресурсы.

~smartdrive();

Параметры#

The sensor parameter can be an inertial, gyro, or gps object.

Параметр

Тип

Описание

&l / &r

motor_group / motor

Ссылки на существующие экземпляры motor или motor_group Оба параметра должны быть одного типа: либо два экземпляра motor_group , либо два экземпляра motor Параметр &l относится к левому двигателю или группе двигателей, а &r — к правому двигателю или группе двигателей.

&g

gyro&

A reference to an existing gps, gyro, or inertial instance.

wheelTravel

double

Окружность колес трансмиссии. Значение по умолчанию: 320.

trackWidth

double

Расстояние между левым и правым колесами. Значение по умолчанию: 320.

wheelBase

double

Расстояние между передними и задними колесами. Значение по умолчанию: 130.

unit

distanceUnits

Единица измерения для wheelTravel, trackWidthи wheelBase: mm (миллиметров, по умолчанию) или inches.

externalGearRatio

double

Передаточное число, используемое для регулировки приводных расстояний, если используются шестерни. Значение по умолчанию: 1.0.

Пример#

/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Create the left and right motor instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the inertial instance
inertial myInertial = inertial(PORT3);

// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor object
    rightMotor, // right motor object
    myInertial, // inertial object
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

Функции участников#

Класс smartdrive включает следующие функциональные элементы:

Действия — Поворот робота с помощью направления или вращения.

Настройки — Отрегулируйте значения заголовка и поворота.

  • setHeading — Изменяет текущий курс робота на новый.

  • setRotation — Изменяет текущее вращение робота на новое вращение.

Значения — Проверьте заголовок и поворот.

  • heading — Возвращает текущий курс робота от 0 до 359 градусов.

  • rotation — Возвращает текущее вращение робота.

A smartdrive can also use the inherited member functions from drivetrain, such as drive, driveFor, turn, turnFor, stop, isDone, and isMoving.

Перед вызовом функций членов smartdrive необходимо создать экземпляр smartdrive , как показано ниже:

/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Create the left and right motor instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the inertial instance
inertial myInertial = inertial(PORT3);

// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor object
    rightMotor, // right motor object
    myInertial, // inertial object
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

turnToHeading#

Направление движения — это направление, в котором смотрит робот, измеряемое в градусах. turnToHeading поворачивает робота, чтобы тот смотрел в определенном направлении от -359 до 359 градусов. Робот повернется по кратчайшему направлению, чтобы достичь целевого направления.

Начальный курс робота составляет 0 градусов.

Проект будет ждать, пока робот не завершит вращение, прежде чем запустится следующая строка кода.

Available Functions

1 — Разворачивает трансмиссию на заданный курс, используя текущую настроенную скорость поворота.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Поворачивает трансмиссию в заданном направлении с заданной скоростью.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Параметр

Тип

Описание

angle

double

Направление, в котором должен быть повернут робот, в градусах. Оно может составлять от -359 до 359 при использовании deg или degrees.

units

rotationUnits

Единица измерения вращения: deg (градус), rev (оборота) или raw (единицы измерения). Один оборот равен 360 градусам.

velocity

double

Скорость поворота задается в диапазоне от 0% до 100% при использовании velocityUnits::pct, от 0 до 600 об/мин при использовании параметра rpm rpmили от 0 до 3600 градусов в секунду при использовании параметра dps dps. Если скорость не указана, робот поворачивает с текущей скоростью поворота.

units_v

velocityUnits

Единица измерения скорости: velocityUnits::pct (процент), rpm (оборотов в минуту) или dps (градусов в секунду).

waitForCompletion

bool

true (по умолчанию) заставляет проект ждать, пока робот не закончит вращение, прежде чем будет выполнена следующая строка кода. false заставляет следующую строку кода выполниться немедленно.

Return Values

Возвращает значение логического типа (Boolean), указывающее, достиг ли робот целевого направления.

  • true — Робот достиг целевого курса.

  • false — Робот не завершил ход, или функция вернула управление до завершения хода, потому что waitForCompletion был установлен на false.

Notes
  • Выполнение другой функции перемещения трансмиссии (например, turn или drive) во время выполнения turnToHeading прервет текущее движение.

  • Поскольку turnToHeading основан на цели (использует параметр angle ), такие функции, как isDone и isMoving, работают с turnToHeading.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation поворачивает робота на определенное расстояние.

Вращение — это величина поворота робота, измеряемая в градусах или оборотах. В начале проекта значение вращения устанавливается равным 0 градусам. Вращение также можно установить с помощью функции setRotation.

Значения вращения являются абсолютными. Это означает, что направление поворота зависит от текущего вращения робота. Поворот вправо увеличивает вращение, а поворот влево уменьшает его.

Например, если робот начинает движение с 0 градусов, а затем вы поворачиваетесь на 720 градусов, он дважды повернется вправо. Если же вы повернетесь на 360 градусов, он один раз повернется влево, потому что 360 меньше 720.

Проект будет ждать, пока робот не завершит вращение, прежде чем запустится следующая строка кода.

Available Functions

1 — Поворачивает трансмиссию до заданного угла вращения, используя текущую настроенную скорость поворота.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Вращает трансмиссию до заданного угла вращения с заданной скоростью.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Параметр

Тип

Описание

angle

double

Величина поворота, на которую будет повернут робот.

units

rotationUnits

Единица измерения вращения: deg (градус), rev (оборота) или raw (единицы измерения). Один оборот равен 360 градусам.

velocity

double

Скорость поворота задается в диапазоне от 0% до 100% при использовании velocityUnits::pct, от 0 до 600 об/мин при использовании параметра rpm rpmили от 0 до 3600 градусов в секунду при использовании параметра dps dps. Если скорость не указана, робот поворачивает с текущей скоростью поворота.

units_v

velocityUnits

Единица измерения скорости: velocityUnits::pct (процент), rpm (оборотов в минуту) или dps (градусов в секунду).

waitForCompletion

bool

true (по умолчанию) заставляет проект ждать, пока робот не закончит вращение, прежде чем будет выполнена следующая строка кода. false заставляет следующую строку кода выполниться немедленно.

Return Values

Возвращает значение логического типа (Boolean), указывающее, достиг ли робот целевого вращения.

  • true — Робот достиг целевого вращения.

  • false — Робот не завершил ход, или функция вернула управление до завершения хода, потому что waitForCompletion был установлен на false.

Notes
  • Выполнение другой функции перемещения трансмиссии (например, turn или drive) во время выполнения turnToRotation прервет текущее движение.

  • Поскольку turnToRotation основан на цели (использует параметр angle ), такие функции, как isDone и isMoving, работают с turnToRotation.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

calibrateDrivetrain#

calibrateDrivetrain калибрует инерциальный датчик, гироскоп или GPS-датчик, настроенный для работы со смарт-приводом.

Калибровка помогает датчику правильно измерять движение. Во время калибровки удерживайте робота неподвижно около 2 секунд. Если робот будет двигаться во время калибровки, датчик может неправильно измерить движение.

Проект будет ждать завершения калибровки, прежде чем запустится следующая строка кода.

Параметр calibrateDrivetrain генерируется автоматически программой VEXcode при настройке трансмиссии с использованием инерциального датчика, датчика GPS или гироскопа. Он предоставляется как часть исходного кода проекта и не является частью API VEX V5 C++.

Available Functions
void calibrateDrivetrain();

Parameters

Эта функция не принимает никаких параметров.

Return Values

Эта функция не возвращает значения.

Notes
  • В начале каждого проекта робот автоматически калибруется.

  • Во время калибровки удерживайте робота неподвижно около 2 секунд.

Function Implementation

Ниже представлена ​​автоматически сгенерированная реализация функции calibrateDrivetrain , созданная VEXcode:

bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
  wait(200, msec);
  Brain.Screen.print("Calibrating");
  Brain.Screen.newLine();
  Brain.Screen.print("Inertial");
  DrivetrainInertial.calibrate();
  while (DrivetrainInertial.isCalibrating()) {
    wait(25, msec);
  }
  vexcode_initial_drivetrain_calibration_completed = true;
  // Clears the screen and returns the cursor to row 1, column 1.
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
}

setHeading#

Направление движения — это направление, в котором смотрит робот, измеряемое в градусах. setHeading изменяет текущее направление движения робота на новое значение.

Например, если робот повернулся вправо, установка направления на 0 градусов делает это положение, в котором робот повернулся вправо, новым значением 0 градусов. Затем робот может поворачиваться в другие положения, основываясь на этом новом направлении.

Available Functions
void  setHeading(
  double value,
  rotationUnits units);

Parameters

Параметр

Тип

Описание

value

double

Значение курса, которое необходимо установить для робота. Оно может принимать значения от -359 до 359 при использовании deg или degrees.

units

rotationUnits

Единица измерения заголовка: deg (градусы), rev (революции) или raw . Один оборот равен 360 градусам.

Return Values

Эта функция не возвращает значения.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

Вращение — это величина поворота робота, измеряемая в градусах или оборотах. В начале проекта значение вращения устанавливается на 0 градусов. setRotation изменяет текущее значение вращения робота на новое значение.

Например, если робот совершил два полных оборота вправо, значение его вращения составит 720 градусов. Установка значения вращения на 0 градусов сбросит это значение с 720 до 0 градусов. Затем робот сможет совершать повороты, исходя из этого нового значения.

Available Functions
void  setRotation(
  double value,
  rotationUnits units);

Parameters

Параметр

Тип

Описание

value

double

Значение поворота, которое необходимо установить для робота.

units

rotationUnits

Единица измерения заголовка: deg (градусы), rev (революции) или raw . Один оборот равен 360 градусам.

Return Values

Эта функция не возвращает значения.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

heading#

Направление движения — это то, в каком направлении смотрит робот, измеряемое в градусах. heading возвращает текущее направление движения робота от 0 до 359 градусов.

Начальный курс робота составляет 0 градусов.

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Параметр

Тип

Описание

units

rotationUnits

Необязательно. Единица измерения для возврата направления: degrees, deg (по умолчанию), revили rawОдин оборот равен 360 градусам.

Return Values

Возвращает текущее направление движения робота в виде значения double в выбранном юните.

Examples
// Show heading before and after turning
Brain.Screen.print("Before: %f", myDrivetrain.heading(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.heading(degrees));
myDrivetrain.stop();

rotation#

Вращение — это величина поворота робота, измеряемая в градусах или оборотах. В начале проекта значение вращения устанавливается равным 0 градусам. rotation возвращает текущее вращение робота.

Поворот вправо увеличивает угол поворота, а поворот влево уменьшает его. Например, два полных оборота вправо вернут 720 градусов.

Available Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Параметр

Тип

Описание

units

rotationUnits

Необязательно. Единица измерения для возврата значения вращения: degrees, deg (по умолчанию), revили rawОдин оборот равен 360 градусам.

Return Values

Возвращает текущее вращение робота в виде числа с плавающей запятой типа double единицей в выбранном юните.

Examples
// Show rotation before and after turning
Brain.Screen.print("Before: %f", myDrivetrain.rotation(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.rotation(degrees));
myDrivetrain.stop();