смартдрайв#

Введение#

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

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

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

На этой странице в качестве примера имени смарт-привода используется myDrivetrain При необходимости замените его на собственное имя.

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

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

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

2 — Создает смарт-привод, используя существующие объекты motor для левой и правой сторон, а также гироскопический датчик.

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

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

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

~smartdrive();

Параметры#

Параметр

Тип

Описание

&l / &r

motor_group / motor

Левый и правый двигатели или группы двигателей. Оба параметра должны иметь один и тот же тип: либо два объекта motor_group , либо два объекта motor ).

&g

gyro

The Gyro Sensor used by the smartdrive.

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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the Gyro Sensor object.
gyro myGyro = gyro(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myGyro,     // Gyro Sensor
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

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

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

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

  • turnToHeading — Поворачивает робота, чтобы тот повернулся в определенном направлении от -359 до 359 градусов. Робот повернется в кратчайшем направлении, чтобы достичь целевого курса.

  • turnToRotation — Поворачивает робота на заданное направление.

  • calibrateDrivetrain — Калибрует гироскопический датчик, настроенный с помощью 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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the Gyro Sensor object.
gyro myGyro = gyro(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myGyro,     // Gyro Sensor
    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 до 120 об/мин при использовании параметра rpm rpmили от 0 до 720 градусов в секунду при использовании параметра dps dps. Если скорость не указана, робот поворачивает с текущей скоростью поворота.

units_v

velocityUnits

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

waitForCompletion

bool

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

Return Values

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

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

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

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

  • turnToHeading использует целевое направление, поэтому isDone и isMoving можно использовать с ним.

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 до 120 об/мин при использовании параметра rpm rpmили от 0 до 720 градусов в секунду при использовании параметра dps dps. Если скорость не указана, робот поворачивает с текущей скоростью поворота.

units_v

velocityUnits

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

waitForCompletion

bool

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

Return Values

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

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

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

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

  • turnToRotation использует целевое вращение, поэтому isDone и isMoving можно использовать с ним.

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

calibrateDrivetrain#

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

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

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

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

Available Functions
void calibrateDrivetrain();

Parameters

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

Return Values

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

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

  • Во время калибровки удерживайте робота неподвижно около 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("Gyro");
  DrivetrainGyro.calibrate();
  while (DrivetrainGyro.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();