смартдрайв#
Введение#
Класс smartdrive управляет движением и поворотами робота с помощью двигателей, колес и датчика. Класс smartdrive может использовать подключенный гироскопический датчик или встроенный в Brain инерциальный датчик.
smartdrive использует датчик для точного перемещения и поворота робота. В начале каждого проекта привод автоматически калибрует датчик. Во время калибровки удерживайте робота неподвижно около 2 секунд, чтобы он мог правильно двигаться и поворачивать.
Класс smartdrive основан на классе drivetrain. Он может использовать те же функции привода и поворота, что и 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();
Параметры#
Параметр датчика может быть равен gyro или inertial (объект).
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Левый и правый двигатели или группы двигателей. Оба параметра должны иметь один и тот же тип: либо два объекта |
|
|
The Gyro Sensor or Inertial Sensor used by the 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 Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial 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 Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial Sensor
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.
Выполнение другой функции перемещения трансмиссии во время выполнения функции
turnToHeadingпрервет текущее перемещение.turnToHeadingиспользует целевое направление, поэтомуisDoneиisMovingможно использовать с ним.
// 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.
Выполнение другой функции перемещения трансмиссии во время выполнения функции
turnToRotationпрервет текущее перемещение.turnToRotationиспользует целевое вращение, поэтомуisDoneиisMovingможно использовать с ним.
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain калибрует подключенный гироскопический датчик или встроенный инерциальный датчик блока управления, настроенный с помощью smartdrive.
Калибровка помогает датчику правильно измерять движение. Во время калибровки удерживайте робота неподвижно около 2 секунд. Если робот будет двигаться во время калибровки, датчик может неправильно измерить движение.
Проект будет ждать завершения калибровки, прежде чем запустится следующая строка кода.
Примечание: Параметр calibrateDrivetrain генерируется автоматически программой VEXcode при настройке трансмиссии с использованием гироскопического или инерциального датчика. Он предоставляется как часть исходного кода проекта и не является частью API VEX IQ C++.
void calibrateDrivetrain();
Эта функция не принимает никаких параметров.
Return ValuesЭта функция не возвращает значения.
NotesПри настройке интеллектуального привода в VEXcode робот автоматически калибруется в начале каждого проекта.
Во время калибровки удерживайте робота неподвижно около 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();