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_group dla 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 motor dla 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

&l / &r

motor_group / motor

Lewy i prawy silnik lub grupa silników. Oba parametry muszą używać tego samego typu: albo dwóch obiektów motor_group , albo dwóch obiektów motor.

&g

gyro / inertial

Czujnik żyroskopowy lub Czujnik bezwładnościowy używany przez smartdrive.

wheelTravel

double

Obwód kół układu napędowego. Wartość domyślna to 320.

trackWidth

double

Odległość między lewym a prawym kołem. Wartość domyślna to 320.

wheelBase

double

Odległość między przednimi i tylnymi kołami. Wartość domyślna to 130.

unit

distanceUnits

Jednostka dla wheelTravel, trackWidth, i wheelBase: mm (domyślnie) lub inches.

externalGearRatio

double

Przełożenie używane do regulacji odległości jazdy, jeśli używane są przekładnie. Domyślnie 1.0.

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 Functions

1 — Skręca robota we wskazanym kierunku, wykorzystując aktualną prędkość skrętu.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — 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 );

Parameters

Parametr

Typ

Opis

angle

double

Kierunek, w którym robot powinien być zwrócony, w stopniach. Może on wynosić od -359 do 359 przy użyciu deg lub degrees.

units

rotationUnits

Jednostka nagłówka: deg (stopnie), rev (obroty) lub raw (jednostki surowe). Jeden obrót to 360 stopni.

velocity

double

Prędkość obrotu od 0% do 100% przy użyciu velocityUnits::pct, od 0 do 120 obr./min przy użyciu rpmlub od 0 do 720 stopni na sekundę przy użyciu dps. Jeśli nie podano prędkości, robot obraca się z bieżącą prędkością obrotu.

units_v

velocityUnits

Jednostka prędkości: velocityUnits::pct (procent), rpm (obroty na minutę) lub dps (stopnie na sekundę).

waitForCompletion

bool

true (domyślnie) powoduje, że projekt czeka, aż robot skończy się obracać, zanim zostanie wykonany kolejny wiersz kodu. false powoduje, że następny wiersz kodu zostanie wykonany natychmiast.

Return Values

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ż waitForCompletion zostało ustawione na false.

Notes
  • Uruchomienie innej funkcji ruchu układu napędowego, gdy działa funkcja turnToHeading spowoduje przerwanie bieżącego ruchu.

  • turnToHeading używa nagłówka docelowego, więc można z nim używać isDone i isMoving.

Examples
// 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 Functions

1 — Obraca robota o określony kąt, wykorzystując aktualną prędkość obrotu.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — 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 );

Parameters

Parametr

Typ

Opis

angle

double

Wartość obrotu, do której obróci się robot.

units

rotationUnits

Jednostka obrotu: deg (stopnie), rev (obroty) lub raw (jednostki surowe). Jeden obrót to 360 stopni.

velocity

double

Prędkość obrotu od 0% do 100% przy użyciu velocityUnits::pct, od 0 do 120 obr./min przy użyciu rpmlub od 0 do 720 stopni na sekundę przy użyciu dps. Jeśli nie podano prędkości, robot obraca się z bieżącą prędkością obrotu.

units_v

velocityUnits

Jednostka prędkości: velocityUnits::pct (procent), rpm (obroty na minutę) lub dps (stopnie na sekundę).

waitForCompletion

bool

true (domyślnie) powoduje, że projekt czeka, aż robot skończy się obracać, zanim zostanie wykonany kolejny wiersz kodu. false powoduje, że następny wiersz kodu zostanie wykonany natychmiast.

Return Values

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ż waitForCompletion zostało ustawione na false.

Notes
  • Uruchomienie innej funkcji ruchu układu napędowego, gdy działa funkcja turnToRotation ), spowoduje przerwanie bieżącego ruchu.

  • turnToRotation używa obrotu docelowego, więc można z nim używać isDone i isMoving.

Examples
// 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++.

Available Functions
void calibrateDrivetrain();

Parameters

Ta funkcja nie przyjmuje żadnych parametrów.

Return Values

Ta funkcja nie zwraca wartości.

Notes
  • Robot 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.

Function Implementation

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 Functions
void setHeading(
  double value,
  rotationUnits units);

Parameters

Parametr

Typ

Opis

value

double

Wartość kierunku do ustawienia dla robota. Może wynosić od -359 do 359 przy ustawieniu deg lub degrees.

units

rotationUnits

Jednostka nagłówka: deg (stopnie), rev (obroty) lub raw (jednostki surowe). Jeden obrót to 360 stopni.

Return Values

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 Functions
void setRotation(
  double value,
  rotationUnits units);

Parameters

Parametr

Typ

Opis

value

double

Wartość obrotu, jaką należy ustawić dla robota.

units

rotationUnits

Jednostka obrotu: deg (stopnie), rev (obroty) lub raw (jednostki surowe). Jeden obrót to 360 stopni.

Return Values

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 Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Parametr

Typ

Opis

units

rotationUnits

Opcjonalnie. Jednostka, w której ma zostać przywrócony kurs: degrees, deg (domyślnie), revlub rawJeden obrót to 360 stopni.

Return Values

Zwraca aktualny kierunek robota jako double w wybranej jednostce.

Examples
// 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 Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Parametr

Typ

Opis

units

rotationUnits

Opcjonalnie. Jednostka obrotu powrotnego: degrees, deg (domyślnie), revlub rawJeden obrót to 360 stopni.

Return Values

Zwraca aktualny obrót robota jako double w wybranej jednostce.

Examples
// 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();