смартдрайв#
Введение#
Класс 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
motorobjects 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.
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Ссылки на существующие экземпляры |
|
|
A reference to an existing |
|
|
Окружность колес трансмиссии. Значение по умолчанию: |
|
|
Расстояние между левым и правым колесами. Значение по умолчанию: |
|
|
Расстояние между передними и задними колесами. Значение по умолчанию: |
|
|
Единица измерения для |
|
|
Передаточное число, используемое для регулировки приводных расстояний, если используются шестерни. Значение по умолчанию: |
Пример#
/* 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 включает следующие функциональные элементы:
Действия — Поворот робота с помощью направления или вращения.
turnToHeading— Поворачивает робота, чтобы тот повернулся в определенном направлении от -359 до 359 градусов. Робот повернется в кратчайшем направлении, чтобы достичь целевого курса.turnToRotation— Поворачивает робота на заданное направление.calibrateDrivetrain— Калибрует настроенный инерциальный датчик, гироскопический датчик или датчик GPS трансмиссии.
Настройки — Отрегулируйте значения заголовка и поворота.
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 Functions1 — Разворачивает трансмиссию на заданный курс, используя текущую настроенную скорость поворота.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Поворачивает трансмиссию в заданном направлении с заданной скоростью.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Направление, в котором должен быть повернут робот, в градусах. Оно может составлять от -359 до 359 при использовании |
|
|
Единица измерения вращения: |
|
|
Скорость поворота задается в диапазоне от 0% до 100% при использовании |
|
|
Единица измерения скорости: |
|
|
|
Возвращает значение логического типа (Boolean), указывающее, достиг ли робот целевого направления.
true— Робот достиг целевого курса.false— Робот не завершил ход, или функция вернула управление до завершения хода, потому чтоwaitForCompletionбыл установлен наfalse.
Выполнение другой функции перемещения трансмиссии (например,
turnилиdrive) во время выполненияturnToHeadingпрервет текущее движение.Поскольку
turnToHeadingоснован на цели (использует параметрangle), такие функции, какisDoneиisMoving, работают сturnToHeading.
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation поворачивает робота на определенное расстояние.
Вращение — это величина поворота робота, измеряемая в градусах или оборотах. В начале проекта значение вращения устанавливается равным 0 градусам. Вращение также можно установить с помощью функции setRotation.
Значения вращения являются абсолютными. Это означает, что направление поворота зависит от текущего вращения робота. Поворот вправо увеличивает вращение, а поворот влево уменьшает его.
Например, если робот начинает движение с 0 градусов, а затем вы поворачиваетесь на 720 градусов, он дважды повернется вправо. Если же вы повернетесь на 360 градусов, он один раз повернется влево, потому что 360 меньше 720.
Проект будет ждать, пока робот не завершит вращение, прежде чем запустится следующая строка кода.
Available Functions1 — Поворачивает трансмиссию до заданного угла вращения, используя текущую настроенную скорость поворота.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Вращает трансмиссию до заданного угла вращения с заданной скоростью.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Величина поворота, на которую будет повернут робот. |
|
|
Единица измерения вращения: |
|
|
Скорость поворота задается в диапазоне от 0% до 100% при использовании |
|
|
Единица измерения скорости: |
|
|
|
Возвращает значение логического типа (Boolean), указывающее, достиг ли робот целевого вращения.
true— Робот достиг целевого вращения.false— Робот не завершил ход, или функция вернула управление до завершения хода, потому чтоwaitForCompletionбыл установлен наfalse.
Выполнение другой функции перемещения трансмиссии (например,
turnилиdrive) во время выполненияturnToRotationпрервет текущее движение.Поскольку
turnToRotationоснован на цели (использует параметрangle), такие функции, какisDoneиisMoving, работают сturnToRotation.
// 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++.
void calibrateDrivetrain();
Эта функция не принимает никаких параметров.
Return ValuesЭта функция не возвращает значения.
NotesВ начале каждого проекта робот автоматически калибруется.
Во время калибровки удерживайте робота неподвижно около 2 секунд.
Ниже представлена автоматически сгенерированная реализация функции 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 Functionsvoid setHeading(
double value,
rotationUnits units);
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Значение курса, которое необходимо установить для робота. Оно может принимать значения от -359 до 359 при использовании |
|
|
Единица измерения заголовка: |
Эта функция не возвращает значения.
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
Вращение — это величина поворота робота, измеряемая в градусах или оборотах. В начале проекта значение вращения устанавливается на 0 градусов. setRotation изменяет текущее значение вращения робота на новое значение.
Например, если робот совершил два полных оборота вправо, значение его вращения составит 720 градусов. Установка значения вращения на 0 градусов сбросит это значение с 720 до 0 градусов. Затем робот сможет совершать повороты, исходя из этого нового значения.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Значение поворота, которое необходимо установить для робота. |
|
|
Единица измерения заголовка: |
Эта функция не возвращает значения.
Examples// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
Направление движения — это то, в каком направлении смотрит робот, измеряемое в градусах. heading возвращает текущее направление движения робота от 0 до 359 градусов.
Начальный курс робота составляет 0 градусов.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Необязательно. Единица измерения для возврата направления: |
Возвращает текущее направление движения робота в виде значения double в выбранном юните.
// 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Необязательно. Единица измерения для возврата значения вращения: |
Возвращает текущее вращение робота в виде числа с плавающей запятой типа double единицей в выбранном юните.
// 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();