inteligentny napęd#
Wstęp#
Klasa smartdrive smartdrive kontroluje sposób jazdy i skręcania robota za pomocą silników, kół i czujnika. Klasa smartdrive smartdrive może używać czujnika bezwładnościowego lub czujnika żyroskopowego do śledzenia kierunku i obrotu.
A smartdrive uses the sensor to help the robot move and turn precisely. At the start of each project, the drivetrain calibrates the sensor automatically. Keep the robot still for about 2 seconds during calibration, so the robot can move and turn correctly.
Klasa smartdrive jest oparta na klasie drivetrain. Może ona korzystać z tych samych funkcji napędu i skrętu co drivetrain, a także dodaje funkcje oparte na czujnikach, takie jak turnToHeading i turnToRotation.
Konstruktory klas#
1 — Tworzy inteligentny napęd, używając istniejących
motor_groupdla lewej (&l) i prawej (&r) strony, wraz z czujnikiem bezwładnościowym lub czujnikiem żyroskopowym.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 — Tworzy inteligentny napęd, wykorzystując istniejące obiekty
motordla lewej (&l) i prawej (&r) strony, wraz z czujnikiem bezwładnościowym lub czujnikiem żyroskopowym.smartdrive( motor &l, motor &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Destruktor klasy#
Niszczy obiekt smartdrive smartdrive i zwalnia powiązane zasoby.
~smartdrive();
Parametry#
Parametrem czujnika może być obiekt żyroskopowy inertial lub gyro.
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Odniesienia do istniejących instancji |
|
|
Odwołanie do istniejącego żyroskopu |
|
|
Obwód kół układu napędowego. Wartość domyślna to |
|
|
Odległość między lewym a prawym kołem. Wartość domyślna to |
|
|
Odległość między przednimi i tylnymi kołami. Wartość domyślna to |
|
|
Jednostka dla |
|
|
Przełożenie używane do regulacji odległości jazdy, jeśli używane są przekładnie. Domyślnie |
Przykład#
/* 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
Funkcje członkowskie#
Klasa smartdrive zawiera następujące funkcje członkowskie:
Akcje — Obróć robota, używając kierunku lub obrotu.
turnToHeading— Obraca robota w kierunku określonego kierunku od -359 do 359 stopni. Robot obróci się w najkrótszym kierunku, aby osiągnąć docelowy kierunek.turnToRotation— Obraca robota o określoną wartość.calibrateDrivetrain— Kalibruje skonfigurowany Czujnik bezwładnościowy lub Czujnik żyroskopowy układu napędowego.
Ustawienia — Dostosuj wartości nagłówka i obrotu.
setHeading— Zmienia aktualny kierunek robota na nowy kierunek.setRotation— Zmienia aktualny obrót robota na nowy obrót.
Wartości — sprawdź kierunek i obrót.
heading— Zwraca aktualny kierunek robota od 0 do 359 stopni.rotation— Zwraca aktualny obrót robota.
A smartdrive can also use the inherited member functions from drivetrain, such as drive, driveFor, turn, turnFor, stop, isDone, and isMoving.
Przed wywołaniem jakiejkolwiek funkcji członkowskiej smartdrive należy utworzyć instancję smartdrive , jak pokazano poniżej:
/* 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#
Kurs to kierunek, w którym zwrócony jest robot, mierzony w stopniach. turnToHeading obraca robota w określonym kierunku od -359 do 359 stopni. Robot obróci się w najkrótszym kierunku, aby osiągnąć docelowy kurs.
Początkowy kierunek robota wynosi 0 stopni.
Projekt będzie czekał, aż robot zakończy obracanie się, zanim zostanie uruchomiony kolejny wiersz kodu.
Available Functions1 — Obraca układ napędowy na określony kierunek, używając aktualnie skonfigurowanej prędkości skrętu.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Obrót układu napędowego na określony kierunek przy określonej prędkości.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Kierunek, w którym robot powinien być zwrócony, w stopniach. Może on wynosić od -359 do 359 przy użyciu |
|
|
Jednostka obrotu: |
|
|
Prędkość obrotu od 0% do 100% przy użyciu |
|
|
Jednostka prędkości: |
|
|
|
Zwraca wartość logiczną informującą, czy robot osiągnął cel.
true— Robot osiągnął docelowy kierunek.false— Robot nie zakończył tury lub funkcja została zwrócona przed zakończeniem tury, ponieważwaitForCompletionzostało ustawione nafalse.
Wykonanie innej funkcji ruchu układu napędowego (takiej jak
turnlubdrive) podczas trwania funkcjiturnToHeadingspowoduje przerwanie bieżącego ruchu.Ponieważ
turnToHeadingjest oparte na celu (używa parametru kątaangle), funkcje takie jakisDoneiisMovingdziałają zturnToHeading.
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation obraca robota o określoną wartość.
Obrót to wartość, o jaką robot wykonał obrót, mierzona w stopniach lub obrotach. Na początku projektu wartość obrotu jest ustawiona na 0 stopni. Obrót można również ustawić za pomocą funkcji setRotation.
Wartości obrotu są bezwzględne. Oznacza to, że kierunek obrotu zależy od aktualnego obrotu robota. Skręt w prawo zwiększa obrót, a w lewo zmniejsza.
Na przykład, jeśli robot zaczyna od 0 stopni i obrócisz go o 720 stopni, skręci w prawo dwa razy. Jeśli następnie obrócisz go o 360 stopni, skręci raz w lewo, ponieważ 360 stopni to mniej niż 720.
Projekt będzie czekał, aż robot zakończy obracanie się, zanim zostanie uruchomiony kolejny wiersz kodu.
Available Functions1 — Obraca układ napędowy do określonego kierunku obrotów, używając aktualnie skonfigurowanej prędkości obrotu.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Obraca układ napędowy do określonego kierunku obrotów z określoną prędkością.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Wartość obrotu, do której obróci się robot. |
|
|
Jednostka obrotu: |
|
|
Prędkość obrotu od 0% do 100% przy użyciu |
|
|
Jednostka prędkości: |
|
|
|
Zwraca wartość logiczną informującą, czy robot osiągnął docelowy obrót.
true— Robot osiągnął docelowy obrót.false— Robot nie zakończył tury lub funkcja została zwrócona przed zakończeniem tury, ponieważwaitForCompletionzostało ustawione nafalse.
Wykonanie innej funkcji ruchu układu napędowego (takiej jak
turnlubdrive) podczas trwania funkcjiturnToRotationspowoduje przerwanie bieżącego ruchu.Ponieważ
turnToRotationjest oparte na celu (używa parametru kątaangle), funkcje takie jakisDoneiisMovingdziałają zturnToRotation.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain kalibruje czujnik bezwładnościowy lub czujnik żyroskopowy skonfigurowany ze smartdrive.
Kalibracja pomaga czujnikowi prawidłowo mierzyć ruch. Podczas kalibracji należy utrzymać robota w bezruchu przez około 2 sekundy. Jeśli robot porusza się podczas kalibracji, czujnik może nieprawidłowo mierzyć ruch.
Projekt zaczeka na zakończenie kalibracji przed uruchomieniem kolejnej linii kodu.
calibrateDrivetrain jest generowany automatycznie przez VEXcode po skonfigurowaniu układu napędowego z czujnikiem bezwładnościowym lub żyroskopowym. Jest on dostarczany jako część kodu źródłowego projektu i nie jest częścią API VEX EXP C++.
void calibrateDrivetrain();
Ta funkcja nie przyjmuje żadnych parametrów.
Return ValuesTa funkcja nie zwraca wartości.
NotesRobot kalibruje się automatycznie na początku każdego projektu.
Podczas kalibracji należy utrzymać robota w bezruchu przez około 2 sekundy.
Poniżej przedstawiono automatycznie wygenerowaną implementację polecenia calibrateDrivetrain utworzoną przez program 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#
Kierunek to kierunek, w którym zwrócony jest robot, mierzony w stopniach. setHeading zmienia bieżący kierunek robota na nową wartość kierunku.
Na przykład, jeśli robot obrócił się w prawo, ustawienie kierunku na 0 stopni spowoduje, że ta pozycja skierowana w prawo stanie się nowym 0 stopniem. Następnie robot może obrócić się w inne pozycje w oparciu o ten nowy kierunek.
Available Functionsvoid setHeading(
double value,
rotationUnits units);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Wartość kierunku do ustawienia dla robota. Może wynosić od -359 do 359 przy ustawieniu |
|
|
Jednostka nagłówka: |
Ta funkcja nie zwraca wartości.
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
Obrót to wartość, o jaką robot wykonał obrót, mierzona w stopniach lub obrotach. Na początku projektu wartość obrotu jest ustawiona na 0 stopni. setRotation zmienia bieżący obrót robota na nową wartość.
Na przykład, jeśli robot wykonał dwa pełne obroty w prawo, jego wartość obrotu wyniesie 720 stopni. Ustawienie obrotu na 0 stopni zresetuje ten obrót z 720 do 0 stopni. Następnie robot może wykonać obrót w oparciu o tę nową wartość.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Wartość obrotu, jaką należy ustawić dla robota. |
|
|
Jednostka obrotu: |
Ta funkcja nie zwraca wartości.
Examples// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
Kurs to kierunek, w którym zwrócony jest robot, mierzony w stopniach. heading zwraca aktualny kurs robota od 0 do 359 stopni.
Początkowy kierunek robota wynosi 0 stopni.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Opcjonalnie. Jednostka, w której ma zostać przywrócony kurs: |
Zwraca aktualny kierunek robota jako double w wybranej jednostce.
// 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#
Obrót to wartość obrotu robota, mierzona w stopniach lub obrotach. Na początku projektu wartość obrotu jest ustawiona na 0 stopni. rotation zwraca aktualny obrót robota.
Skręt w prawo zwiększa obrót, a skręt w lewo zmniejsza. Na przykład, wykonanie dwóch pełnych obrotów w prawo spowoduje obrót o 720 stopni.
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Opcjonalnie. Jednostka, w której ma zostać przywrócony kurs: |
Zwraca aktualny obrót robota jako double w wybranej jednostce.
// 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();