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

Εισαγωγή#

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

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

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

Αυτή η σελίδα χρησιμοποιεί myDrivetrain ως παράδειγμα ονόματος smartdrive. Αντικαταστήστε το με το δικό σας διαμορφωμένο όνομα, όπως απαιτείται.

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

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

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

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

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

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

~smartdrive();

Παράμετροι#

The sensor parameter can be a gyro or inertial object.

Παράμετρος

Τύπος

Περιγραφή

&l / &r

motor_group / motor

Οι αριστεροί και δεξιοί κινητήρες ή ομάδες κινητήρων. Και οι δύο παράμετροι πρέπει να χρησιμοποιούν τον ίδιο τύπο: είτε δύο αντικείμενα motor_group είτε δύο αντικείμενα motor.

&g

gyro / inertial

Ο Γυροσκοπικός Αισθητήρας ή Αδρανειακός Αισθητήρας που χρησιμοποιείται από το smartdrive.

wheelTravel

double

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

trackWidth

double

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

wheelBase

double

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

unit

distanceUnits

The unit for wheelTravel, trackWidth, and wheelBase: mm (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 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

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

Η κλάση smartdrive περιλαμβάνει τις ακόλουθες συναρτήσεις-μέλη:

Ενέργειες — Στρέψτε το ρομπότ χρησιμοποιώντας κατεύθυνση ή περιστροφή.

  • turnToHeading — Στρέφει το ρομπότ ώστε να βλέπει προς μια συγκεκριμένη κατεύθυνση από -359 σε 359 μοίρες. Το ρομπότ θα στρίψει προς τη συντομότερη κατεύθυνση για να φτάσει στην κατεύθυνση-στόχο.

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

  • calibrateDrivetrain — Βαθμονομεί τον αισθητήρα που έχει διαμορφωθεί με το smartdrive.

Ρυθμίσεις — Προσαρμόστε τις τιμές κατεύθυνσης και περιστροφής.

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

Μια κατεύθυνση είναι η κατεύθυνση προς την οποία είναι στραμμένο το ρομπότ, μετρούμενη σε μοίρες. 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 έως 120 rpm όταν χρησιμοποιείται rpmή από 0 έως 720 μοίρες ανά δευτερόλεπτο όταν χρησιμοποιείται dpsΕάν δεν παρέχεται ταχύτητα, το ρομπότ περιστρέφεται με την τρέχουσα ταχύτητα περιστροφής.

units_v

velocityUnits

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

waitForCompletion

bool

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

Return Values

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

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

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

Notes
  • Η εκτέλεση μιας άλλης λειτουργίας κίνησης του συστήματος μετάδοσης κίνησης ενώ εκτελείται η λειτουργία turnToHeading θα διακόψει την τρέχουσα κίνηση.

  • turnToHeading uses a target heading, so isDone and isMoving can be used with it.

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 έως 120 rpm όταν χρησιμοποιείται rpmή από 0 έως 720 μοίρες ανά δευτερόλεπτο όταν χρησιμοποιείται dpsΕάν δεν παρέχεται ταχύτητα, το ρομπότ περιστρέφεται με την τρέχουσα ταχύτητα περιστροφής.

units_v

velocityUnits

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

waitForCompletion

bool

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

Return Values

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

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

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

Notes
  • Η εκτέλεση μιας άλλης λειτουργίας κίνησης του συστήματος μετάδοσης κίνησης ενώ εκτελείται η λειτουργία turnToRotation θα διακόψει την τρέχουσα κίνηση.

  • turnToRotation uses a target rotation, so isDone and isMoving can be used with it.

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

calibrateDrivetrain#

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

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

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

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

Available Functions
void calibrateDrivetrain();

Parameters

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

Return Values

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

Notes
  • Το ρομπότ βαθμονομείται αυτόματα στην αρχή κάθε έργου, όταν έχει διαμορφωθεί ένας smartdrive στο VEXcode.

  • Κρατήστε το ρομπότ ακίνητο για περίπου 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();