Trägheitssensor#

Einführung#

Die Trägheitsklasse inertial an einen Smart Port angeschlossenen Trägheitssensor verwenden.

Ein Inertialsensor misst die Bewegung und Drehung des Roboters. Das Gyroskop erfasst Drehungen wie Richtung, Rotation, Kreiselrate und Orientierung. Der Beschleunigungsmesser misst Bewegungsänderungen wie Beschleunigung oder Verlangsamung entlang der x-, y- und z-Achse.

Klassenkonstruktoren#

inertial(
    int32_t  index,
    turnType dir = turnType::right );

Klassendestruktor#

Zerstört das Trägheitsobjekt inertial und gibt zugehörige Ressourcen frei.

~inertial();

Parameter#

Parameter

Typ

Beschreibung

index

int32_t

Optional. Der Smart Port, an den ein externer Inertialsensor angeschlossen ist, wird als PORTxangegeben, wobei x die Portnummer ist (z. B. PORT1). Dieser Parameter darf nicht angegeben werden, wenn der im Brain integrierte Inertialsensor verwendet wird.

dir

turnType

Optional. Die Richtung, die positive Werte liefert:

  • right (Standard) – Rechtskurven liefern positive Werte.
  • left – Linkskurven liefern positive Werte.

Beispiele#

// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();

// Use an external Inertial Sensor connected to Port 1.
inertial Inertial1 = inertial(PORT1);

Mitgliedsfunktionen#

Die Klasse inertial umfasst die folgenden Memberfunktionen:

  • heading — Gibt die Richtung zurück, in die der Sensor zeigt.

  • rotation — Gibt zurück, wie weit sich der Sensor gedreht hat.

  • setHeading — Setzt die aktuelle Richtung des Sensors auf einen neuen Richtungswert.

  • setRotation — Setzt die aktuelle Rotation des Sensors auf einen neuen Rotationswert.

  • calibrate — Kalibriert den Inertialsensor.

  • resetHeading — Setzt die aktuelle Ausrichtung des Sensors auf 0 Grad zurück.

  • resetRotation — Setzt die aktuelle Drehung des Sensors auf 0 Grad zurück.

  • isCalibrating — Gibt zurück, ob der Inertialsensor gerade kalibriert wird.

  • changed — Registriert eine Funktion, die aufgerufen werden soll, wenn sich die Überschrift ändert.

  • installed — Gibt zurück, ob der Inertialsensor installiert ist.

  • acceleration — Gibt zurück, wie schnell der Sensor auf der ausgewählten Achse beschleunigt oder abbremst.

  • gyroRate — Gibt zurück, wie schnell sich der Sensor um die ausgewählte Achse dreht.

  • orientation — Gibt den Roll-, Nick- oder Gierwinkel des Inertialsensors zurück.

  • collision — Registriert eine Funktion, die ausgeführt werden soll, wenn eine Kollision erkannt wird.

  • setTurnType — Legt fest, welche Drehrichtung positive Werte zurückgibt.

  • getTurnType — Gibt zurück, welche Drehrichtung positive Werte erzeugt.

Bevor inertial Memberfunktionen aufgerufen werden können, muss eine inertial -Instanz erstellt werden, wie unten gezeigt:

