inteligentny napęd#
Wstęp#
Klasa smartdrive smartdrive steruje sposobem jazdy i skręcania robota za pomocą silników, kół i czujnika. Klasa smartdrive smartdrive może korzystać z podłączonego czujnika żyroskopowego lub wbudowanego w mózg czujnika bezwładnościowego.
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.
Ta strona używa myDrivetrain jako przykładowej nazwy smartdrive. W razie potrzeby zastąp ją własną, skonfigurowaną nazwą.
Konstruktory klas#
1 — Tworzy inteligentny napęd, wykorzystując istniejące
motor_groupdla lewej i prawej strony, wraz z czujnikiem żyroskopowym lub czujnikiem bezwładnościowym.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 — Tworzy inteligentny napęd, wykorzystując istniejące obiekty
motordla lewej i prawej strony, wraz z czujnikiem żyroskopowym lub czujnikiem bezwładnościowym.smartdrive( motor &l, motor &r, gyro &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ć żyroskop gyro lub obiekt bezwładnościowy inertial.
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Lewy i prawy silnik lub grupa silników. Oba parametry muszą używać tego samego typu: albo dwóch obiektów |
|
|
Czujnik żyroskopowy lub Czujnik bezwładnościowy używany przez smartdrive. |
|
|
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 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
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 czujnik skonfigurowany za pomocą smartdrive.
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 smartdrive należy utworzyć obiekt 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#
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 — Skręca robota we wskazanym kierunku, wykorzystując aktualną prędkość skrętu.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Skręca robota w określonym kierunku z określoną 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 nagłówka: |
|
|
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.
Uruchomienie innej funkcji ruchu układu napędowego, gdy działa funkcja
turnToHeadingspowoduje przerwanie bieżącego ruchu.turnToHeadingużywa nagłówka docelowego, więc można z nim używaćisDoneiisMoving.
// 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 robota o określony kąt, wykorzystując aktualną prędkość obrotu.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Obraca robota o określoną wartość i 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.
Uruchomienie innej funkcji ruchu układu napędowego, gdy działa funkcja
turnToRotation), spowoduje przerwanie bieżącego ruchu.turnToRotationużywa obrotu docelowego, więc można z nim używaćisDoneiisMoving.
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain kalibruje podłączony czujnik żyroskopowy lub wbudowany czujnik bezwładnościowy mózgu 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.
Uwaga: calibrateDrivetrain jest generowany automatycznie przez VEXcode, gdy układ napędowy jest skonfigurowany z czujnikiem żyroskopowym lub bezwładnościowym. Jest on dostarczany jako część kodu źródłowego projektu i nie jest częścią API VEX IQ 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, gdy w VEXcode zostanie skonfigurowany inteligentny napęd.
Podczas kalibracji należy utrzymać robota w bezruchu przez około 2 sekundy.
Poniżej znajduje się przykład automatycznie wygenerowanej implementacji calibrateDrivetrain utworzonej przez 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#
Kierunek to kierunek, w którym zwrócony jest robot, mierzony w stopniach. heading zwraca aktualny kierunek robota z zakresu 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 obrotu powrotnego: |
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();