έξυπνος δίσκος#

Εισαγωγή#

Η κλάση smartdrive ελέγχει τον τρόπο με τον οποίο ένα ρομπότ οδηγεί και περιστρέφεται χρησιμοποιώντας κινητήρες, τροχούς και έναν αισθητήρα. Ένα smartdrive μπορεί να χρησιμοποιήσει έναν Αδρανειακό Αισθητήρα ή έναν Γυροσκοπικό Αισθητήρα για την παρακολούθηση της κατεύθυνσης και της περιστροφής.

Ένα smartdrive χρησιμοποιεί τον αισθητήρα για να βοηθήσει το ρομπότ να κινείται και να περιστρέφεται με ακρίβεια. Στην αρχή κάθε έργου, το σύστημα μετάδοσης κίνησης βαθμονομεί αυτόματα τον αισθητήρα. Κρατήστε το ρομπότ ακίνητο για περίπου 2 δευτερόλεπτα κατά τη διάρκεια της βαθμονόμησης, ώστε το ρομπότ να μπορεί να κινείται και να περιστρέφεται σωστά.

Η κλάση smartdrive βασίζεται στην κλάση drivetrain. Μπορεί να χρησιμοποιήσει τις ίδιες συναρτήσεις οδήγησης και στροφής με το drivetrain και προσθέτει επίσης συναρτήσεις που βασίζονται σε αισθητήρες, όπως turnToHeading και turnToRotation.

Κατασκευαστές κλάσεων#

1 — Δημιουργεί έναν smartdrive χρησιμοποιώντας υπάρχοντα αντικείμενα motor_group για την αριστερή (&l) και τη δεξιά (&r) πλευρά, μαζί με έναν Αδρανειακό Αισθητήρα ή έναν Γυροσκοπικό Αισθητήρα.

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 — Δημιουργεί έναν έξυπνο δίσκο χρησιμοποιώντας υπάρχοντα αντικείμενα motor για την αριστερή (&l) και τη δεξιά (&r) πλευρά, μαζί με έναν αδρανειακό αισθητήρα ή έναν γυροσκοπικό αισθητήρα.