/* 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#

Gibt die aktuelle Ausrichtung des Inertialsensors zurück.

Die Richtung, in die der Sensor zeigt, wird in Grad von 0 bis 359,99 gemessen. Dreht sich der Sensor über 359,99 Grad hinaus, springt die Richtung wieder auf 0 Grad zurück.

Available Functions
double heading( rotationUnits units = degrees );

Parameters

Parameter

Typ

Beschreibung

units

rotationUnits

Die Kurseinheit:

  • deg / degrees (Standard) — Grad
  • turns / rev — Umdrehungen

Return Values

Gibt einen Wert vom double zurück, der die aktuelle Richtung des Sensors in den angegebenen Einheiten darstellt.

Notes
  • Der Kurswert wird zwischen 0 und 359,99 Grad umgebrochen. Verwenden Sie rotation, um auf den kontinuierlichen Rotationswert zuzugreifen.

Examples
// Turn, then show the current heading
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.heading(degrees));

rotation#

Gibt die aktuelle Rotation des Inertialsensors zurück.

Die Rotation gibt an, um welchen Grad sich der Sensor gedreht hat. Im Gegensatz zur Kursrichtung kann die Rotation über 359,99 Grad hinausgehen oder unter 0 Grad fallen. Beispielsweise entspricht eine zweifache Drehung nach rechts einer Rotation von 720 Grad. Eine volle Drehung nach links von 0 Grad entspricht einer Rotation von -360 Grad.

Available Functions
double rotation( rotationUnits units = degrees );

Parameters

Parameter

Typ

Beschreibung

units

rotationUnits

Die Rotationseinheit:

  • deg / degrees (Standard) — Grad
  • turns / rev — Umdrehungen

Return Values

Gibt einen Wert vom double zurück, der die aktuelle Rotation in den angegebenen Einheiten darstellt.

Notes
  • Der Rotationswert ist stetig und springt nicht zwischen 0 und 359,99 Grad. Verwenden Sie heading, um auf den Wert des umgebrochenen Kurses zuzugreifen.

Examples
// Turn, then show the current rotation
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.rotation(degrees));

setHeading#

Die Richtung, in die der Sensor zeigt, wird in Grad von 0 bis 359,99 gemessen. Diese Funktion ändert die aktuelle Richtung des Inertialsensors auf einen neuen Richtungswert.

Wenn sich der Sensor beispielsweise nach rechts gedreht hat, wird durch Einstellen der Ausrichtung auf 0 Grad diese Ausrichtung nach rechts zum neuen 0-Grad-Wert. Anschließend kann der Sensor basierend auf dieser neuen Richtung andere Ausrichtungen verfolgen.

Available Functions
void setHeading( double value, rotationUnits units );

Parameters

Parameter

Typ

Beschreibung

value

double

Der für den Sensor einzustellende Kurswert in Grad. Dieser Wert kann zwischen 0 und 359,99 liegen.

units

rotationUnits

Die Kurseinheit:

  • deg / degrees — Grad
  • turns / rev — Umdrehungen

Return Values

Diese Funktion gibt keinen Wert zurück.

Examples
// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);

setRotation#

Die Rotation gibt an, um welchen Winkel sich der Sensor gedreht hat, gemessen in Grad. Im Gegensatz zur Ausrichtung kann die Rotation über 359,99 Grad steigen oder unter 0 Grad fallen. Zu Beginn eines Projekts ist der Rotationswert auf 0 Grad eingestellt. Diese Funktion ändert die aktuelle Rotation des Inertialsensors auf einen neuen Wert.

Hat der Sensor beispielsweise zwei volle Umdrehungen nach rechts ausgeführt, beträgt sein Rotationswert 720 Grad. Durch Setzen der Rotation auf 0 Grad wird dieser Wert von 720 auf 0 Grad zurückgesetzt. Anschließend kann der Sensor Rotationen basierend auf diesem neuen Wert erfassen.

Available Functions
void setRotation( double value, rotationUnits units );

Parameters

Parameter

Typ

Beschreibung

value

double

Der für den Sensor einzustellende Rotationswert in Grad. Dies kann eine ganze Zahl oder eine Dezimalzahl sein.

units

rotationUnits

Die Rotationseinheit:

  • deg / degrees — Grad
  • turns / rev — Umdrehungen

Return Values

Diese Funktion gibt keinen Wert zurück.

Examples
// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);

calibrate#

Kalibriert den Trägheitssensor.

Die Kalibrierung hilft dem Sensor, Drehungen korrekt zu messen. Halten Sie den Sensor während der Kalibrierung ruhig. Bewegt sich der Sensor während der Kalibrierung, werden Kurs, Rotation, Kreiselrate und Orientierung möglicherweise nicht korrekt gemessen.

Available Functions
void calibrate( );

Parameters

Diese Funktion akzeptiert keine Parameter.

Return Values

Diese Funktion gibt keinen Wert zurück.

Notes
  • Der Sensor sollte während der Kalibrierung unbeweglich bleiben.

  • Verwenden Sie isCalibrating, um festzustellen, wann die Kalibrierung abgeschlossen ist.

resetHeading#

Setzt die aktuelle Ausrichtung des Trägheitssensors auf 0 Grad zurück.

Nach Anwendung dieser Funktion wird die aktuelle Richtung des Sensors zur neuen 0-Grad-Richtung.

Available Functions
void resetHeading();

Parameters

Diese Funktion benötigt keine Parameter.

Return Values

Diese Funktion gibt keinen Wert zurück.

resetRotation#

Setzt die aktuelle Drehung des Inertialsensors auf 0 Grad zurück.

Nach der Verwendung dieser Funktion verfolgt der Sensor zukünftige Drehungen vom neuen Drehwert von 0 Grad aus.

Available Functions
void resetRotation();

Parameters

Diese Funktion benötigt keine Parameter.

Return Values

Diese Funktion gibt keinen Wert zurück.

isCalibrating#

Gibt zurück, ob der Inertialsensor gerade kalibriert wird.

Available Functions
bool isCalibrating();

Parameters

Diese Funktion benötigt keine Parameter.

Return Values

Gibt einen booleschen Wert zurück, der angibt, ob der Inertialsensor kalibriert wird:

  • true — The sensor is currently calibrating.
  • false — The sensor is not currently calibrating.

changed#

Registriert eine Rückruffunktion, die ausgeführt wird, wenn sich der Kurswert des Inertialsensors ändert.

Available Functions
void changed( void (* callback)(void) );

Parameters

Parameter

Typ

Beschreibung

callback

void (*)(void)

Ein Zeiger auf eine Funktion, die aufgerufen wird, wenn sich der Wert der Überschrift ändert. Die Funktion darf keine Parameter annehmen und muss void zurückgeben.

Return Values

Diese Funktion gibt keinen Wert zurück.

Examples

Definiere die Callback-Funktion (außerhalb von 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());
}

Registriere den Callback innerhalb von 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#

Gibt zurück, ob der Inertialsensor installiert und angeschlossen ist.

Available Functions
bool installed();

Parameters

Diese Funktion benötigt keine Parameter.

Return Values

Gibt einen booleschen Wert zurück, der angibt, ob der Inertialsensor installiert und angeschlossen ist:

  • true — The sensor is connected and responding.
  • false — The sensor is not connected or not detected.

acceleration#

Die Beschleunigung gibt an, wie schnell der Sensor beschleunigt oder abbremst. Diese Funktion liefert die Beschleunigung des Inertialsensors auf der ausgewählten Achse im Bereich von -4,0 G bis 4,0 G.

G G entspricht etwa der Beschleunigung, die man im Ruhezustand durch die Schwerkraft spürt. Der Wert kann positiv oder negativ sein, je nach Richtung der Beschleunigung auf der gewählten Achse.

Available Functions
double acceleration( axisType axis );

Parameters

Parameter

Typ

Beschreibung

axis

axisType

Die Achsen zur Messung der Beschleunigung:

  • xaxis
  • yaxis
  • zaxis

Return Values

Gibt einen Wert vom Typ double zurück, der die Beschleunigung entlang der angegebenen Achse in G (Gravitationseinheiten) darstellt.

Notes
  • Die Beschleunigungswerte werden in Einheiten von G angegeben.

gyroRate#

Die Kreiselrate gibt an, wie schnell sich der Inertialsensor dreht. Diese Funktion liefert die aktuelle Rotationsgeschwindigkeit des Inertialsensors um die ausgewählte Achse.

Der Wert kann positiv oder negativ sein, je nachdem, in welche Richtung sich der Sensor um diese Achse dreht.

Available Functions
double gyroRate( axisType axis, velocityUnits units );

Parameters

Parameter

Typ

Beschreibung

axis

axisType

Die Achsen, von denen die Gyro-Rate zurückgegeben wird:

  • xaxis
  • yaxis
  • zaxis

units

velocityUnits

Die Kreiselrateneinheit:

  • dps — Grad pro Sekunde
  • rpm — Umdrehungen pro Minute

Return Values

Gibt einen Wert vom Typ double zurück, der die aktuelle Rotationsgeschwindigkeit entlang der angegebenen Achse in den ausgewählten Einheiten darstellt.

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#

Die Orientierung gibt den aktuellen Winkel des Inertialsensors auf einer ausgewählten Achse an. Diese Funktion liefert die Orientierung des Inertialsensors im Bereich von -180,00 bis 180,00 Grad.

Die ausgewählte x-, y- oder z-Achse entspricht einer der Orientierungsachsen des Sensors.

Available Functions
double orientation(
  axisType      axis,
  rotationUnits units );

Parameters

Parameter

Typ

Beschreibung

axis

axisType

Die Achse, für die die Orientierung zurückgegeben wird:

  • xaxis
  • yaxis
  • zaxis

units

rotationUnits

Die Rotationseinheit:

  • deg / degrees — Grad
  • turns / rev — Umdrehungen

Return Values

Gibt einen Wert vom double zurück, der den ausgewählten Orientierungswinkel in den angegebenen Einheiten darstellt.

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#

Registriert eine Rückruffunktion, die ausgeführt wird, wenn der Inertialsensor einen plötzlichen Aufprall oder eine Kollision erkennt.

Available Functions
void collision( void (* callback)(axisType, double, double, double) );

Parameters

Parameter

Typ

Beschreibung

callback

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

Ein Zeiger auf eine Funktion, die bei Erkennung einer Kollision aufgerufen wird. Die Callback-Funktion muss folgende Parameter akzeptieren:

  • axisType — Die Achse, auf der die Kollision erkannt wurde.
  • Beschleunigungswerte zum Zeitpunkt des Aufpralls, in der Reihenfolge:
    • double — Beschleunigung entlang der x-Achse (in G).
    • double — Beschleunigung entlang der y-Achse (in G).
    • double — Beschleunigung entlang der z-Achse (in G).
Die Funktion muss void zurückgeben.

Return Values

Diese Funktion gibt keinen Wert zurück.

Examples

Definiere die Callback-Funktion (außerhalb von 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!");
}

Registriere den Callback innerhalb von 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#

Mengen, die die Drehrichtung bestimmen, liefern positive Werte.

Available Functions
void setTurnType( turnType dir );

Parameters

Parameter

Typ

Beschreibung

dir

turnType

Die Richtung, die positive Werte liefert:

  • right
  • left

Return Values

Diese Funktion gibt keinen Wert zurück.

Notes

getTurnType#

Rückgabewerte, die eine Richtungsänderung bewirken, ergeben positive Werte.

Available Functions
turnType getTurnType();

Parameters

Diese Funktion benötigt keine Parameter.

Return Values

Gibt einen turnType zurück, der angibt, welche Richtung positive Werte erzeugt:

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