έξυπνος δίσκος#
Εισαγωγή#
The smartdrive class controls how a robot drives and turns using motors, wheels, and a sensor. A smartdrive can use an Inertial Sensor or Gyro Sensor to track heading and rotation.
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.
The smartdrive class is based on the drivetrain class. It can use the same drive and turn functions as drivetrain, and it also adds sensor-based functions like turnToHeading and turnToRotation.
Κατασκευαστές κλάσεων#
1 — Creates a smartdrive using existing
motor_groupobjects for the left (&l) and right (&r) sides, along with an Inertial Sensor or Gyro Sensor.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 — Creates a smartdrive using existing
motorobjects for the left (&l) and right (&r) sides, along with an Inertial Sensor or Gyro Sensor.smartdrive( motor &l, motor &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Καταστροφέας κλάσης#
Destroys the smartdrive object and releases associated resources.
~smartdrive();
Παράμετροι#
The sensor parameter can be an inertial or gyro object.
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
References to existing |
|
|
A reference to an existing |
|
|
The circumference of the drivetrain wheels. The default is |
|
|
The distance between the left and right wheels. The default is |
|
|
The distance between the front and back wheels. The default is |
|
|
The unit for |
|
|
The gear ratio used to adjust drive distances if gears are used. The default is |
Παράδειγμα#
/* 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
Συναρτήσεις Μελών#
The smartdrive class includes the following member functions:
Ενέργειες — Στρέψτε το ρομπότ χρησιμοποιώντας κατεύθυνση ή περιστροφή.
turnToHeading— Turns the robot to face a specific heading from -359 to 359 degrees. The robot will turn the shortest direction to reach the target heading.turnToRotation— Turns the robot to a specific rotation.calibrateDrivetrain— Calibrates the drivetrain’s configured Inertial Sensor or Gyro Sensor.
Ρυθμίσεις — Προσαρμόστε τις τιμές κατεύθυνσης και περιστροφής.
setHeading— Changes the robot’s current heading to a new heading.setRotation— Changes the robot’s current rotation to a new rotation.
Τιμές — Ελέγξτε την κατεύθυνση και την περιστροφή.
heading— Returns the robot’s current heading from 0 to 359 degrees.rotation— Returns the robot’s current rotation.
A smartdrive can also use the inherited member functions from drivetrain, such as drive, driveFor, turn, turnFor, stop, isDone, and isMoving.
Before calling any smartdrive member functions, a smartdrive instance must be created, as shown below:
/* 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#
A heading is the direction the robot is facing, measured in degrees. turnToHeading turns the robot to face a specific heading from -359 to 359 degrees. The robot will turn the shortest direction to reach the target heading.
Η αρχική κατεύθυνση του ρομπότ είναι 0 μοίρες.
Το έργο θα περιμένει μέχρι να ολοκληρώσει την περιστροφή του ρομπότ προτού εκτελεστεί η επόμενη γραμμή κώδικα.
Available Functions1 — Στρέφει το σύστημα μετάδοσης κίνησης στην καθορισμένη κατεύθυνση χρησιμοποιώντας την τρέχουσα ρυθμισμένη ταχύτητα στροφής.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Στρέφει το σύστημα μετάδοσης κίνησης στην καθορισμένη κατεύθυνση με την καθορισμένη ταχύτητα.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
The direction the robot should face, in degrees. This can be from -359 to 359 when using |
|
|
The rotation unit: |
|
|
The velocity to turn with from 0% to 100% when using |
|
|
The velocity unit: |
|
|
|
Επιστρέφει εάν το ρομπότ έφτασε στην κατεύθυνση-στόχο, ως δυαδική τιμή.
true— The robot reached the target heading.false— The robot did not finish the turn, or the function returned before the turn completed becausewaitForCompletionwas set tofalse.
Executing another drivetrain movement function (such as
turnordrive) whileturnToHeadingis in progress will interrupt the current movement.Because
turnToHeadingis target-based (uses anangleparameter), functions such asisDoneandisMovingwork withturnToHeading.
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation turns the robot to a specific rotation.
Rotation is how much the robot has turned, measured in degrees or revolutions. At the beginning of a project, the rotation value is set to 0 degrees. Rotation can also be set using the setRotation function.
Οι τιμές περιστροφής είναι απόλυτες. Αυτό σημαίνει ότι η κατεύθυνση της στροφής εξαρτάται από την τρέχουσα περιστροφή του ρομπότ. Η στροφή προς τα δεξιά αυξάνει την περιστροφή και η στροφή προς τα αριστερά τη μειώνει.
Για παράδειγμα, αν το ρομπότ ξεκινήσει από 0 μοίρες και στρίψετε σε περιστροφή 720 μοιρών, θα στρίψει δεξιά δύο φορές. Αν στη συνέχεια στρίψετε σε περιστροφή 360 μοιρών, θα στρίψει αριστερά μία φορά, επειδή οι 360 μοίρες είναι μικρότερες από 720 μοίρες.
Το έργο θα περιμένει μέχρι να ολοκληρώσει την περιστροφή του ρομπότ προτού εκτελεστεί η επόμενη γραμμή κώδικα.
Available Functions1 — Περιστρέφει το σύστημα μετάδοσης κίνησης στην καθορισμένη περιστροφή χρησιμοποιώντας την τρέχουσα ρυθμισμένη ταχύτητα στροφής.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Περιστρέφει το σύστημα μετάδοσης κίνησης στην καθορισμένη περιστροφή με την καθορισμένη ταχύτητα.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
Η τιμή περιστροφής στην οποία θα στραφεί το ρομπότ. |
|
|
The rotation unit: |
|
|
The velocity to turn with from 0% to 100% when using |
|
|
The velocity unit: |
|
|
|
Επιστρέφει εάν το ρομπότ έφτασε στην περιστροφή-στόχο, ως λογική τιμή.
true— The robot reached the target rotation.false— The robot did not finish the turn, or the function returned before the turn completed becausewaitForCompletionwas set tofalse.
Executing another drivetrain movement function (such as
turnordrive) whileturnToRotationis in progress will interrupt the current movement.Because
turnToRotationis target-based (uses anangleparameter), functions such asisDoneandisMovingwork withturnToRotation.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain calibrates the Inertial Sensor or Gyro Sensor configured with the smartdrive.
Η βαθμονόμηση βοηθά τον αισθητήρα να μετρήσει σωστά την κίνηση. Κρατήστε το ρομπότ ακίνητο για περίπου 2 δευτερόλεπτα κατά τη διάρκεια της βαθμονόμησης. Εάν το ρομπότ κινηθεί κατά τη διάρκεια της βαθμονόμησης, ο αισθητήρας ενδέχεται να μην μετρήσει σωστά την κίνηση.
Το έργο θα περιμένει μέχρι να ολοκληρωθεί η βαθμονόμηση πριν εκτελεστεί η επόμενη γραμμή κώδικα.
calibrateDrivetrain is generated automatically by VEXcode when a drivetrain is configured with an Inertial Sensor or Gyro Sensor. It is provided as part of the project source and is not part of the VEX EXP C++ API.
void calibrateDrivetrain();
Αυτή η συνάρτηση δεν δέχεται καμία παράμετρο.
Return ValuesΑυτή η συνάρτηση δεν επιστρέφει τιμή.
NotesΤο ρομπότ βαθμονομείται αυτόματα στην αρχή κάθε έργου.
Κρατήστε το ρομπότ ακίνητο για περίπου 2 δευτερόλεπτα κατά τη διάρκεια της βαθμονόμησης.
The following is the auto-generated implementation of calibrateDrivetrain created by 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#
A heading is the direction the robot is facing, measured in degrees. setHeading changes the robot’s current heading to a new heading value.
Για παράδειγμα, εάν το ρομπότ έχει στραφεί προς τα δεξιά, η ρύθμιση της κατεύθυνσης σε 0 μοίρες καθιστά αυτή τη θέση προς τα δεξιά τις νέες 0 μοίρες. Στη συνέχεια, το ρομπότ μπορεί να στραφεί σε άλλες θέσεις με βάση αυτήν τη νέα κατεύθυνση.
Available Functionsvoid setHeading(
double value,
rotationUnits units);
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
The heading value to set for the robot. This can be from -359 to 359 when using |
|
|
The heading unit: |
Αυτή η συνάρτηση δεν επιστρέφει τιμή.
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
Rotation is how much the robot has turned, measured in degrees or revolutions. At the beginning of a project, the rotation value is set to 0 degrees. setRotation changes the robot’s current rotation to a new value.
Για παράδειγμα, αν το ρομπότ έχει κάνει δύο πλήρεις στροφές προς τα δεξιά, η τιμή περιστροφής του θα είναι 720 μοίρες. Αν ορίσετε την περιστροφή σε 0 μοίρες, η περιστροφή θα επαναφερθεί από 720 σε 0 μοίρες. Στη συνέχεια, το ρομπότ μπορεί να στραφεί σε περιστροφές με βάση αυτήν τη νέα τιμή.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
Η τιμή περιστροφής που θα οριστεί για το ρομπότ. |
|
|
The rotation unit: |
Αυτή η συνάρτηση δεν επιστρέφει τιμή.
Examples// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
A heading is the direction the robot is facing, measured in degrees. heading returns the robot’s current heading from 0 to 359 degrees.
Η αρχική κατεύθυνση του ρομπότ είναι 0 μοίρες.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
Optional. The unit to return heading in: |
Returns the robot’s current heading as a double in the selected unit.
// 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#
Rotation is how much the robot has turned, measured in degrees or revolutions. At the beginning of a project, the rotation value is set to 0 degrees. rotation returns the robot’s current rotation.
Η δεξιά στροφή αυξάνει την περιστροφή και η αριστερά τη μειώνει. Για παράδειγμα, κάνοντας δύο πλήρεις στροφές προς τα δεξιά θα επιστρέψει μια περιστροφή 720 μοιρών.
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Παράμετρος |
Τύπος |
Περιγραφή |
|---|---|---|
|
|
Optional. The unit to return heading in: |
Returns the robot’s current rotation as a double in the selected unit.
// 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();