smartdrive(
    motor           &l,
    motor           &r,
    inertial        &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

Καταστροφέας κλάσης#

Καταστρέφει το αντικείμενο smartdrive και απελευθερώνει τους σχετικούς πόρους.

~smartdrive();

Παράμετροι#

The sensor parameter can be an inertial or gyro object.

Παράμετρος

Τύπος

Περιγραφή

&l / &r

motor_group / motor

Αναφορές σε υπάρχουσες παρουσίες motor ή motor_group Και οι δύο παράμετροι πρέπει να είναι του ίδιου τύπου: είτε δύο παρουσίες motor_group είτε δύο παρουσίες motor Η παράμετρος &l αναφέρεται στον αριστερό κινητήρα ή ομάδα κινητήρων και οι παράμετροι &r αναφέρονται στον δεξιό κινητήρα ή ομάδα κινητήρων.

&g

gyro&

A reference to an existing gyro or inertial instance.

wheelTravel

double

Η περιφέρεια των τροχών του συστήματος μετάδοσης κίνησης. Η προεπιλογή είναι 320.

trackWidth

double

Η απόσταση μεταξύ του αριστερού και του δεξιού τροχού. Η προεπιλογή είναι 320.

wheelBase

double

Η απόσταση μεταξύ των μπροστινών και των πίσω τροχών. Η προεπιλογή είναι 130.

unit

distanceUnits

The unit for wheelTravel, trackWidth, and wheelBase: mm (millimeters, default) or inches.

externalGearRatio

double

Η σχέση μετάδοσης που χρησιμοποιείται για την προσαρμογή των αποστάσεων οδήγησης εάν χρησιμοποιούνται ταχύτητες. Η προεπιλογή είναι 1.0.

Παράδειγμα#

/* 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

Συναρτήσεις Μελών#

Η κλάση 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 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#

Μια κατεύθυνση είναι η κατεύθυνση προς την οποία είναι στραμμένο το ρομπότ, μετρούμενη σε μοίρες. turnToHeading γυρίζει το ρομπότ ώστε να στραφεί προς μια συγκεκριμένη κατεύθυνση από -359 σε 359 μοίρες. Το ρομπότ θα στρίψει προς τη συντομότερη κατεύθυνση για να φτάσει στην κατεύθυνση-στόχο.

Η αρχική κατεύθυνση του ρομπότ είναι 0 μοίρες.

Το έργο θα περιμένει μέχρι να ολοκληρώσει την περιστροφή του ρομπότ προτού εκτελεστεί η επόμενη γραμμή κώδικα.

Available Functions

1 — Στρέφει το σύστημα μετάδοσης κίνησης στην καθορισμένη κατεύθυνση χρησιμοποιώντας την τρέχουσα ρυθμισμένη ταχύτητα στροφής.

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

2 — Στρέφει το σύστημα μετάδοσης κίνησης στην καθορισμένη κατεύθυνση με την καθορισμένη ταχύτητα.

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

Parameters

Παράμετρος

Τύπος

Περιγραφή

angle

double

Η κατεύθυνση προς την οποία πρέπει να είναι στραμμένο το ρομπότ, σε μοίρες. Αυτή μπορεί να είναι από -359 έως 359 όταν χρησιμοποιούνται deg ή degrees.

units

rotationUnits

Η μονάδα περιστροφής: deg (μοίρες), rev (περιστροφές) ή raw (ακατέργαστες μονάδες). Μία περιστροφή ισούται με 360 μοίρες.

velocity

double

Η ταχύτητα περιστροφής κυμαίνεται από 0% έως 100% όταν χρησιμοποιείται velocityUnits::pct, από 0 έως 600 rpm όταν χρησιμοποιείται rpmή από 0 έως 3600 μοίρες ανά δευτερόλεπτο όταν χρησιμοποιείται dpsΕάν δεν παρέχεται ταχύτητα, το ρομπότ περιστρέφεται με την τρέχουσα ταχύτητα περιστροφής.

units_v

velocityUnits

Η μονάδα ταχύτητας: velocityUnits::pct (ποσοστό), rpm (περιστροφές ανά λεπτό) ή dps (μοίρες ανά δευτερόλεπτο).

waitForCompletion

bool

true (προεπιλογή) κάνει το έργο να περιμένει μέχρι το ρομπότ να ολοκληρώσει την περιστροφή πριν εκτελεστεί η επόμενη γραμμή κώδικα. false κάνει την επόμενη γραμμή κώδικα να εκτελεστεί αμέσως.

Return Values

Επιστρέφει εάν το ρομπότ έφτασε στην κατεύθυνση-στόχο, ως δυαδική τιμή.

  • true — Το ρομπότ έφτασε στον στόχο με κατεύθυνση.

  • false — Το ρομπότ δεν ολοκλήρωσε τη σειρά του ή η συνάρτηση επέστρεψε πριν ολοκληρωθεί η σειρά του, επειδή η τιμή waitForCompletion είχε οριστεί σε false.

Notes
  • Η εκτέλεση μιας άλλης λειτουργίας κίνησης του συστήματος μετάδοσης κίνησης (όπως turn ή drive) ενώ turnToHeading βρίσκεται σε εξέλιξη θα διακόψει την τρέχουσα κίνηση.

  • Because turnToHeading is target-based (uses an angle parameter), functions such as isDone and isMoving work with turnToHeading.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation γυρίζει το ρομπότ σε μια συγκεκριμένη περιστροφή.

Η περιστροφή είναι η περιστροφή του ρομπότ, μετρούμενη σε μοίρες ή περιστροφές. Στην αρχή ενός έργου, η τιμή περιστροφής ορίζεται σε 0 μοίρες. Η περιστροφή μπορεί επίσης να οριστεί χρησιμοποιώντας τη συνάρτηση setRotation.

Οι τιμές περιστροφής είναι απόλυτες. Αυτό σημαίνει ότι η κατεύθυνση της στροφής εξαρτάται από την τρέχουσα περιστροφή του ρομπότ. Η στροφή προς τα δεξιά αυξάνει την περιστροφή και η στροφή προς τα αριστερά τη μειώνει.

Για παράδειγμα, αν το ρομπότ ξεκινήσει από 0 μοίρες και στρίψετε σε περιστροφή 720 μοιρών, θα στρίψει δεξιά δύο φορές. Αν στη συνέχεια στρίψετε σε περιστροφή 360 μοιρών, θα στρίψει αριστερά μία φορά, επειδή οι 360 μοίρες είναι μικρότερες από 720 μοίρες.

Το έργο θα περιμένει μέχρι να ολοκληρώσει την περιστροφή του ρομπότ προτού εκτελεστεί η επόμενη γραμμή κώδικα.

Available Functions

1 — Περιστρέφει το σύστημα μετάδοσης κίνησης στην καθορισμένη περιστροφή χρησιμοποιώντας την τρέχουσα ρυθμισμένη ταχύτητα στροφής.

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

2 — Περιστρέφει το σύστημα μετάδοσης κίνησης στην καθορισμένη περιστροφή με την καθορισμένη ταχύτητα.

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

Parameters

Παράμετρος

Τύπος

Περιγραφή

angle

double

Η τιμή περιστροφής στην οποία θα στραφεί το ρομπότ.

units

rotationUnits

Η μονάδα περιστροφής: deg (μοίρες), rev (περιστροφές) ή raw (ακατέργαστες μονάδες). Μία περιστροφή ισούται με 360 μοίρες.

velocity

double

Η ταχύτητα περιστροφής κυμαίνεται από 0% έως 100% όταν χρησιμοποιείται velocityUnits::pct, από 0 έως 600 rpm όταν χρησιμοποιείται rpmή από 0 έως 3600 μοίρες ανά δευτερόλεπτο όταν χρησιμοποιείται dpsΕάν δεν παρέχεται ταχύτητα, το ρομπότ περιστρέφεται με την τρέχουσα ταχύτητα περιστροφής.

units_v

velocityUnits

Η μονάδα ταχύτητας: velocityUnits::pct (ποσοστό), rpm (περιστροφές ανά λεπτό) ή dps (μοίρες ανά δευτερόλεπτο).

waitForCompletion

bool

true (προεπιλογή) κάνει το έργο να περιμένει μέχρι το ρομπότ να ολοκληρώσει την περιστροφή πριν εκτελεστεί η επόμενη γραμμή κώδικα. false κάνει την επόμενη γραμμή κώδικα να εκτελεστεί αμέσως.

Return Values

Επιστρέφει εάν το ρομπότ έφτασε στην περιστροφή-στόχο, ως λογική τιμή.

  • true — Το ρομπότ έφτασε στην περιστροφή-στόχο.

  • false — Το ρομπότ δεν ολοκλήρωσε τη σειρά του ή η συνάρτηση επέστρεψε πριν ολοκληρωθεί η σειρά του, επειδή η τιμή waitForCompletion είχε οριστεί σε false.

Notes
  • Η εκτέλεση μιας άλλης λειτουργίας κίνησης του συστήματος μετάδοσης κίνησης (όπως turn ή drive) ενώ η περιστροφή turnToRotation βρίσκεται σε εξέλιξη θα διακόψει την τρέχουσα κίνηση.

  • Because turnToRotation is target-based (uses an angle parameter), functions such as isDone and isMoving work with turnToRotation.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

calibrateDrivetrain#

calibrateDrivetrain βαθμονομεί τον Αισθητήρα Αδράνειας ή τον Γυροσκοπικό Αισθητήρα που έχει διαμορφωθεί με το smartdrive.

Η βαθμονόμηση βοηθά τον αισθητήρα να μετρήσει σωστά την κίνηση. Κρατήστε το ρομπότ ακίνητο για περίπου 2 δευτερόλεπτα κατά τη διάρκεια της βαθμονόμησης. Εάν το ρομπότ κινηθεί κατά τη διάρκεια της βαθμονόμησης, ο αισθητήρας ενδέχεται να μην μετρήσει σωστά την κίνηση.

Το έργο θα περιμένει μέχρι να ολοκληρωθεί η βαθμονόμηση πριν εκτελεστεί η επόμενη γραμμή κώδικα.

calibrateDrivetrain δημιουργείται αυτόματα από το VEXcode όταν ένα σύστημα μετάδοσης κίνησης έχει διαμορφωθεί με έναν Αισθητήρα Αδράνειας ή έναν Αισθητήρα Γυροσκοπίου. Παρέχεται ως μέρος του πηγαίου κώδικα του έργου και δεν αποτελεί μέρος του API VEX EXP C++.

Available Functions
void calibrateDrivetrain();

Parameters

Αυτή η συνάρτηση δεν δέχεται καμία παράμετρο.

Return Values

Αυτή η συνάρτηση δεν επιστρέφει τιμή.

Notes
  • Το ρομπότ βαθμονομείται αυτόματα στην αρχή κάθε έργου.

  • Κρατήστε το ρομπότ ακίνητο για περίπου 2 δευτερόλεπτα κατά τη διάρκεια της βαθμονόμησης.

Function Implementation

Η ακόλουθη είναι η αυτόματα δημιουργημένη υλοποίηση του calibrateDrivetrain που δημιουργήθηκε από το 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#

Η κατεύθυνση είναι η κατεύθυνση που βλέπει το ρομπότ, μετρούμενη σε μοίρες. Η τιμή setHeading αλλάζει την τρέχουσα κατεύθυνση του ρομπότ σε μια νέα τιμή κατεύθυνσης.

Για παράδειγμα, εάν το ρομπότ έχει στραφεί προς τα δεξιά, η ρύθμιση της κατεύθυνσης σε 0 μοίρες καθιστά αυτή τη θέση προς τα δεξιά τις νέες 0 μοίρες. Στη συνέχεια, το ρομπότ μπορεί να στραφεί σε άλλες θέσεις με βάση αυτήν τη νέα κατεύθυνση.

Available Functions
void  setHeading(
  double value,
  rotationUnits units);

Parameters

Παράμετρος

Τύπος

Περιγραφή

value

double

Η τιμή κατεύθυνσης που θα οριστεί για το ρομπότ. Αυτή μπορεί να είναι από -359 έως 359 όταν χρησιμοποιούνται deg ή degrees.

units

rotationUnits

Η μονάδα μέτρησης: deg (μοίρες), rev (περιστροφές) ή raw (ακατέργαστες μονάδες). Μία περιστροφή ισούται με 360 μοίρες.

Return Values

Αυτή η συνάρτηση δεν επιστρέφει τιμή.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

Η περιστροφή είναι η περιστροφή του ρομπότ, μετρούμενη σε μοίρες ή περιστροφές. Στην αρχή ενός έργου, η τιμή περιστροφής ορίζεται σε 0 μοίρες. Η ρύθμιση setRotation αλλάζει την τρέχουσα περιστροφή του ρομπότ σε μια νέα τιμή.

Για παράδειγμα, αν το ρομπότ έχει κάνει δύο πλήρεις στροφές προς τα δεξιά, η τιμή περιστροφής του θα είναι 720 μοίρες. Αν ορίσετε την περιστροφή σε 0 μοίρες, η περιστροφή θα επαναφερθεί από 720 σε 0 μοίρες. Στη συνέχεια, το ρομπότ μπορεί να στραφεί σε περιστροφές με βάση αυτήν τη νέα τιμή.

Available Functions
void  setRotation(
  double value,
  rotationUnits units);

Parameters

Παράμετρος

Τύπος

Περιγραφή

value

double

Η τιμή περιστροφής που θα οριστεί για το ρομπότ.

units

rotationUnits

Η μονάδα περιστροφής: deg (μοίρες), rev (περιστροφές) ή raw (ακατέργαστες μονάδες). Μία περιστροφή ισούται με 360 μοίρες.

Return Values

Αυτή η συνάρτηση δεν επιστρέφει τιμή.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

heading#

Η κατεύθυνση είναι η κατεύθυνση προς την οποία είναι στραμμένο το ρομπότ, μετρούμενη σε μοίρες. Η κατεύθυνση heading επιστρέφει την τρέχουσα κατεύθυνση του ρομπότ από 0 σε 359 μοίρες.

Η αρχική κατεύθυνση του ρομπότ είναι 0 μοίρες.

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Παράμετρος

Τύπος

Περιγραφή

units

rotationUnits

Προαιρετικό. Η μονάδα μέτρησης που θα επιστρέφεται με κατεύθυνση: degrees, deg (προεπιλογή), revή rawΜία περιστροφή ισούται με 360 μοίρες.

Return Values

Επιστρέφει την τρέχουσα κατεύθυνση του ρομπότ ως double στην επιλεγμένη μονάδα.

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#

Η περιστροφή είναι η περιστροφή του ρομπότ, μετρούμενη σε μοίρες ή περιστροφές. Στην αρχή ενός έργου, η τιμή περιστροφής ορίζεται σε 0 μοίρες. Η περιστροφή rotation επιστρέφουν την τρέχουσα περιστροφή του ρομπότ.

Η δεξιά στροφή αυξάνει την περιστροφή και η αριστερά τη μειώνει. Για παράδειγμα, κάνοντας δύο πλήρεις στροφές προς τα δεξιά θα επιστρέψει μια περιστροφή 720 μοιρών.

Available Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Παράμετρος

Τύπος

Περιγραφή

units

rotationUnits

Προαιρετικό. Η μονάδα μέτρησης που θα επιστρέφεται με κατεύθυνση: degrees, deg (προεπιλογή), revή rawΜία περιστροφή ισούται με 360 μοίρες.

Return Values

Επιστρέφει την τρέχουσα περιστροφή του ρομπότ ως double στην επιλεγμένη μονάδα.

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