Hnací ústrojí#
Zavedení#
Třída drivetrain řídí, jak se robot řídí a zatáčí. Hnací ústrojí se skládá z motorů a kol, které spolupracují na pohybu robota.
Pohon drivetrain nepoužívá Inerciální senzor ani Gyro senzor pro zatáčení podle směru jízdy nebo rotace. Může jet dopředu nebo dozadu a zatáčet doleva nebo doprava, ale nemůže se otočit do určitého směru nebo rotace. Pro zatáčení podle směru jízdy a rotace použijte třídu smartdrive.
Odvozené třídy#
Třída drivetrain slouží jako základní třída pro následující odvozené třídy:
smartdrive– Tato třída přidává podporu pro inerciální senzory nebo gyroskopy, které umožňují otáčení na základě směru a rotace.
Konstruktory tříd#
1 - Creates a drivetrain using existing
motor_groupobjects for the left (&l) and right (&r) sides.drivetrain( motor_group &l, motor_group &r, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 - Vytvoří hnací ústrojí s využitím existujících objektů
motorpro levou (&l) a pravou (&r) stranu.drivetrain( motor &l, motor &r, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Destruktor tříd#
Zničí objekt drivetrain a uvolní související zdroje.
virtual ~drivetrain();
Parametry#
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Levý a pravý motor nebo skupiny motorů. Oba parametry musí používat stejný typ: buď dva objekty |
|
|
Obvod kol hnacího ústrojí. Výchozí hodnota je |
|
|
Vzdálenost mezi levým a pravým kolem. Výchozí hodnota je |
|
|
Vzdálenost mezi předními a zadními koly. Výchozí hodnota je |
|
|
Jednotka pro |
|
|
Převodový poměr použitý k úpravě ujeté vzdálenosti, pokud jsou použity převody. Výchozí hodnota je |
Příklad#
// 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
Členské funkce#
Existuje mnoho způsobů, jak kódovat hnací ústrojí. Níže je uveden seznam všech členských funkcí drivetrain:
Akce - Pohyb a otáčení robota.
drive- Pohybuje robota vpřed nebo vzad natrvalo.driveFor- Pohybuje robotem vpřed nebo vzad o určitou vzdálenost.turn- Otočí robota doleva nebo doprava natrvalo.turnFor- Otočí robota doleva nebo doprava o určitý počet stupňů.stop- Zastaví pohyb robota.
Mutátory – Úprava nastavení hnacího ústrojí.
setDriveVelocity- Říká robotovi, jak rychle má jet.setTurnVelocity- Říká robotovi, jak rychle se má otáčet.setStopping- Určuje, jak se robot zastaví: brzděním, setrvačností nebo zastavením.setTimeout- Nastaví, kolik sekund se bude robot snažit dokončit pohyb.
Získávače - Kontrola stavu pohybu.
isDone- Vrací, zda robot dokončil pohyb, jako booleovskou hodnotu.isMoving- Vrací hodnotu typu Boolean, která ukazuje, zda se robot pohybuje.velocity- Vrátí, jak rychle se robot pohybuje.current- Vrátí, kolik elektrického proudu spotřebovává hnací ústrojí.power- Vrátí, jak rychle hnací ústrojí spotřebovává energii.torque- Vrátí, kolik točivého momentu hnací ústrojí využívá.efficiency– Vrací, jak efektivně hnací ústrojí využívá energii.temperature- Vrátí teplotu hnacího ústrojí.voltage- Vrací elektrické napětí dodávané do hnacího ústrojí.
Před voláním jakékoli členské funkce drivetrain musí být vytvořen objekt drivetrain , jak je znázorněno níže:
/* 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
Akce#
řídit#
drive pohybuje robotem vpřed nebo vzad navždy. Robot se bude pohybovat, dokud nedostane další akci, například otočení nebo zastavení. U otáček za minutu nebo DPS se limit mění převodovým poměrem hnacího ústrojí.
1 - Pohony používají aktuálně nakonfigurovanou rychlost pohonu.
void drive( directionType dir );
Parameters2 - Jede zadanou rychlostí.
void drive( directionType dir, double velocity, velocityUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Směr pohybu robota: |
|
|
Rychlost, s níž se má robot pohybovat, od 0 % do 100 % při použití |
|
|
Jednotka rychlosti: |
Tato funkce nevrací hodnotu.
Notesdrivenečeká; projekt bude pokračovat v provádění dalšího řádku kódu ihned po volání.Pohon se bude pohybovat, dokud nebude volána funkce
stopnebo dokud nebude provedena jiná funkce pro pohyb pohonu (napříkladdriveForneboturn).Functions such as
isDoneandisMovingare not applicable todrive, since it does not use target-based movement (doesn’t have adistanceparameter).
// Drive forward and back
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.drive(reverse, 25, rpm);
wait(2, seconds);
myDrivetrain.stop();
pohonPro#
driveFor pohybuje robotem vpřed nebo vzad o určitou vzdálenost. Projekt ve výchozím nastavení počká, dokud se robot nedokončí s pohybem, než se spustí další řádek kódu. Pro RPM nebo DPS se limit mění převodovým poměrem hnacího ústrojí.
1 - Pojede v zadaném směru na vzdálenost s použitím aktuálně nakonfigurované rychlosti pohonu.
bool driveFor( directionType dir, double distance, distanceUnits units, bool waitForCompletion = true );
2 - Pohybuje se ve směru závislém na vzdálenosti s využitím aktuálně nakonfigurované rychlosti pohonu.
bool driveFor( double distance, distanceUnits units, bool waitForCompletion = true );
3 - Jede ve směru závislém na vzdálenosti zadanou rychlostí.
bool driveFor( double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Jede v zadaném směru na vzdálenost zadanou rychlostí.
bool driveFor( directionType dir, double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Směr pohybu robota: |
|
|
Vzdálenost, kterou robot urazí. |
|
|
Jednotka vzdálenosti: |
|
|
Rychlost, s níž se má robot pohybovat, od 0 % do 100 % při použití |
|
|
Jednotka rychlosti: |
|
|
|
Vrací, zda robot dosáhl cílové vzdálenosti, jako booleovskou hodnotu.
true- Robot dosáhl cílové vzdálenosti.false- Robot nedokončil pohyb nebo funkce vrátila hodnotu před dokončením pohybu, protožewaitForCompletionbyla nastavena nafalse.
Provedení jiné funkce pohybu hnacího ústrojí (například
driveneboturnFor) během probíhající funkcedriveForpřeruší aktuální pohyb.Protože
driveForje založeno na cíli (používá parametrdistance), funkce jakoisDoneaisMovingfungují sdriveFor.
// Drive 200 mm, then back 200 mm
myDrivetrain.driveFor(forward, 200, mm);
myDrivetrain.driveFor(reverse, 200, mm);
otočit#
turn otáčí robota doleva nebo doprava natrvalo. Robot se bude otáčet, dokud nedostane další akci, například jízdu nebo zastavení. U otáček za minutu nebo DPS se limit mění převodovým poměrem hnacího ústrojí.
1 - Zatáčí s aktuálně nastavenou rychlostí otáčení.
void turn( turnType dir );
Parameters2 - Otáčí se zadanou rychlostí.
void turn( turnType dir, double velocity, velocityUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Směr otáčení robota: |
|
|
Rychlost otáčení od 0 % do 100 % při použití |
|
|
Jednotka rychlosti: |
turnnečeká; projekt bude pokračovat v provádění dalšího řádku kódu ihned po volání.Pohon se bude otáčet, dokud nebude volána funkce
stopnebo dokud nebude provedena jiná funkce pro pohyb pohonu (napříkladturnFornebodrive).Funkce jako
isDoneaisMovingnejsou použitelné proturn, protože nepoužívá pohyb založený na cíli (nemá parametrangle).
// Turn right, then left, then stop
myDrivetrain.turn(right);
wait(2, seconds);
myDrivetrain.turn(left);
wait(2, seconds);
myDrivetrain.stop();
otočitPro#
turnFor otočí robota doleva nebo doprava o určitý počet stupňů. Otočení je relativní vzhledem k aktuální poloze robota. Projekt standardně počká, dokud se robot neotáčí, než se spustí další řádek kódu. Pro RPM nebo DPS se limit mění převodovým poměrem hnacího ústrojí.
1 - Otočí se o zadaný úhel s použitím aktuálně nakonfigurované rychlosti otáčení.
bool turnFor( double angle, rotationUnits units, bool waitForCompletion = true );
2 - Otočí se v zadaném směru o úhel s využitím aktuálně nakonfigurované rychlosti otáčení.
bool turnFor( turnType dir, double angle, rotationUnits units, bool waitForCompletion = true );
3 - Otočí se o zadaný úhel při zadané rychlosti.
bool turnFor( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Otočí se v zadaném směru o úhel při zadané rychlosti.
bool turnFor( turnType dir, double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Směr otáčení robota: |
|
|
Úhel, o který se robot otočí. |
|
|
Jednotka otáčení: |
|
|
Rychlost otáčení od 0 % do 100 % při použití |
|
|
Jednotka rychlosti: |
|
|
|
Vrací, zda robot dosáhl cílového úhlu, jako booleovskou hodnotu.
true- Robot dosáhl cílového úhlu.false- Robot nedokončil kolo nebo funkce vrátila hodnotu před dokončením kola, protožewaitForCompletionbyla nastavena nafalse.
Provedení jiné funkce pohybu hnacího ústrojí (například
turnnebodrive) během probíhající funkceturnForpřeruší aktuální pohyb.Protože
turnForje založeno na cíli (používá parametrangle), funkce jakoisDoneaisMovingfungují sturnFor.
// Turn right then left
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
myDrivetrain.turnFor(left, 90, degrees);
zastávka#
stop zastaví pohyb robota. Pokud je k dispozici režim zastavení, řídí, jak se robot při volání této funkce zastaví.
1 - Zastaví hnací ústrojí s použitím aktuálně nakonfigurovaného režimu zastavení.
void stop();
Parameters2 - Zastaví hnací ústrojí pomocí zadaného režimu brzdění.
void stop( brakeType mode );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jak robot zastaví:
|
Tato funkce nevrací hodnotu.
Examples// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
Mutátory#
setDriveVelocity#
setDriveVelocity říká robotovi, jak rychle má jet. Vyšší procento způsobí, že robot jede rychleji, a nižší procento ho zpomalí. Pro RPM nebo DPS se limit mění převodovým poměrem hnacího ústrojí.
Každý projekt začíná s robotem, který se standardně pohybuje rychlostí 50 %.
Poznámka: Vyšší rychlost zrychluje pohyb robota, ale může být méně přesný. Nižší rychlost zpomaluje pohyb robota, ale může být přesnější.
Available Functionsvoid setDriveVelocity(
double velocity,
velocityUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Rychlost, s níž se má jezdit, je od 0 % do 100 % při použití |
|
|
Jednotka rychlosti: |
Tato funkce nevrací hodnotu.
NotesRychlost pohonu se vztahuje na všechny následující funkce pohybu hnacího ústrojí (jako například
driveadriveFor), pokud není ve volání funkce zadána specifická rychlost.
// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
nastavitRychlostOtočení#
setTurnVelocity říká robotovi, jak rychle se má otáčet. Vyšší procento způsobí, že se robot bude otáčet rychleji, a nižší procento způsobí, že se robot bude otáčet pomaleji. Pro RPM nebo DPS se limit mění převodovým poměrem hnacího ústrojí.
Každý projekt začíná s robotem, který se standardně otáčí rychlostí 50 %.
Poznámka: Vyšší rychlost způsobí, že se robot otáčí rychleji, ale může být méně přesný. Nižší rychlost způsobí, že se robot otáčí pomaleji, ale může být přesnější.
Available Functionsvoid setTurnVelocity(
double velocity,
velocityUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Rychlost otáčení od 0 % do 100 % při použití |
|
|
Jednotka rychlosti: |
Tato funkce nevrací hodnotu.
NotesRychlost otáčení se vztahuje na všechny následující funkce otáčení hnacího ústrojí (jako například
turnaturnFor), pokud není ve volání funkce zadána specifická rychlost.
// 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);
setStopping#
setStopping nastavuje, jak se robot zastaví: brzděním, doběhem nebo zastavením.
void setStopping(
brakeType mode );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jak robot zastaví:
|
Tato funkce nevrací hodnotu.
NotesRežim zastavení se použije na všechna následující volání funkce
stop, pokud není ve volání funkce uveden specifický režim zastavení.
nastavitČasový limit#
setTimeout nastavuje, po kolik sekund se robot bude snažit dokončit pohyb. Pokud robot nedokončí pohyb v tomto čase, přestane se snažit a přesune se na další řádek kódu. Tím se zabrání tomu, aby se robot zasekl na pohybu.
void setTimeout(
int32_t time,
timeUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Doba, po kterou se robot může pokusit dokončit pohyb. Mělo by to být kladné celé číslo. |
|
|
Jednotka času: |
Tato funkce nevrací hodnotu.
NotesČasový limit se vztahuje pouze na funkce pohybu hnacího ústrojí založené na cíli (jako například
driveForaturnFor).
// Start turning if driving takes too long
myDrivetrain.setTimeout(1, seconds);
myDrivetrain.driveFor(forward, 25, inches);
myDrivetrain.turnFor(right, 90, degrees);
Gettery#
jeHotovo#
isDone vrací hodnotu, zda robot dokončil pohyb, jako booleovskou hodnotu. Tuto hodnotu lze použít k řízení načasování dalších chování na základě pohybu robota.
bool isDone( void );
Tato funkce nepřijímá žádné parametry.
Return Valuestrue- Robot dokončil pohyb.false- Robot se stále pohybuje.
se pohybuje#
isMoving vrací booleovskou hodnotu, zda se robot pohybuje. Tuto hodnotu lze použít k řízení načasování dalších chování na základě pohybu robota.
virtual bool isMoving( void );
Tato funkce nepřijímá žádné parametry.
Return Valuestrue- Robot se pohybuje.false- Robot se nepohybuje.
rychlost#
velocity vrací, jak rychle se robot pohybuje.
Kladná hodnota znamená, že robot jede vpřed. Záporná hodnota znamená, že robot jede vzad.
Available Functionsdouble velocity(
velocityUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jednotka rychlosti: |
Vrátí rychlost hnacího ústrojí jako double ve vybrané jednotce.
// 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();
proud#
current vrací množství elektrického proudu spotřebovaného hnacím ústrojím. Proud je množství elektřiny protékající hnacím ústrojím. Může být udáván v ampérech nebo v procentech, v závislosti na jednotce.
Vyšší hodnota proudu znamená, že pohon spotřebovává více elektrického proudu. K tomu může dojít, když robot tlačí na nějaký předmět nebo se snaží pohnout, když je zaseknutý.
Toto lze použít ke kontrole, zda se během pohybu nevyskytují problémy s pohonem. Pokud proud zůstává vysoký, hnací ústrojí se může zahřívat nebo méně efektivně využívat energii.
Available Functions1 - Vrací elektrický proud hnacího ústrojí v ampérech.
double current( currentUnits units = currentUnits::amp );
Parameters2 - Vrací elektrický proud hnacího ústrojí v procentech z maxima.
double current( percentUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jednotka pro vrácení proudu: |
|
|
Jednotka pro vrácení proudu: |
Vrátí proud hnacího ústrojí jako double ve vybrané jednotce.
moc#
power vrací množství energie spotřebované hnacím ústrojím, měřené ve wattech. Výkon ukazuje, jak rychle hnací ústrojí energii spotřebovává.
Vyšší hodnota výkonu znamená, že hnací ústrojí spotřebovává energii rychleji. K tomu může dojít, když robot tlačí na nějaký předmět nebo se snaží pohnout, když je zaseknutý.
Toto lze použít k porovnání pohybů nebo ke kontrole, zda hnací ústrojí nemá problémy. Pokud výkon zůstává vysoký, hnací ústrojí se může zahřívat nebo méně efektivně využívat energii.
Available Functionsdouble power(
powerUnits units = powerUnits::watt );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Napájecí jednotka: |
Vrací výkon hnacího ústrojí jako double ve wattech.
točivý moment#
Točivý moment ukazuje, jak silně může hnací ústrojí tlačit nebo táhnout, zatímco se kola protáčejí.
torque vrací hodnotu momentu, který hnací ústrojí využívá, měřenou v newtonmetrech (Nm) nebo palcích v librách (InLb).
Vyšší hodnota točivého momentu znamená, že hnací ústrojí tlačí nebo táhne silněji. K tomu může dojít, když robot tlačí na nějaký předmět nebo se snaží pohnout, když je zaseknutý.
To lze použít ke kontrole, zda má hnací ústrojí problémy, nebo k porovnání, kolik tlaku potřebují různé pohyby.
Available Functionsdouble torque(
torqueUnits units = torqueUnits::nm );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jednotka pro návrat točivého momentu v: |
Vrátí točivý moment hnacího ústrojí jako double ve vybrané jednotce.
účinnost#
efficiency vrací, jak efektivně hnací ústrojí využívá výkon, v procentech od 0 % do 100 %.
Účinnost ukazuje, kolik výkonu hnacího ústrojí se využívá k pohybu. Vyšší hodnota účinnosti znamená, že se k pohybu využívá více výkonu hnacího ústrojí. Nižší hodnota účinnosti může nastat, když hnací ústrojí pracuje intenzivně, ale moc se nepohybuje, například když je robot zaseknutý nebo tlačí na nějaký předmět.
To lze použít k porovnání pohybů nebo ke kontrole, zda hnací ústrojí plýtvá výkonem, místo aby jej využívalo k pohybu.
Available Functionsdouble efficiency(
percentUnits units = percentUnits::pct );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jednotka pro vyjádření účinnosti: |
Vrátí účinnost hnacího ústrojí jako double ve vybrané jednotce.
teplota#
temperature vrací průměrnou teplotu hnacího ústrojí v procentech od 0 % do 100 %.
Teplota ukazuje, jak jsou motory hnacího ústrojí zahřáté. Vyšší teplota znamená, že se motory během provozu zahřívají. Aby motory fungovaly na plný výkon, měly by se teplota motorů udržovat pod 55 °C.
Pokud se motory příliš zahřejí, sníží svůj maximální proud, aby se chránily. Při 70 °C se motory zastaví, dokud nevychladnou.
Toto lze použít ke kontrole, zda se hnací ústrojí příliš nezahřívá během opakovaných pohybů, dlouhých běhů nebo když tlačí na nějaký předmět.
Available Functionsdouble temperature(
percentUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jednotka pro měření teploty vratné vody: |
Vrátí průměrnou teplotu hnacího ústrojí jako double ve vybrané jednotce.
Vrácená hodnota
50%znamená, že průměrná teplota motoru je přibližně45°C(113°F).Typický rozsah provozních teplot pro hnací ústrojí je přibližně
20°C(68°F) až70°C(158°F).
napětí#
voltage vrací elektrické napětí dodávané do hnacího ústrojí.
Napětí je elektrický tlak dodávaný do motorů hnacího ústrojí. Toto napětí lze použít spolu s hodnotami proudu a výkonu k pochopení toho, jak hnací ústrojí využívá elektrickou energii.
Available Functionsdouble voltage(
voltageUnits units = voltageUnits::volt );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jednotka pro vrácení napětí v: |
Vrací napětí hnacího ústrojí jako double ve vybrané jednotce.