смартдрайв#
Вступ#
Клас smartdrive контролює рух та повороти робота за допомогою двигунів, коліс та гіроскопа. Клас smartdrive використовує підключений гіроскоп для відстеження напрямку та обертання.
A 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();
Параметри#
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Лівий та правий двигуни або групи двигунів. Обидва параметри повинні використовувати один і той самий тип: або два об’єкти |
|
|
Гіроскопічний датчик Gyro Sensor, що використовується смарт-приводом. |
|
|
Довжина кола коліс трансмісії. Значення за замовчуванням — |
|
|
Відстань між лівим і правим колесами. Значення за замовчуванням — |
|
|
Відстань між передніми та задніми колесами. Значення за замовчуванням — |
|
|
Одиниця вимірювання для |
|
|
Передавальне число, що використовується для регулювання відстані ходу, якщо використовуються шестерні. Значення за замовчуванням — |
Приклад#
/* 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— Калібрує гіроскопічний датчик, налаштований за допомогою смарт-приводу.
Налаштування — Налаштуйте значення заголовка та повороту.
setHeading— Змінює поточний напрямок руху робота на новий.setRotation— Змінює поточне обертання робота на нове обертання.
Значення — Перевірте напрямок та обертання.
heading— Повертає поточний напрямок руху робота від 0 до 359 градусів.rotation— Повертає поточне обертання робота.
smartdrive також може використовувати успадковані функції-члени від drivetrain, такі як drive, driveFor, turn, turnFor, stop, isDoneта 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 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% при використанні |
|
|
Одиниця вимірювання швидкості: |
|
|
|
Повертає, чи досяг робот цільового напрямку, у вигляді логічного значення.
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% при використанні |
|
|
Одиниця вимірювання швидкості: |
|
|
|
Повертає, чи досяг робот цільового обертання, у вигляді логічного значення.
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 калібрує гіроскопічний датчик, налаштований за допомогою смарт-приводу.
Калібрування допомагає гіроскопічному датчику правильно вимірювати рух. Під час калібрування тримайте робота нерухомим приблизно 2 секунди. Якщо робот рухається під час калібрування, гіроскопічний датчик може неправильно вимірювати рух.
Проєкт чекатиме на завершення калібрування, перш ніж буде виконано наступний рядок коду.
Значення calibrateDrivetrain генерується автоматично VEXcode, коли трансмісія налаштована з гіроскопічним датчиком. Воно надається як частина вихідного коду проекту та не є частиною C++ API VEX IQ.
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("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 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();