Czujnik bezwładnościowy#
Wstęp#
Klasa bezwładności inertial służy do sterowania i uzyskiwania dostępu do danych z czujnika bezwładnościowego EXP. EXP może korzystać z wbudowanego czujnika bezwładnościowego Brain lub zewnętrznego czujnika bezwładnościowego podłączonego do portu Smart Port.
Czujnik bezwładnościowy mierzy ruch i skręcanie robota. Żyroskop mierzy skręcanie, takie jak kierunek, obrót, prędkość żyroskopu i orientację. Akcelerometr mierzy zmiany ruchu, takie jak przyspieszenie lub zwolnienie wzdłuż osi x, y i z.
Konstruktory klas#
inertial(
int32_t index,
turnType dir = turnType::right );
Destruktor klasy#
Niszczy obiekt bezwładnościowy inertial i uwalnia powiązane zasoby.
~inertial();
Parametry#
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Opcjonalnie. Port inteligentny, do którego podłączony jest zewnętrzny czujnik bezwładnościowy, zapisany jako |
|
|
Opcjonalnie. Kierunek, który zwraca wartości dodatnie:
|
Przykłady#
// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();
// Use an external Inertial Sensor connected to Port 1.
inertial Inertial1 = inertial(PORT1);
Funkcje członkowskie#
Klasa inertial zawiera następujące funkcje członkowskie:
heading— Zwraca kierunek, w którym skierowany jest czujnik.rotation— Zwraca, o ile obrócił się czujnik.setHeading— Ustawia aktualny kierunek czujnika na nową wartość kierunku.setRotation— Ustawia aktualny obrót czujnika na nową wartość obrotu.calibrate— Kalibruje czujnik bezwładnościowy.resetHeading— Resetuje aktualny kierunek czujnika do 0 stopni.resetRotation— Resetuje aktualny obrót czujnika do 0 stopni.isCalibrating— Zwraca informację, czy czujnik bezwładnościowy jest obecnie kalibrowany.changed— Rejestruje funkcję, która ma zostać wywołana po zmianie nagłówka.zainstalowano
installed— Zwraca informację, czy czujnik bezwładnościowy jest zainstalowany.acceleration— Zwraca wartość informującą o tym, jak szybko czujnik przyspiesza lub zwalnia na wybranej osi.gyroRate— Zwraca szybkość, z jaką czujnik obraca się wokół wybranej osi.orientation— Zwraca kąt przechyłu, pochylenia lub odchylenia czujnika bezwładnościowego.collision— Rejestruje funkcję, która ma zostać uruchomiona po wykryciu kolizji.setTurnType— Ustawia kierunek skrętu, dla którego zwracane są wartości dodatnie.getTurnType— Zwraca, który kierunek skrętu generuje wartości dodatnie.
Przed wywołaniem jakiejkolwiek funkcji członkowskiej inertial należy utworzyć instancję inertial , jak pokazano poniżej:
/* This constructor is required when using VS Code.
Inertial Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();
heading#
Zwraca aktualny nagłówek czujnika bezwładnościowego.
Kurs to kierunek, w którym skierowany jest czujnik, mierzony w stopniach od 0 do 359,99. Jeśli czujnik obróci się poza 359,99 stopnia, kurs powróci do 0 stopni.
Available Functionsdouble heading( rotationUnits units = degrees );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka nagłówka:
|
Zwraca wartość double , co oznacza bieżący kierunek czujnika w określonych jednostkach.
Wartość nagłówka mieści się w przedziale od 0 do 359,99 stopnia. Aby uzyskać dostęp do wartości ciągłego obrotu, użyj polecenia
rotation.
// Turn, then show the current heading
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.heading(degrees));
rotation#
Zwraca aktualny obrót czujnika bezwładnościowego.
Obrót to wartość, o jaką obrócił się czujnik. W przeciwieństwie do kierunku, obrót może wzrosnąć powyżej 359,99 stopnia lub zmniejszyć się poniżej 0 stopni. Na przykład, wykonanie dwóch pełnych obrotów w prawo powoduje obrót o 720 stopni. Wykonanie jednego pełnego obrotu w lewo od 0 stopni powoduje obrót o -360 stopni.
Available Functionsdouble rotation( rotationUnits units = degrees );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Jednostka obrotu:
|
Zwraca wartość double reprezentującą bieżący obrót w określonych jednostkach.
Wartość obrotu jest ciągła i nie obejmuje zakresu od 0 do 359,99 stopnia. Aby uzyskać dostęp do wartości zawiniętego nagłówka, użyj polecenia
heading.
// Turn, then show the current rotation
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.rotation(degrees));
setHeading#
Kierunek to kierunek, w którym skierowany jest czujnik, mierzony w stopniach od 0 do 359,99. Ta funkcja zmienia aktualny kierunek czujnika bezwładnościowego na nową wartość.
Na przykład, jeśli czujnik obrócił się w prawo, ustawienie kierunku na 0 stopni spowoduje, że ta pozycja skierowana w prawo stanie się nowym 0 stopniem. Wtedy czujnik może śledzić inne kierunki na podstawie tego nowego kierunku.
Available Functionsvoid setHeading( double value, rotationUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Wartość kierunku (w stopniach) do ustawienia dla czujnika. Może to być wartość z zakresu od 0 do 359,99. |
|
|
Jednostka nagłówka:
|
Ta funkcja nie zwraca wartości.
Examples// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);
setRotation#
Obrót to wartość, o jaką obrócił się czujnik, mierzona w stopniach. W przeciwieństwie do kierunku, obrót może wzrosnąć powyżej 359,99 stopnia lub spaść poniżej 0 stopni. Na początku projektu wartość obrotu jest ustawiona na 0 stopni. Ta funkcja zmienia aktualny obrót czujnika bezwładnościowego na nową wartość.
Na przykład, jeśli czujnik wykonał dwa pełne obroty w prawo, jego wartość obrotu wyniesie 720 stopni. Ustawienie obrotu na 0 stopni zresetuje ten obrót z 720 do 0 stopni. Wtedy czujnik będzie mógł śledzić obroty na podstawie tej nowej wartości.
Available Functionsvoid setRotation( double value, rotationUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Wartość obrotu (w stopniach), którą należy ustawić dla czujnika. Może to być liczba całkowita lub dziesiętna. |
|
|
Jednostka obrotu:
|
Ta funkcja nie zwraca wartości.
Examples// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);
calibrate#
Kalibruje czujnik bezwładnościowy.
Kalibracja pomaga czujnikowi prawidłowo mierzyć zakręty. Podczas kalibracji należy trzymać czujnik nieruchomo. Jeśli czujnik porusza się podczas kalibracji, wartości kierunku, obrotu, prędkości żyroskopu i orientacji mogą być niepoprawne.
Available Functionsvoid calibrate( );
Ta funkcja nie przyjmuje żadnych parametrów.
Return ValuesTa funkcja nie zwraca wartości.
NotesPodczas kalibracji czujnik powinien pozostać nieruchomy.
Użyj
isCalibrating, aby określić, kiedy kalibracja została ukończona.
resetHeading#
Resetuje aktualny kierunek czujnika bezwładnościowego do 0 stopni.
Po użyciu tej funkcji aktualny kierunek czujnika staje się nowym kursem 0 stopni.
Available Functionsvoid resetHeading();
Funkcja ta nie przyjmuje żadnych parametrów.
Return ValuesTa funkcja nie zwraca wartości.
resetRotation#
Resetuje aktualny obrót czujnika bezwładnościowego do 0 stopni.
Po użyciu tej funkcji czujnik śledzi przyszłe obroty od nowej wartości obrotu 0 stopni.
Available Functionsvoid resetRotation();
Funkcja ta nie przyjmuje żadnych parametrów.
Return ValuesTa funkcja nie zwraca wartości.
isCalibrating#
Zwraca informację, czy czujnik bezwładnościowy jest obecnie kalibrowany.
Available Functionsbool isCalibrating();
Funkcja ta nie przyjmuje żadnych parametrów.
Return ValuesZwraca wartość logiczną wskazującą, czy czujnik bezwładnościowy jest kalibrowany:
-
true— The sensor is currently calibrating. -
false— The sensor is not currently calibrating.
changed#
Rejestruje funkcję wywołania zwrotnego, która jest uruchamiana, gdy zmienia się wartość nagłówka czujnika bezwładnościowego.
Available Functionsvoid changed( void (* callback)(void) );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Wskaźnik do funkcji, która zostanie wywołana po zmianie wartości nagłówka. Funkcja nie może przyjmować żadnych parametrów i zwracać |
Ta funkcja nie zwraca wartości.
ExamplesZdefiniuj funkcję wywołania zwrotnego (poza
int main())// Called when the inertial sensor's heading value changes void onHeadingChanged() { Brain.Screen.clearScreen(); Brain.Screen.setCursor(1, 1); Brain.Screen.print("Heading: %.2f", myInertial.heading()); }Zarejestruj wywołanie zwrotne wewnątrz
int main()/* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ int main() { // Turn the robot by hand briefly // to change the robot's heading myInertial.changed(onHeadingChanged); }
installed#
Zwraca informację, czy czujnik bezwładnościowy jest zainstalowany i podłączony.
Available Functionsbool installed();
Funkcja ta nie przyjmuje żadnych parametrów.
Return ValuesZwraca wartość logiczną wskazującą, czy czujnik bezwładnościowy jest zainstalowany i podłączony:
-
true— The sensor is connected and responding. -
false— The sensor is not connected or not detected.
acceleration#
Przyspieszenie to szybkość, z jaką czujnik przyspiesza lub zwalnia. Ta funkcja zwraca przyspieszenie czujnika bezwładnościowego na wybranej osi, od -4,0 G do 4,0 G.
G to jednostka miary przyspieszenia. 1 G to przyspieszenie odczuwane przez gracza siedzącego nieruchomo. Wartość ta może być dodatnia lub ujemna w zależności od kierunku przyspieszenia na wybranej osi.
double acceleration( axisType axis );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Oś pomiaru przyspieszenia na:
|
Zwraca wartość double oznaczające przyspieszenie wzdłuż określonej osi w G (jednostkach grawitacji).
Wartości przyspieszenia podano w jednostkach
G.
gyroRate#
Prędkość żyroskopu określa prędkość obrotu czujnika bezwładnościowego. Ta funkcja zwraca aktualną prędkość obrotu czujnika bezwładnościowego na wybranej osi.
Wartość może być dodatnia lub ujemna w zależności od kierunku obrotu czujnika wokół danej osi.
Available Functionsdouble gyroRate( axisType axis, velocityUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Oś, z której ma zostać zwrócona prędkość żyroskopu:
|
|
|
Jednostka prędkości żyroskopu:
|
Zwraca wartość double , co oznacza aktualną prędkość obrotu wzdłuż określonej osi w wybranych jednostkach.
// Display the rate of change of rotation while turning in dps
Drivetrain.turn(right);
wait(1, seconds);
Brain.Screen.print(myInertial.gyroRate(zaxis, dps));
Drivetrain.stop();
orientation#
Orientacja to aktualny kąt czujnika inercyjnego względem wybranej osi. Ta funkcja zwraca orientację czujnika inercyjnego w zakresie od -180,00 do 180,00 stopni.
Wybrana oś x, y lub z odpowiada jednej z osi orientacji czujnika.
Available Functionsdouble orientation(
axisType axis,
rotationUnits units );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Oś, dla której zwracana jest orientacja:
|
|
|
Jednostka obrotu:
|
Zwraca wartość double reprezentującą wybrany kąt orientacji w określonych jednostkach.
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1,1);
// Show the Inertial Sensor's orientation value
// for roll in degrees
double orient = myInertial.orientation(xaxis, deg);
Brain.Screen.print("%f", orient);
wait(0.1, seconds);
}
collision#
Rejestruje funkcję wywołania zwrotnego, która jest uruchamiana, gdy czujnik bezwładnościowy wykryje nagłe uderzenie lub kolizję.
Available Functionsvoid collision( void (* callback)(axisType, double, double, double) );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Wskaźnik do funkcji, która zostanie wywołana po wykryciu kolizji. Funkcja wywołania zwrotnego musi akceptować następujące parametry:
void. |
Ta funkcja nie zwraca wartości.
ExamplesZdefiniuj funkcję wywołania zwrotnego (poza
int main())// Called when the Inertial Sensor detects a collision void onCollision(axisType axis, double x, double y, double z) { Brain.Screen.print("Collision detected!"); }Zarejestruj wywołanie zwrotne wewnątrz
int main()/* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ int main() { // Firmly move the robot by hand briefly to simulate // a collision and call the onCollision function myInertial.collision(onCollision); }
setTurnType#
Zestawy, których kierunek obrotu zwraca wartości dodatnie.
Available Functionsvoid setTurnType( turnType dir );
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Kierunek, który zwraca wartości dodatnie:
|
Ta funkcja nie zwraca wartości.
NotesTo ustawienie ma wpływ na sposób, w jaki
headingirotationraportują wartości dodatnie i ujemne.Wywołanie tej funkcji powoduje nadpisanie wartości
dirokreślonej podczas konstruowania obiektuinertial.
getTurnType#
Zwroty, które zmieniają kierunek obrotu, dają wartości dodatnie.
Available FunctionsturnType getTurnType();
Funkcja ta nie przyjmuje żadnych parametrów.
Return ValuesZwraca typ turnType wskazujący, który kierunek generuje wartości dodatnie:
-
right— Clockwise rotation returns positive values. -
left— Counterclockwise rotation returns positive values.
Wartość ta jest ustawiana podczas konstruowania obiektu
inertiallub przez wywołaniesetTurnType.