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 gyroscoopsensor of traagheidssensor 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.
Op deze pagina wordt myDrivetrain als voorbeeld van een aandrijflijnnaam gebruikt. Vervang dit door uw eigen geconfigureerde naam indien nodig.
Afgeleide klassen#
De klasse drivetrain dient als basisklasse voor de volgende afgeleide klasse:
smartdrive- Creëert een aandrijflijn met ondersteuning voor gyroscoopsensor of traagheidssensor.
Klasseconstructors#
1 - Creëert een aandrijflijn met behulp van bestaande
motor_groupobjecten voor de linker- en rechterkant.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- en rechterkant.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
rightMotor, // right motor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Lidfuncties#
De klasse drivetrain omvat de volgende 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 voor een specifiek aantal graden of omwentelingen.stop- Stopt de beweging van de robot.
Instellingen - 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 hoe lang de robot erover doet om een beweging te voltooien.
Waarden - 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 van de aandrijflijn terug.
Voordat er lidfuncties van drivetrain kunnen worden aangeroepen, moet er een drivetrain object worden aangemaakt.
/* 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
rightMotor, // right motor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Acties#
drijfveer#
drive de robot beweegt oneindig vooruit of achteruit. De robot blijft bewegen totdat er een andere actie wordt gegeven, zoals draaien of stoppen.
1 - Aandrijvingen met behulp van de huidige 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 de volgende regel code direct uitvoeren.De robot blijft bewegen totdat
stopwordt aangeroepen of een andere aandrijfbewegingsfunctie wordt uitgevoerd.isDoneenisMovingworden niet gebruikt metdriveomdatdrivegeen doelafstand heeft.
// Drive forward and back.
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.drive(reverse, 25, rpm);
wait(2, seconds);
myDrivetrain.stop();
driveFor#
driveFor verplaatst de robot vooruit of achteruit over een bepaalde afstand. Het project wacht tot de robot klaar is met bewegen voordat de volgende regel code wordt uitgevoerd.
1 - Rijdt in de aangegeven richting over een afstand met de huidige rijsnelheid.
bool driveFor( directionType dir, double distance, distanceUnits units, bool waitForCompletion = true );
2 - Rijdt in een richting op basis van de afstandswaarde met behulp van de huidige rijsnelheid.
bool driveFor( double distance, distanceUnits units, bool waitForCompletion = true );
3 - Rijdt in een richting op basis van de afstandswaarde 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 terwijl
driveForactief is, onderbreekt de huidige beweging.driveForgebruikt een doelafstand, dusisDoneenisMovingkunnen ermee gebruikt worden.
// Drive 200 mm, then back 200 mm.
myDrivetrain.driveFor(forward, 200, mm);
myDrivetrain.driveFor(reverse, 200, mm);
draai#
turn de robot draait oneindig naar links of rechts. De robot blijft draaien totdat er een andere actie wordt uitgevoerd, zoals rijden of stoppen.
1 - Draait met behulp van de huidige 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: |
Deze functie retourneert geen waarde.
Notesturnbetekent dat er geen wachttijd is. Het project voert de volgende regel code direct uit.De robot blijft draaien totdat
stopwordt aangeroepen of een andere aandrijfbewegingsfunctie wordt uitgevoerd.isDoneenisMovingworden niet gebruikt metturnomdatturngeen doelhoek 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 naar links of rechts over een specifiek aantal graden, omwentelingen of eenheden. De draai is relatief ten opzichte van de huidige positie van de robot. Het project wacht tot de robot klaar is met draaien voordat de volgende regel code wordt uitgevoerd.
1 - Draait voor de opgegeven hoek met behulp van de huidige draaisnelheid.
bool turnFor( double angle, rotationUnits units, bool waitForCompletion = true );
2 - Draait in de aangegeven richting over een hoek met behulp van de huidige 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 mate waarin 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 aandrijfbeweging terwijl
turnForactief is, onderbreekt de huidige beweging.turnForgebruikt een doelhoek, dusisDoneenisMovingkunnen ermee gebruikt worden.
// 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 huidige stopmodus.
void stop();
Parameters2 - Stopt de aandrijving met behulp van de opgegeven stopmodus.
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.
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 wordt gebruikt door latere functies voor de beweging van de aandrijflijn, 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.
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 wordt gebruikt door latere stuurfuncties van de aandrijflijn, 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 wordt gebruikt door latere
stopaanroepen, tenzij een specifieke stopmodus is opgegeven in de functieaanroep.Als deze functie niet wordt gebruikt, zal de robot remmen met stand
brakebij het stoppen.
setTimeout#
setTimeout bepaalt hoe lang de robot erover doet om een beweging te voltooien. Als de robot de beweging niet binnen die tijd kan voltooien, stopt hij met proberen 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 aandrijffuncties die naar een doel bewegen, zoals
driveForenturnFor.
// Turn right after driving forward.
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 regelen 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.
Het kan de snelheid weergeven als een percentage, in rpmof in dpsEen positieve waarde betekent dat de robot vooruit rijdt. Een negatieve waarde betekent dat de robot achteruit rijdt.
double velocity(
velocityUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De eenheid waarin de snelheid moet worden teruggegeven: |
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.
double current( percentUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De eenheid die stroom retourneert: |
|
|
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 wordt 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%betekent 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 van de aandrijflijn terug.
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 wordt weergegeven: |
Geeft de aandrijfspanning terug als een double in de geselecteerde eenheid.