Układ napędowy#
Wstęp#
Klasa 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 żyroskopowego ani czujnika bezwładnościowego do 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. Do skrętów opartych na kursie i obrocie należy użyć klasy smartdrive.
Ta strona używa przykładowej nazwy układu napędowego myDrivetrain W razie potrzeby zastąp ją własną, skonfigurowaną nazwą.
Klasy pochodne#
Klasa układu napędowego drivetrain służy jako klasa bazowa dla następującej klasy pochodnej:
smartdrive- Tworzy układ napędowy z obsługą czujnika żyroskopowego lub czujnika bezwładnościowego.
Konstruktory klas#
1 - Tworzy układ napędowy wykorzystujący
motor_groupdla lewej i prawej strony.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 i prawej 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
rightMotor, // right motor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Funkcje członkowskie#
Klasa drivetrain zawiera następujące funkcje członkowskie:
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 lub obrotów.stop- Zatrzymuje ruch robota.
Ustawienia — 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, jak długo robot będzie próbował zakończyć ruch.
Wartości - 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 układu napędowego.
Przed wywołaniem jakiejkolwiek funkcji członkowskiej drivetrain należy utworzyć obiekt drivetrain.
/* 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
Akcje#
prowadzić#
Napęd drive porusza robota do przodu lub do tyłu w nieskończoność. Robot będzie się poruszał, dopóki nie otrzyma innej akcji, takiej jak obrót lub zatrzymanie.
1 - Napędy wykorzystują aktualną 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 wynosić od 0% do 100% przy użyciu |
|
|
Jednostka prędkości: |
Ta funkcja nie zwraca wartości.
NotesDysk
drivenie oczekuje. Projekt natychmiast uruchomi następną linijkę kodu.Robot będzie się poruszał, aż do momentu wywołania funkcji
stoplub uruchomienia innej funkcji ruchu układu napędowego.isDoneiisMovingnie są używane zdriveponieważdrivenie ma odległości docelowej.
// 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 będzie czekał, aż robot zakończy ruch, zanim uruchomi się kolejny wiersz kodu.
1 - Jedzie w określonym kierunku na określoną odległość, wykorzystując aktualną prędkość jazdy.
bool driveFor( directionType dir, double distance, distanceUnits units, bool waitForCompletion = true );
2 - Napęd jedzie w kierunku określonym na podstawie wartości odległości, korzystając z aktualnej prędkości napędu.
bool driveFor( double distance, distanceUnits units, bool waitForCompletion = true );
3 - Jedzie w kierunku na podstawie wartości 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 wynosić od 0% do 100% przy użyciu |
|
|
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.
Uruchomienie innej funkcji ruchu układu napędowego, podczas gdy działa funkcja
driveFor, spowoduje przerwanie bieżącego ruchu.driveForużywa odległości docelowej, więc można z nią używaćisDoneiisMoving.
// 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.
1 - Zakręty wykonywane są z wykorzystaniem aktualnej prędkości skrę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: |
Ta funkcja nie zwraca wartości.
Notesturnto brak oczekiwania. Projekt natychmiast uruchomi kolejną linię kodu.Robot będzie się obracał, aż do momentu wywołania funkcji
stoplub uruchomienia innej funkcji ruchu układu napędowego.isDoneiisMovingnie są używane zturnponieważturnnie ma kąta docelowego.
// 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, obrotów lub jednostek obrotu. Obrót jest względny względem bieżącej pozycji robota. Projekt będzie czekał, aż robot zakończy obrót, zanim zostanie uruchomiony kolejny wiersz kodu.
1 - Wykonuje zakręty pod określonym kątem, wykorzystując aktualną prędkość skrętu.
bool turnFor( double angle, rotationUnits units, bool waitForCompletion = true );
2 - Skręca w określonym kierunku o określony kąt, wykorzystując aktualną prędkość 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: |
|
|
Wartość obrotu robota. |
|
|
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.
Uruchomienie innej funkcji ruchu układu napędowego, gdy działa funkcja turnFor
turnForspowoduje przerwanie bieżącego ruchu.turnForużywa kąta docelowego, więc można z nim używaćisDoneiisMoving.
// 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, wykorzystując bieżący tryb zatrzymywania.
void stop();
Parameters2 - Zatrzymuje układ napędowy przy użyciu określonego trybu zatrzymywania.
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 – że jedzie wolniej.
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 jest wykorzystywana przez późniejsze funkcje ruchu układu napędowego, 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#
setTurnVelocity określa, jak szybko robot ma się skręcić. Wyższy procent powoduje, że robot skręca szybciej, a niższy – że skręca wolniej.
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 jest wykorzystywana przez późniejsze funkcje obrotu układu napędowego, 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 jest używany w późniejszych wywołaniach
stop, chyba że w wywołaniu funkcji podano konkretny tryb zatrzymywania.Jeżeli ta funkcja nie zostanie użyta, robot podczas zatrzymywania będzie używał hamulca
brake.
ustawLimitCzasu#
setTimeout ustawia, jak długo robot będzie próbował zakończyć ruch. Jeśli robot nie zdoła tego zrobić 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 układu napędowego, które przesuwają się do celu, takich jak
driveForiturnFor.
// Turn right after driving forward.
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.
Może zwracać prędkość w procentach, w rpmlub dps. Wartość dodatnia oznacza, że robot jedzie do przodu. Wartość ujemna oznacza, że robot jedzie do tyłu.
double velocity(
velocityUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka zwracająca prędkość w: |
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 natężenie prądu układu napędowego w amperach.
double current( currentUnits units = currentUnits::amp );
Parameters2 - Zwraca wartość prądu elektrycznego układu napędowego jako wartość procentową.
double current( percentUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka zwracająca prąd o natężeniu: |
|
|
Jednostka zwracająca prąd w: |
Zwraca wartość prądu układu napędowego jako double w wybranej jednostce.
moc#
power zwraca moc zużywaną 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).The typical operating temperature range for the drivetrain is about
20°C(68°F) to70°C(158°F).
woltaż#
Napięcie voltage zwraca napięcie elektryczne 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.