Aandrijving#
Invoering#
De aandrijflijn (klasse drivetrain bepaalt hoe een robot rijdt en stuurt. Een aandrijflijn bestaat uit motoren en wielen die samenwerken om de robot te bewegen.
Een drivetrain gebruikt geen Inertiesensor of Gyroscoopsensor voor bochten op basis van richting of rotatie. Hij kan vooruit of achteruit rijden en naar links of rechts draaien, maar hij kan niet naar een specifieke richting of rotatie draaien. Voor bochten op basis van richting en rotatie, gebruik de smartdrive klasse.
Afgeleide klassen#
De klasse drivetrain dient als basisklasse voor de volgende afgeleide klassen:
smartdrive- Deze klasse voegt ondersteuning toe voor traagheidssensoren of gyroscoopsensoren om bochten op basis van koers en rotatie mogelijk te maken.
Klasseconstructors#
1 - Creëert een aandrijflijn met behulp van bestaande
motor_groupobjecten voor de linker (&l) en rechter (&r) zijde.drivetrain( motor_group &l, motor_group &r, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 - Creëert een aandrijflijn met behulp van bestaande
motorobjecten voor de linker (&l) en rechter (&r) zijde.drivetrain( motor &l, motor &r, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Klasse-destructor#
Vernietigt het drivetrain object en geeft de bijbehorende resources vrij.
virtual ~drivetrain();
Parameters#
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De linker- en rechtermotor of motorgroepen. Beide parameters moeten van hetzelfde type zijn: ofwel twee |
|
|
De omtrek van de aandrijfwielen. De standaardwaarde is |
|
|
De afstand tussen het linker- en rechterwiel. De standaardwaarde is |
|
|
De afstand tussen de voor- en achterwielen. De standaardwaarde is |
|
|
De eenheid voor |
|
|
De overbrengingsverhouding die wordt gebruikt om de aandrijfafstand aan te passen als er versnellingen worden gebruikt. De standaardwaarde is |
Voorbeeld#
// Create the left and right motor objects
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the drivetrain object
drivetrain myDrivetrain = drivetrain(
leftMotor, // left motor object
rightMotor, // right motor object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Lidfuncties#
Er zijn veel manieren om de aandrijflijn te programmeren. Hieronder staat een lijst met alle drivetrain lidfuncties:
Acties - Beweeg en draai de robot.
drive- Laat de robot oneindig vooruit of achteruit bewegen.driveFor- Verplaatst de robot vooruit of achteruit over een bepaalde afstand.turn- Draait de robot permanent naar links of rechts.turnFor- Draait de robot naar links of rechts over een specifiek aantal graden.stop- Stopt de beweging van de robot.
Mutators - Aandrijfinstellingen aanpassen.
setDriveVelocity- Vertelt de robot hoe snel hij moet rijden.setTurnVelocity- Vertelt de robot hoe snel hij moet draaien.setStopping- Geeft aan hoe de robot stopt met bewegen: door te remmen, uit te rollen of te wachten.setTimeout- Stelt in hoeveel seconden de robot zal proberen een beweging te voltooien.
Getters - Controleer de bewegingsstatus.
isDone- Geeft als Booleaanse waarde aan of de robot klaar is met bewegen.isMoving- Geeft als Booleaanse waarde weer of de robot beweegt.velocity- Geeft aan hoe snel de robot rijdt.current- Geeft aan hoeveel elektrische stroom de aandrijflijn gebruikt.power- Geeft aan hoe snel de aandrijving energie verbruikt.torque- Geeft aan hoeveel koppel de aandrijflijn gebruikt.efficiency- Geeft aan hoe efficiënt de aandrijflijn energie gebruikt.temperature- Geeft aan hoe warm de aandrijflijn is.voltage- Geeft de elektrische spanning terug die aan de aandrijflijn wordt geleverd.
Voordat er lidfuncties van drivetrain kunnen worden aangeroepen, moet er een drivetrain object worden aangemaakt, zoals hieronder weergegeven:
/* 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 drivetrain object
drivetrain myDrivetrain = drivetrain(
leftMotor, // left motor object
rightMotor, // right motor object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Acties#
drijfveer#
drive zorgt ervoor dat de robot oneindig vooruit of achteruit beweegt. De robot blijft bewegen totdat er een andere actie wordt uitgevoerd, zoals draaien of stoppen. Voor RPM of DPS wordt de limiet aangepast aan de overbrengingsverhouding van de aandrijving.
1 - Aandrijvingen met de momenteel geconfigureerde aandrijfsnelheid.
void drive( directionType dir );
Parameters2 - Rijdt met de opgegeven snelheid.
void drive( directionType dir, double velocity, velocityUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De richting waarin de robot beweegt: |
|
|
De snelheid waarmee gereden wordt, varieert van 0% tot 100% bij gebruik van |
|
|
De snelheidseenheid: |
Deze functie retourneert geen waarde.
Notesdriveis non-waiting; het project zal direct na de aanroep de volgende regel code uitvoeren.De aandrijving blijft in beweging totdat
stopwordt aangeroepen of een andere aandrijfbewegingsfunctie (zoalsdriveForofturn) wordt uitgevoerd.Functies zoals
isDoneenisMovingzijn niet van toepassing opdrive, omdat deze geen doelgebaseerde beweging gebruikt (geendistanceheeft).
// Drive forward and back
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.drive(reverse, 25, rpm);
wait(2, seconds);
myDrivetrain.stop();
driveFor#
driveFor beweegt de robot vooruit of achteruit over een bepaalde afstand. Het project wacht standaard totdat de robot klaar is met bewegen voordat de volgende regel code wordt uitgevoerd. Voor RPM of DPS wordt de limiet aangepast aan de overbrengingsverhouding van de aandrijving.
1 - Rijdt in de opgegeven richting over een afstand met de momenteel geconfigureerde rijsnelheid.
bool driveFor( directionType dir, double distance, distanceUnits units, bool waitForCompletion = true );
2 - Rijdt in een richting die afhankelijk is van de afstand, gebruikmakend van de momenteel geconfigureerde rijsnelheid.
bool driveFor( double distance, distanceUnits units, bool waitForCompletion = true );
3 - Rijdt in een richting die afhankelijk is van de afstand met de opgegeven snelheid.
bool driveFor( double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Rijdt in de aangegeven richting over een bepaalde afstand met de aangegeven snelheid.
bool driveFor( directionType dir, double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De richting waarin de robot beweegt: |
|
|
De afstand die de robot aflegt. |
|
|
De afstandseenheid: |
|
|
De snelheid waarmee gereden wordt, varieert van 0% tot 100% bij gebruik van |
|
|
De snelheidseenheid: |
|
|
|
Geeft als Booleaanse waarde terug of de robot de beoogde afstand heeft bereikt.
true- De robot heeft de beoogde afstand bereikt.false- De robot heeft de beweging niet voltooid, of de functie is teruggekeerd voordat de beweging was voltooid omdatwaitForCompletionwas ingesteld opfalse.
Het uitvoeren van een andere aandrijfbewegingsfunctie (zoals
driveofturnFor) terwijldriveForbezig is, onderbreekt de huidige beweging.Omdat
driveFordoelgebaseerd is (eendistanceparameter gebruikt), werken functies zoalsisDoneenisMovingmetdriveFor.
// Drive 200 mm, then back 200 mm
myDrivetrain.driveFor(forward, 200, mm);
myDrivetrain.driveFor(reverse, 200, mm);
draai#
turn draait de robot oneindig naar links of rechts. De robot blijft draaien totdat er een andere actie wordt uitgevoerd, zoals rijden of stoppen. Voor RPM of DPS wordt de limiet aangepast aan de overbrengingsverhouding van de aandrijving.
1 - Draait met behulp van de momenteel geconfigureerde draaisnelheid.
void turn( turnType dir );
Parameters2 - Draait met de aangegeven snelheid.
void turn( turnType dir, double velocity, velocityUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De richting waarin de robot draait: |
|
|
De draaisnelheid varieert van 0% tot 100% bij gebruik van |
|
|
De snelheidseenheid: |
turnis niet-wachtend; het project zal direct na de aanroep de volgende regel code uitvoeren.De aandrijving blijft draaien totdat
stopwordt aangeroepen of een andere bewegingsfunctie van de aandrijving (zoalsturnForofdrive) wordt uitgevoerd.Functies zoals
isDoneenisMovingzijn niet van toepassing opturn, omdat deze geen doelgebaseerde beweging gebruikt (geenangleparameter heeft).
// Turn right, then left, then stop
myDrivetrain.turn(right);
wait(2, seconds);
myDrivetrain.turn(left);
wait(2, seconds);
myDrivetrain.stop();
draaiVoor#
turnFor draait de robot een specifiek aantal graden naar links of rechts. De draai is relatief ten opzichte van de huidige positie van de robot. Het project wacht standaard totdat de robot klaar is met draaien voordat de volgende regel code wordt uitgevoerd. Voor RPM of DPS wordt de limiet aangepast aan de overbrengingsverhouding van de aandrijving.
1 - Draait voor de opgegeven hoek met behulp van de momenteel geconfigureerde draaisnelheid.
bool turnFor( double angle, rotationUnits units, bool waitForCompletion = true );
2 - Draait in de opgegeven richting over een hoek met behulp van de momenteel geconfigureerde draaisnelheid.
bool turnFor( turnType dir, double angle, rotationUnits units, bool waitForCompletion = true );
3 - Draait voor de opgegeven hoek bij de opgegeven snelheid.
bool turnFor( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Draait in de aangegeven richting over een bepaalde hoek met de aangegeven snelheid.
bool turnFor( turnType dir, double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De richting waarin de robot draait: |
|
|
De hoek waaronder de robot draait. |
|
|
De eenheid voor een omwenteling is: |
|
|
De draaisnelheid varieert van 0% tot 100% bij gebruik van |
|
|
De snelheidseenheid: |
|
|
|
Geeft als Booleaanse waarde terug of de robot de beoogde hoek heeft bereikt.
true- De robot heeft de doelhoek bereikt.false- De robot heeft de beurt niet afgemaakt, of de functie is teruggekeerd voordat de beurt was voltooid omdatwaitForCompletionwas ingesteld opfalse.
Het uitvoeren van een andere aandrijfbewegingsfunctie (zoals
turnofdrive) terwijlturnForbezig is, onderbreekt de huidige beweging.Omdat
turnFordoelgebaseerd is (eenangleparameter gebruikt), werken functies zoalsisDoneenisMovingmetturnFor.
// Turn right then left
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
myDrivetrain.turnFor(left, 90, degrees);
stop#
stop stopt de beweging van de robot. Indien een stopmodus is opgegeven, bepaalt deze hoe de robot stopt voor deze functieaanroep.
1 - Stopt de aandrijving met behulp van de momenteel geconfigureerde stopmodus.
void stop();
Parameters2 - Stopt de aandrijving met behulp van de opgegeven remmodus.
void stop( brakeType mode );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
Hoe de robot stopt:
|
Deze functie retourneert geen waarde.
Examples// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
Mutators#
setDriveVelocity#
setDriveVelocity vertelt de robot hoe snel hij moet rijden. Een hoger percentage zorgt ervoor dat de robot sneller rijdt en een lager percentage zorgt ervoor dat de robot langzamer rijdt. Voor RPM of DPS wordt de limiet aangepast aan de overbrengingsverhouding van de aandrijving.
Elk project begint standaard met de robot die op 50% van zijn maximale snelheid rijdt.
Let op: Een hogere snelheid zorgt ervoor dat de robot sneller rijdt, maar mogelijk minder nauwkeurig. Een lagere snelheid zorgt ervoor dat de robot langzamer rijdt, maar mogelijk nauwkeuriger.
Available Functionsvoid setDriveVelocity(
double velocity,
velocityUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De snelheid waarmee gereden wordt, varieert van 0% tot 100% bij gebruik van |
|
|
De snelheidseenheid: |
Deze functie retourneert geen waarde.
NotesDe aandrijfsnelheid is van toepassing op alle volgende aandrijfbewegingsfuncties (zoals
driveendriveFor), tenzij een specifieke snelheid wordt opgegeven in de functieaanroep.
// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
setTurnVelocity#
setTurnVelocity vertelt de robot hoe snel hij moet draaien. Een hoger percentage zorgt ervoor dat de robot sneller draait en een lager percentage zorgt ervoor dat de robot langzamer draait. Voor RPM of DPS wordt de limiet aangepast aan de overbrengingsverhouding van de aandrijving.
Elk project begint standaard met de robot die met 50% snelheid draait.
Let op: Een hogere snelheid zorgt ervoor dat de robot sneller draait, maar mogelijk minder nauwkeurig. Een lagere snelheid zorgt ervoor dat de robot langzamer draait, maar mogelijk nauwkeuriger.
Available Functionsvoid setTurnVelocity(
double velocity,
velocityUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De draaisnelheid varieert van 0% tot 100% bij gebruik van |
|
|
De snelheidseenheid: |
Deze functie retourneert geen waarde.
NotesDe draaisnelheid is van toepassing op alle volgende aandrijflijn-draaifuncties (zoals
turnenturnFor), tenzij een specifieke snelheid wordt opgegeven in de functieaanroep.
// Try default, slow, then fast
myDrivetrain.turnFor(right, 360, degrees);
wait(1, seconds);
myDrivetrain.setTurnVelocity(20, percent);
myDrivetrain.turnFor(right, 360, degrees);
wait(1, seconds);
myDrivetrain.setTurnVelocity(100, percent);
myDrivetrain.turnFor(right, 360, degrees);
stoppen#
setStopping stelt in hoe de robot stopt met bewegen: door te remmen, uit te rollen of stil te staan.
void setStopping(
brakeType mode );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
Hoe de robot stopt:
|
Deze functie retourneert geen waarde.
NotesDe stopmodus is van toepassing op alle volgende
stopaanroepen, tenzij een specifieke stopmodus is opgegeven in de functieaanroep.
setTimeout#
setTimeout bepaalt hoeveel seconden de robot de tijd krijgt om een beweging te voltooien. Als de robot de beweging niet binnen die tijd kan voltooien, stopt hij en gaat hij verder met de volgende regel code. Dit voorkomt dat de robot vastloopt tijdens een beweging.
void setTimeout(
int32_t time,
timeUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De maximale tijd die de robot heeft om een beweging te voltooien. Dit moet een positief geheel getal zijn. |
|
|
De tijdseenheid: |
Deze functie retourneert geen waarde.
NotesDe time-out is alleen van toepassing op op doelen gebaseerde aandrijfbewegingsfuncties (zoals
driveForenturnFor).
// Start turning if driving takes too long
myDrivetrain.setTimeout(1, seconds);
myDrivetrain.driveFor(forward, 25, inches);
myDrivetrain.turnFor(right, 90, degrees);
Getters#
isKlaar#
isDone geeft als Booleaanse waarde aan of de robot klaar is met bewegen. Dit kan worden gebruikt om de timing van andere acties te sturen op basis van de beweging van de robot.
bool isDone( void );
Deze functie accepteert geen parameters.
Return Valuestrue- De robot is klaar met bewegen.false- De robot beweegt nog steeds.
isVerhuizen#
isMoving geeft als Booleaanse waarde aan of de robot beweegt. Dit kan worden gebruikt om de timing van andere gedragingen te regelen op basis van de beweging van de robot.
virtual bool isMoving( void );
Deze functie accepteert geen parameters.
Return Valuestrue- De robot beweegt.false- De robot beweegt niet.
snelheid#
velocity geeft aan hoe snel de robot rijdt.
Een positieve waarde betekent dat de robot vooruit rijdt. Een negatieve waarde betekent dat de robot achteruit rijdt.
Available Functionsdouble velocity(
velocityUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De snelheidseenheid: |
Geeft de aandrijfsnelheid terug als een double in de geselecteerde eenheid.
// Show velocity before and during motion
Brain.Screen.print("Resting: %f", myDrivetrain.velocity(percent));
myDrivetrain.drive(forward, 100, velocityUnits::pct);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("Moving: %f", myDrivetrain.velocity(percent));
myDrivetrain.stop();
huidig#
current geeft aan hoeveel elektrische stroom de aandrijflijn verbruikt. Stroomsterkte is de hoeveelheid elektriciteit die door de aandrijflijn stroomt. Deze kan worden weergegeven in ampère (ampère) of als een percentage, afhankelijk van de eenheid.
Een hogere stroomwaarde betekent dat de aandrijving meer elektrische stroom verbruikt. Dit kan gebeuren wanneer de robot tegen een object duwt of probeert te bewegen terwijl hij vastzit.
Hiermee kunt u controleren of de aandrijving tijdens een beweging moeite heeft. Als de stroomsterkte hoog blijft, kan de aandrijving warmer worden of minder efficiënt met energie omgaan.
Available Functions1 - Geeft de elektrische stroom van de aandrijflijn in ampère weer.
double current( currentUnits units = currentUnits::amp );
Parameters2 - Geeft de elektrische stroom van de aandrijflijn weer als een percentage van het maximum.
double current( percentUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De eenheid waarin de stroom moet worden geretourneerd: |
|
|
De eenheid waarin de stroom moet worden geretourneerd: |
Geeft de aandrijfstroom terug als een double in de geselecteerde eenheid.
stroom#
power geeft aan hoeveel vermogen de aandrijving verbruikt, gemeten in watt. Vermogen laat zien hoe snel de aandrijving energie verbruikt.
Een hogere vermogenswaarde betekent dat de aandrijving sneller energie verbruikt. Dit kan gebeuren wanneer de robot tegen een object duwt of probeert te bewegen terwijl hij vastzit.
Dit kan worden gebruikt om bewegingen te vergelijken of te controleren of de aandrijving het moeilijk heeft. Als het vermogen constant hoog blijft, kan de aandrijving warmer worden of minder efficiënt met energie omgaan.
Available Functionsdouble power(
powerUnits units = powerUnits::watt );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De vermogenseenheid: |
Geeft het aandrijfvermogen weer als een double in watt.
koppel#
Het koppel geeft aan hoeveel kracht de aandrijving kan uitoefenen terwijl de wielen draaien.
torque geeft aan hoeveel koppel de aandrijflijn gebruikt, gemeten in Newtonmeter (Nm) of inch-pounds (InLb).
Een hogere koppelwaarde betekent dat de aandrijving harder duwt of trekt. Dit kan gebeuren wanneer de robot tegen een object duwt of probeert te bewegen terwijl hij vastzit.
Dit kan worden gebruikt om te controleren of de aandrijving moeite heeft of om te vergelijken hoeveel kracht verschillende bewegingen vereisen.
Available Functionsdouble torque(
torqueUnits units = torqueUnits::nm );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De eenheid waarin het koppel moet worden weergegeven: |
Geeft het aandrijfkoppel terug als een double in de geselecteerde eenheid.
efficiëntie#
efficiency geeft aan hoe efficiënt de aandrijflijn het vermogen gebruikt, als een percentage van 0% tot 100%.
Het rendement geeft aan hoeveel van het vermogen van de aandrijving wordt gebruikt voor beweging. Een hogere efficiëntiewaarde betekent dat er meer vermogen van de aandrijving wordt gebruikt om te bewegen. Een lagere efficiëntiewaarde kan voorkomen wanneer de aandrijving hard werkt maar weinig beweging genereert, bijvoorbeeld wanneer de robot vastzit of tegen een object aan duwt.
Dit kan worden gebruikt om bewegingen te vergelijken of te controleren of de aandrijving energie verspilt in plaats van deze te gebruiken voor beweging.
Available Functionsdouble efficiency(
percentUnits units = percentUnits::pct );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De eenheid waarin het rendement moet worden weergegeven: |
Geeft de aandrijflijnefficiëntie weer als een double in de geselecteerde eenheid.
temperatuur#
temperature geeft de gemiddelde temperatuur van de aandrijflijn weer als een percentage van 0% tot 100%.
De temperatuur geeft aan hoe warm de motoren van de aandrijflijn zijn. Een hogere temperatuur betekent dat de motoren warmer worden tijdens het gebruik. De motoren moeten onder de 55 °C blijven om optimaal te blijven presteren.
Als de motoren te heet worden, verlagen ze hun maximale stroomsterkte ter bescherming. Bij 70 °C stoppen de motoren met draaien totdat ze zijn afgekoeld.
Hiermee kan worden gecontroleerd of de aandrijving te heet wordt tijdens herhaalde bewegingen, lange ritten of wanneer deze tegen een object aan duwt.
Available Functionsdouble temperature(
percentUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De eenheid waarin de temperatuur moet worden weergegeven: |
Geeft de gemiddelde temperatuur van de aandrijflijn weer als een double in de geselecteerde eenheid.
Een geretourneerde waarde van
50%geeft aan dat de gemiddelde motortemperatuur ongeveer45°C(113°F) is.Het typische bedrijfstemperatuurbereik voor de aandrijflijn ligt tussen ongeveer
20°C(68°F) en70°C(158°F).
spanning#
voltage geeft de elektrische spanning terug die aan de aandrijflijn wordt geleverd.
Spanning is de elektrische druk die aan de aandrijfmotoren wordt geleverd. Deze kan, samen met stroom- en vermogenswaarden, inzicht geven in hoe de aandrijflijn elektrische energie verbruikt.
Available Functionsdouble voltage(
voltageUnits units = voltageUnits::volt );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De eenheid waarin de spanning moet worden geretourneerd: |
Geeft de aandrijfspanning terug als een double in de geselecteerde eenheid.