Układ napędowy#
Wstęp#
Klasa układu napędowego drivetrain kontroluje sposób jazdy i skręcania robota. Układ napędowy składa się z silników i kół, które współpracują ze sobą, aby poruszać robotem.
Układ napędowy drivetrain nie korzysta z czujnika bezwładnościowego ani czujnika żyroskopowego w przypadku skrętów opartych na kursie lub obrocie. Może jechać do przodu lub do tyłu oraz skręcać w lewo lub w prawo, ale nie może wykonać skrętu w określonym kierunku lub obrocie. W przypadku skrętów opartych na kursie i obrocie należy użyć klasy smartdrive.
Klasy pochodne#
Klasa układu napędowego drivetrain służy jako klasa bazowa dla następujących klas pochodnych:
smartdrive- Ta klasa dodaje obsługę czujnika bezwładnościowego lub czujnika żyroskopowego, aby umożliwić wykonywanie skrętów na podstawie kierunku i obrotu.
Konstruktory klas#
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 - Tworzy układ napędowy wykorzystując istniejące obiekty
motordla lewej (&l) i prawej (&r) strony.drivetrain( motor &l, motor &r, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Destruktor klasy#
Niszczy obiekt układu napędowego drivetrain i uwalnia powiązane zasoby.
virtual ~drivetrain();
Parametry#
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Lewy i prawy silnik lub grupa silników. Oba parametry muszą używać tego samego typu: albo dwóch obiektów |
|
|
Obwód kół układu napędowego. Wartość domyślna to |
|
|
Odległość między lewym a prawym kołem. Wartość domyślna to |
|
|
Odległość między przednimi i tylnymi kołami. Wartość domyślna to |
|
|
Jednostka dla |
|
|
Przełożenie używane do regulacji odległości jazdy, jeśli używane są przekładnie. Domyślnie |
Przykład#
// 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
Funkcje członkowskie#
Istnieje wiele sposobów kodowania układu napędowego. Poniżej znajduje się lista wszystkich funkcji członkowskich układu napędowego drivetrain:
Akcje — poruszanie i obracanie robotem.
drive- Przesuwa robota do przodu lub do tyłu w nieskończoność.driveFor- Przesuwa robota do przodu lub do tyłu na określoną odległość.turn- Obraca robota w lewo lub prawo na zawsze.turnFor- Obraca robota w lewo lub prawo o określoną liczbę stopni.stop- Zatrzymuje ruch robota.
Mutatory - Dostosuj ustawienia układu napędowego.
setDriveVelocity- Informuje robota, jak szybko ma jechać.setTurnVelocity- Informuje robota, jak szybko ma się skręcić.setStopping- Informuje, w jaki sposób robot zatrzyma się: poprzez hamowanie, jazdę bez obciążenia lub przytrzymanie.setTimeout- Ustawia liczbę sekund, przez które robot będzie próbował zakończyć ruch.
Getters - Sprawdź status ruchu.
isDone– Zwraca wartość logiczną informującą, czy robot zakończył ruch.isMoving- Zwraca wartość logiczną informującą, czy robot się porusza.velocity- Zwraca prędkość, z jaką porusza się robot.current- Zwraca informację o tym, ile prądu elektrycznego zużywa układ napędowy.power- Zwraca informację o tym, jak szybko układ napędowy zużywa energię.torque- Zwraca informację o tym, jaki moment obrotowy wykorzystuje układ napędowy.efficiency- Zwraca informację o tym, jak efektywnie układ napędowy wykorzystuje moc.temperature- Zwraca informację o tym, jak ciepły jest układ napędowy.voltage- Zwraca napięcie elektryczne dostarczone do układu napędowego.
Przed wywołaniem jakiejkolwiek funkcji członkowskiej drivetrain należy utworzyć obiekt drivetrain , jak pokazano poniżej:
/* 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
Akcje#
prowadzić#
Napęd drive porusza robota do przodu lub do tyłu w nieskończoność. Robot będzie się poruszał, dopóki nie zostanie mu przydzielona inna czynność, taka jak obrót lub zatrzymanie. W przypadku obrotów na minutę lub DPS limit jest zmieniany przez przełożenie układu napędowego.
1 - Napędy wykorzystują aktualnie skonfigurowaną prędkość napędu.
void drive( directionType dir );
Parameters2 - Jeździ z określoną prędkością.
void drive( directionType dir, double velocity, velocityUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Kierunek ruchu robota: |
|
|
Prędkość jazdy może mieścić się w zakresie od 0% do 100% przy użyciu wartości |
|
|
Jednostka prędkości: |
Ta funkcja nie zwraca wartości.
NotesDysk
drivenie jest dyskiem oczekującym; projekt będzie kontynuował wykonywanie następnej linii kodu bezpośrednio po wywołaniu.Układ napędowy będzie się poruszał do momentu wywołania funkcji
stoplub wykonania innej funkcji ruchu układu napędowego (takiej jakdriveForlubturn).Funkcje takie jak
isDoneiisMovingnie są stosowane dodrive, ponieważ nie wykorzystuje on ruchu opartego na celu (nie madistanceparametru).
// Drive forward and back
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.drive(reverse, 25, rpm);
wait(2, seconds);
myDrivetrain.stop();
driveFor#
driveFor przesuwa robota do przodu lub do tyłu o określoną odległość. Projekt domyślnie poczeka, aż robot zakończy ruch, zanim uruchomi się kolejny wiersz kodu. W przypadku RPM lub DPS limit jest zmieniany przez przełożenie układu napędowego.
1 - Jedzie w określonym kierunku na określoną odległość, używając aktualnie skonfigurowanej prędkości jazdy.
bool driveFor( directionType dir, double distance, distanceUnits units, bool waitForCompletion = true );
2 - Napędy w kierunku zależnym od odległości wykorzystują aktualnie skonfigurowaną prędkość napędu.
bool driveFor( double distance, distanceUnits units, bool waitForCompletion = true );
3 - Porusza się w kierunku zależnym od odległości przy określonej prędkości.
bool driveFor( double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Jedzie w określonym kierunku na określoną odległość z określoną prędkością.
bool driveFor( directionType dir, double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Kierunek ruchu robota: |
|
|
Odległość, jaką pokonuje robot. |
|
|
Jednostka odległości: |
|
|
Prędkość jazdy może mieścić się w zakresie od 0% do 100% przy użyciu wartości |
|
|
Jednostka prędkości: |
|
|
|
Zwraca wartość logiczną informującą, czy robot osiągnął odległość docelową.
true- Robot osiągnął docelową odległość.false- Robot nie zakończył ruchu lub funkcja została zwrócona przed zakończeniem ruchu, ponieważwaitForCompletionzostało ustawione nafalse.
Wykonanie innej funkcji ruchu układu napędowego (takiej jak
drivelubturnFor) podczas trwania funkcjidriveForspowoduje przerwanie bieżącego ruchu.Ponieważ
driveForjest oparte na celu (używa parametru odległościdistance), funkcje takie jakisDoneiisMovingdziałają zdriveFor.
// Drive 200 mm, then back 200 mm
myDrivetrain.driveFor(forward, 200, mm);
myDrivetrain.driveFor(reverse, 200, mm);
zakręt#
turn obraca robota w lewo lub w prawo w nieskończoność. Robot będzie się obracał, dopóki nie zostanie mu przydzielona inna czynność, taka jak jazda lub zatrzymanie. W przypadku obrotów na minutę lub DPS limit jest zmieniany przez przełożenie układu napędowego.
1 - Zakręty wykonywane są z użyciem aktualnie skonfigurowanej prędkości zakrętu.
void turn( turnType dir );
Parameters2 - Obroty z określoną prędkością.
void turn( turnType dir, double velocity, velocityUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Kierunek, w którym obraca się robot: |
|
|
Prędkość obrotu od 0% do 100% przy użyciu |
|
|
Jednostka prędkości: |
turnjest nieoczekiwana; projekt będzie kontynuował wykonywanie następnej linii kodu bezpośrednio po wywołaniu.Układ napędowy będzie się obracał do momentu wywołania funkcji
stoplub wykonania innej funkcji ruchu układu napędowego (takiej jakturnForlubdrive).Funkcje takie jak
isDoneiisMovingnie są dostępne dla turyturn, ponieważ nie wykorzystuje ona ruchu opartego na celu (nie ma parametru kątaangle).
// Turn right, then left, then stop
myDrivetrain.turn(right);
wait(2, seconds);
myDrivetrain.turn(left);
wait(2, seconds);
myDrivetrain.stop();
obróć dla#
turnFor obraca robota w lewo lub w prawo o określoną liczbę stopni. Obrót jest względny względem aktualnej pozycji robota. Projekt domyślnie poczeka, aż robot zakończy obrót, zanim uruchomi się kolejny wiersz kodu. W przypadku RPM lub DPS limit jest zmieniany przez przełożenie układu napędowego.
1 - Wykonuje zakręty pod określonym kątem, używając aktualnie skonfigurowanej prędkości skrętu.
bool turnFor( double angle, rotationUnits units, bool waitForCompletion = true );
2 - Skręca w określonym kierunku o określony kąt, używając aktualnie skonfigurowanej prędkości skrętu.
bool turnFor( turnType dir, double angle, rotationUnits units, bool waitForCompletion = true );
3 - Zakręty o określony kąt i określoną prędkość.
bool turnFor( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Obrót w określonym kierunku pod określonym kątem i z określoną prędkością.
bool turnFor( turnType dir, double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Kierunek, w którym obraca się robot: |
|
|
Kąt, pod jakim obraca się robot. |
|
|
Jednostka obrotu: |
|
|
Prędkość obrotu od 0% do 100% przy użyciu |
|
|
Jednostka prędkości: |
|
|
|
Zwraca wartość logiczną informującą, czy robot osiągnął kąt docelowy.
true- Robot osiągnął kąt docelowy.false- Robot nie zakończył obrotu lub funkcja została zwrócona przed zakończeniem obrotu, ponieważwaitForCompletionzostało ustawione nafalse.
Wykonanie innej funkcji ruchu układu napędowego (takiej jak
turnlubdrive) podczas trwania funkcjiturnForspowoduje przerwanie bieżącego ruchu.Ponieważ funkcja
turnForjest oparta na celu (używa parametru kątaangle), funkcje takie jakisDoneiisMovingdziałają z funkcjąturnFor.
// Turn right then left
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
myDrivetrain.turnFor(left, 90, degrees);
zatrzymywać się#
stop zatrzymuje ruch robota. Jeśli podano tryb zatrzymywania, kontroluje on sposób zatrzymywania robota w trakcie wywołania tej funkcji.
1 - Zatrzymuje układ napędowy przy użyciu aktualnie skonfigurowanego trybu zatrzymywania.
void stop();
Parameters2 - Zatrzymuje układ napędowy przy użyciu określonego trybu hamowania.
void stop( brakeType mode );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jak robot się zatrzyma:
|
Ta funkcja nie zwraca wartości.
Examples// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
Mutatory#
ustawPrędkośćNapędu#
setDriveVelocity określa prędkość, z jaką robot ma jechać. Wyższy procent powoduje, że robot jedzie szybciej, a niższy – wolniej. W przypadku RPM lub DPS limit jest zmieniany przez przełożenie układu napędowego.
Każdy projekt rozpoczyna się od tego, że robot domyślnie porusza się z prędkością równą 50%.
Uwaga: Większa prędkość sprawia, że robot jedzie szybciej, ale może być mniej precyzyjny. Niższa prędkość sprawia, że robot jedzie wolniej, ale może być bardziej precyzyjny.
Available Functionsvoid setDriveVelocity(
double velocity,
velocityUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Prędkość jazdy od 0% do 100% przy użyciu |
|
|
Jednostka prędkości: |
Ta funkcja nie zwraca wartości.
NotesPrędkość napędu dotyczy wszystkich kolejnych funkcji ruchu układu napędowego (takich jak
driveidriveFor), chyba że w wywołaniu funkcji podano konkretną prędkość.
// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
ustaw prędkość skrętu#
Wartość setTurnVelocity setTurnVelocity robot skręca szybciej, a niższy – że skręca wolniej. W przypadku RPM lub DPS limit jest zmieniany przez przełożenie układu napędowego.
Każdy projekt rozpoczyna się od ustawienia robota tak, aby domyślnie obracał się z prędkością równą 50%.
Uwaga: Większa prędkość sprawia, że robot skręca szybciej, ale może być mniej precyzyjny. Niższa prędkość sprawia, że robot skręca wolniej, ale może być bardziej precyzyjny.
Available Functionsvoid setTurnVelocity(
double velocity,
velocityUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Prędkość obrotu od 0% do 100% przy użyciu |
|
|
Jednostka prędkości: |
Ta funkcja nie zwraca wartości.
NotesPrędkość obrotu dotyczy wszystkich kolejnych funkcji obrotu układu napędowego (takich jak
turniturnFor), chyba że w wywołaniu funkcji podano konkretną prędkość.
// 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);
ustawZatrzymywanie#
setStopping ustawia sposób zatrzymania robota: poprzez hamowanie, jazdę bez obciążenia lub przytrzymywanie.
void setStopping(
brakeType mode );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jak robot się zatrzyma:
|
Ta funkcja nie zwraca wartości.
NotesTryb zatrzymywania obowiązuje dla wszystkich kolejnych wywołań
stop, chyba że w wywołaniu funkcji podano konkretny tryb zatrzymywania.
ustawLimitCzasu#
setTimeout ustawia liczbę sekund, przez które robot będzie próbował zakończyć ruch. Jeśli robot nie zdoła ukończyć ruchu w tym czasie, przerwie próbę i przejdzie do następnego wiersza kodu. Zapobiega to zablokowaniu ruchu przez robota.
void setTimeout(
int32_t time,
timeUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Czas, w którym robot może próbować zakończyć ruch. Powinna to być dodatnia liczba całkowita. |
|
|
Jednostka czasu: |
Ta funkcja nie zwraca wartości.
NotesLimit czasu dotyczy wyłącznie funkcji ruchu układu napędowego opartych na celu (takich jak
driveForiturnFor).
// Start turning if driving takes too long
myDrivetrain.setTimeout(1, seconds);
myDrivetrain.driveFor(forward, 25, inches);
myDrivetrain.turnFor(right, 90, degrees);
Getters#
jest gotowe#
isDone zwraca wartość logiczną, czy robot zakończył ruch. Można jej użyć do kontrolowania czasu innych zachowań na podstawie ruchu robota.
bool isDone( void );
Ta funkcja nie przyjmuje żadnych parametrów.
Return Valuestrue- Robot zakończył ruch.false- Robot nadal się porusza.
jest w ruchu#
isMoving zwraca wartość logiczną, czy robot się porusza. Można jej użyć do kontrolowania czasu innych zachowań na podstawie ruchu robota.
virtual bool isMoving( void );
Ta funkcja nie przyjmuje żadnych parametrów.
Return Valuestrue- Robot się porusza.false- Robot się nie porusza.
prędkość#
velocity zwraca informację o tym, jak szybko porusza się robot.
Wartość dodatnia oznacza, że robot jedzie do przodu. Wartość ujemna oznacza, że robot jedzie do tyłu.
Available Functionsdouble velocity(
velocityUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka prędkości: |
Zwraca prędkość układu napędowego jako double w wybranej jednostce.
// 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();
aktualny#
current zwraca natężenie prądu elektrycznego pobieranego przez układ napędowy. Natężenie prądu to ilość energii elektrycznej przepływającej przez układ napędowy. Może być zwracane w amperach (ampery) lub procentowo, w zależności od jednostki.
Wyższa wartość prądu oznacza, że układ napędowy zużywa więcej prądu. Może się to zdarzyć, gdy robot naciska na obiekt lub próbuje się poruszyć, gdy utknie.
Można tego użyć, aby sprawdzić, czy układ napędowy ma problemy podczas ruchu. Jeśli prąd utrzymuje się na wysokim poziomie, układ napędowy może się nagrzewać lub zużywać energię mniej efektywnie.
Available Functions1 - Zwraca wartość prądu elektrycznego układu napędowego w amperach.
double current( currentUnits units = currentUnits::amp );
Parameters2 - Zwraca wartość prądu elektrycznego układu napędowego jako procent wartości maksymalnej.
double current( percentUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka zwracająca prąd: |
|
|
Jednostka zwracająca prąd w: |
Zwraca wartość prądu układu napędowego jako double w wybranej jednostce.
moc#
power zwraca ilość energii zużywanej przez układ napędowy, mierzoną w watach. Power pokazuje, jak szybko układ napędowy zużywa energię.
Wyższa wartość mocy oznacza, że układ napędowy zużywa energię szybciej. Może się to zdarzyć, gdy robot naciska na obiekt lub próbuje się poruszyć, gdy utknie.
Można tego użyć do porównania ruchów lub sprawdzenia, czy układ napędowy ma problemy. Jeśli moc utrzymuje się na wysokim poziomie, układ napędowy może się nagrzewać lub zużywać energię mniej efektywnie.
Available Functionsdouble power(
powerUnits units = powerUnits::watt );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka mocy: |
Zwraca moc układu napędowego jako double w watach.
moment obrotowy#
Moment obrotowy pokazuje, jak mocno układ napędowy może pchać lub ciągnąć, gdy koła się kręcą.
torque zwraca wartość momentu obrotowego wykorzystywanego przez układ napędowy, mierzoną w niutonometrach (Nm) lub funtach na cal (InLb).
Wyższy moment obrotowy oznacza, że układ napędowy pcha lub ciągnie mocniej. Może się tak zdarzyć, gdy robot pcha obiekt lub próbuje się poruszyć, gdy utknie.
Można tego użyć, aby sprawdzić, czy układ napędowy ma problemy lub porównać, ile siły nacisku potrzeba przy różnych ruchach.
Available Functionsdouble torque(
torqueUnits units = torqueUnits::nm );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka momentu obrotowego: |
Zwraca moment obrotowy układu napędowego jako double w wybranej jednostce.
efektywność#
efficiency zwraca informację o tym, jak efektywnie układ napędowy wykorzystuje moc, w procentach od 0% do 100%.
Sprawność pokazuje, jaka część mocy układu napędowego jest wykorzystywana do poruszania się. Wyższa wartość sprawności oznacza, że większa część mocy układu napędowego jest wykorzystywana do poruszania się. Niższa wartość sprawności może wystąpić, gdy układ napędowy intensywnie pracuje, ale porusza się nieznacznie, na przykład gdy robot utknął lub popycha obiekt.
Można tego użyć do porównania ruchów lub sprawdzenia, czy układ napędowy marnuje moc zamiast wykorzystać ją do ruchu.
Available Functionsdouble efficiency(
percentUnits units = percentUnits::pct );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka zwracająca wydajność w: |
Zwraca wydajność układu napędowego jako double w wybranej jednostce.
temperatura#
temperature zwraca średnią temperaturę układu napędowego jako procent od 0% do 100%.
Temperatura wskazuje, jak ciepłe są silniki układu napędowego. Wyższa temperatura oznacza, że silniki nagrzewają się podczas pracy. Aby silniki pracowały z pełną wydajnością, ich temperatura powinna utrzymywać się poniżej 55°C.
Jeśli silniki się przegrzeją, obniżą maksymalny prąd, aby się zabezpieczyć. Przy temperaturze 70°C silniki przestaną pracować do momentu ostygnięcia.
Można tego użyć, aby sprawdzić, czy układ napędowy nie nagrzewa się zbytnio podczas powtarzających się ruchów, długich przejazdów lub gdy naciska na jakiś obiekt.
Available Functionsdouble temperature(
percentUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka zwracana temperatury w: |
Zwraca średnią temperaturę układu napędowego jako double w wybranej jednostce.
Zwrócona wartość
50%oznacza, że średnia temperatura silnika wynosi około45°C(113°F).Typowy zakres temperatur roboczych układu napędowego wynosi w przybliżeniu od
20°C(68°F) do70°C(158°F).
woltaż#
Napięcie voltage zwraca napięcie elektryczne dostarczane do układu napędowego.
Napięcie to ciśnienie elektryczne dostarczane do silników układu napędowego. Można je porównywać z wartościami prądu i mocy, aby zrozumieć, w jaki sposób układ napędowy wykorzystuje energię elektryczną.
Available Functionsdouble voltage(
voltageUnits units = voltageUnits::volt );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka zwracanego napięcia: |
Zwraca napięcie układu napędowego jako double w wybranej jednostce.