Czujnik bezwładnościowy#

Wstęp#

Klasa bezwładności inertial służy do sterowania i dostępu do danych z wbudowanego czujnika bezwładności mózgu IQ (2. generacji). Czujnik ten mierzy ruch i obrót mózgu.

Czujnik bezwładnościowy wykorzystuje do tego celu dwie części. Żyroskop mierzy obroty, 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(
  turnType dir = turnType::right );

Destruktor klasy#

Niszczy obiekt bezwładnościowy inertial i uwalnia powiązane zasoby.

~inertial();

Parametry#

Parametr

Typ

Opis

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#

// Create the inertial instance
inertial myInertial = inertial(
    right);     // dir

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ę wywołania zwrotnego, która jest uruchamiana 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ę wywołania zwrotnego, która jest uruchamiana po wykryciu kolizji.

  • setTurnType — Ustawia kierunek skrętu, dla którego zwracane są dodatnie wartości nagłówka.

  • 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 with the IQ (2nd gen) Brain. Replace the values
as needed. */

// Create the inertial instance
inertial myInertial = inertial();

heading#

Kierunek to kierunek, w którym skierowany jest czujnik, mierzony w stopniach od 0 do 359,99. Ta funkcja zwraca aktualny kierunek czujnika.

Początkowy kurs wynosi 0 stopni. Jeśli czujnik przekroczy 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 obrotu ciągłego, 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#

Ustawia aktualny obrót czujnika bezwładnościowego na określoną wartość.

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 spaść poniżej 0 stopni.

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())

// Display the heading 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()

int main() {
  // Run onHeadingChanged when the Inertial Sensor's heading value changes.
  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 bezwładnościowego względem wybranej osi obrotu. Ta funkcja zwraca aktualną orientację czujnika bezwładnościowego dla określonej osi.

Przechylenie, pochylenie i odchylenie opisują różne sposoby, w jakie czujnik może się przechylać lub obracać.

Available Functions
double orientation(
  orientationType type,
  rotationUnits   units );

Parameters

Parametr

Typ

Opis

type

orientationType

Kąt orientacji do powrotu:

  • pitch
  • roll
  • yaw

units

rotationUnits

Jednostka orientacji:

  • 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(roll, 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())

// Display a message 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()

int main() {
  // Run onCollision when the Inertial Sensor detects a collision.
  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