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

index

int32_t

Opcjonalnie. Port inteligentny, do którego podłączony jest zewnętrzny czujnik bezwładnościowy, zapisany jako PORTx, gdzie x to numer portu (na przykład PORT1). Nie należy uwzględniać tego parametru w przypadku korzystania z wbudowanego czujnika bezwładnościowego w Brain.

dir

turnType

Opcjonalnie. Kierunek, który zwraca wartości dodatnie:

  • right (domyślnie) — Skręty w prawo zwracają wartości dodatnie.
  • left — Skręty w lewo zwracają 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.

  • zainstalowanoinstalled — 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 Functions
double heading( rotationUnits units = degrees );

Parameters

Parametr

Typ

Opis

units

rotationUnits

Jednostka nagłówka:

  • deg / degrees (domyślnie) — stopnie
  • turns / rev — obroty

Return Values

Zwraca wartość double , co oznacza bieżący kierunek czujnika w określonych jednostkach.

Notes
  • 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.

Examples
// 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 Functions
double rotation( rotationUnits units = degrees );

Parameters

Parametr

Typ

Opis

units

rotationUnits

Jednostka obrotu:

  • deg / degrees (domyślnie) — stopnie
  • turns / rev — obrotów

Return Values

Zwraca wartość double reprezentującą bieżący obrót w określonych jednostkach.

Notes
  • 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.

Examples
// 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 Functions
void setHeading( double value, rotationUnits units );

Parameters

Parametr

Typ

Opis

value

double

Wartość kierunku (w stopniach) do ustawienia dla czujnika. Może to być wartość z zakresu od 0 do 359,99.

units

rotationUnits

Jednostka nagłówka:

  • deg / degrees — stopnie
  • turns / rev — obroty

Return Values

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 Functions
void setRotation( double value, rotationUnits units );

Parameters

Parametr

Typ

Opis

value

double

Wartość obrotu (w stopniach), którą należy ustawić dla czujnika. Może to być liczba całkowita lub dziesiętna.

units

rotationUnits

Jednostka obrotu:

  • deg / degrees — stopnie
  • turns / rev — obroty

Return Values

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 Functions
void calibrate( );

Parameters

Ta funkcja nie przyjmuje żadnych parametrów.

Return Values

Ta funkcja nie zwraca wartości.

Notes
  • Podczas 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 Functions
void resetHeading();

Parameters

Funkcja ta nie przyjmuje żadnych parametrów.

Return Values

Ta 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 Functions
void resetRotation();

Parameters

Funkcja ta nie przyjmuje żadnych parametrów.

Return Values

Ta funkcja nie zwraca wartości.

isCalibrating#

Zwraca informację, czy czujnik bezwładnościowy jest obecnie kalibrowany.

Available Functions
bool isCalibrating();

Parameters

Funkcja ta nie przyjmuje żadnych parametrów.

Return Values

Zwraca 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 Functions
void changed( void (* callback)(void) );

Parameters

Parametr

Typ

Opis

callback

void (*)(void)

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ć void.

Return Values

Ta funkcja nie zwraca wartości.

Examples

Zdefiniuj 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 Functions
bool installed();

Parameters

Funkcja ta nie przyjmuje żadnych parametrów.

Return Values

Zwraca 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.

Available Functions
double acceleration( axisType axis );

Parameters

Parametr

Typ

Opis

axis

axisType

Oś pomiaru przyspieszenia na:

  • xaxis
  • yaxis
  • zaxis

Return Values

Zwraca wartość double oznaczające przyspieszenie wzdłuż określonej osi w G (jednostkach grawitacji).

Notes
  • 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 Functions
double gyroRate( axisType axis, velocityUnits units );

Parameters

Parametr

Typ

Opis

axis

axisType

Oś, z której ma zostać zwrócona prędkość żyroskopu:

  • xaxis
  • yaxis
  • zaxis

units

velocityUnits

Jednostka prędkości żyroskopu:

  • dps — stopnie na sekundę
  • rpm — obroty na minutę

Return Values

Zwraca wartość double , co oznacza aktualną prędkość obrotu wzdłuż określonej osi w wybranych jednostkach.

Examples
// 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 Functions
double orientation(
  axisType      axis,
  rotationUnits units );

Parameters

Parametr

Typ

Opis

axis

axisType

Oś, dla której zwracana jest orientacja:

  • xaxis
  • yaxis
  • zaxis

units

rotationUnits

Jednostka obrotu:

  • deg / degrees — stopnie
  • turns / rev — obroty

Return Values

Zwraca wartość double reprezentującą wybrany kąt orientacji w określonych jednostkach.

Examples
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 Functions
void collision( void (* callback)(axisType, double, double, double) );

Parameters

Parametr

Typ

Opis

callback

void (*)(axisType, double, double, double)

Wskaźnik do funkcji, która zostanie wywołana po wykryciu kolizji. Funkcja wywołania zwrotnego musi akceptować następujące parametry:

  • axisType — oś, na której wykryto kolizję.
  • Wartości przyspieszenia w momencie uderzenia, w kolejności:
    • double — przyspieszenie wzdłuż osi x (w przestrzeni G).
    • double — przyspieszenie wzdłuż osi y (w przestrzeni G).
    • double — przyspieszenie wzdłuż osi z (w przestrzeni G).
Funkcja musi zwracać void.

Return Values

Ta funkcja nie zwraca wartości.

Examples

Zdefiniuj 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 Functions
void setTurnType( turnType dir );

Parameters

Parametr

Typ

Opis

dir

turnType

Kierunek, który zwraca wartości dodatnie:

  • right
  • left

Return Values

Ta funkcja nie zwraca wartości.

Notes

getTurnType#

Zwroty, które zmieniają kierunek obrotu, dają wartości dodatnie.

Available Functions
turnType getTurnType();

Parameters

Funkcja ta nie przyjmuje żadnych parametrów.

Return Values

Zwraca typ turnType wskazujący, który kierunek generuje wartości dodatnie:

  • right — Clockwise rotation returns positive values.
  • left — Counterclockwise rotation returns positive values.
Notes