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

&l / &r

motor_group / motor

Odniesienia do istniejących instancji motor lub motor_group Oba parametry muszą być tego samego typu: albo dwie instancje motor_group , albo dwie instancje motor Parametr &l odnosi się do lewego silnika lub grupy silników, a &r odnosi się do prawego silnika lub grupy silników.

&g

gyro&

Odwołanie do istniejącego żyroskopu gyro lub inertial.

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 (milimetrów, 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 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.

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 Functions

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

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

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 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 600 obr./min przy użyciu rpmlub od 0 do 3600 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
  • Wykonanie innej funkcji ruchu układu napędowego (takiej jak turn lub drive) podczas trwania funkcji turnToHeading spowoduje przerwanie bieżącego ruchu.

  • Ponieważ turnToHeading jest oparte na celu (używa parametru kąta angle ), funkcje takie jak isDone i isMoving działają z turnToHeading.

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

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

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 600 obr./min przy użyciu rpmlub od 0 do 3600 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
  • Wykonanie innej funkcji ruchu układu napędowego (takiej jak turn lub drive) podczas trwania funkcji turnToRotation spowoduje przerwanie bieżącego ruchu.

  • Ponieważ turnToRotation jest oparte na celu (używa parametru kąta angle ), funkcje takie jak isDone i isMoving działają z turnToRotation.

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

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.

  • Podczas kalibracji należy utrzymać robota w bezruchu przez około 2 sekundy.

Function Implementation

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 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#

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 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, w której ma zostać przywrócony kurs: 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();