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 |
|---|---|---|
|
|
Optional. Der Smart Port, an den ein externer Inertialsensor angeschlossen ist, wird als |
|
|
Optional. Die Richtung, die positive Werte liefert:
|
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 Functionsdouble heading( rotationUnits units = degrees );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Die Kurseinheit:
|
Gibt einen Wert vom double zurück, der die aktuelle Richtung des Sensors in den angegebenen Einheiten darstellt.
Der Kurswert wird zwischen 0 und 359,99 Grad umgebrochen. Verwenden Sie
rotation, um auf den kontinuierlichen Rotationswert zuzugreifen.
// 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 Functionsdouble rotation( rotationUnits units = degrees );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Die Rotationseinheit:
|
Gibt einen Wert vom double zurück, der die aktuelle Rotation in den angegebenen Einheiten darstellt.
Der Rotationswert ist stetig und springt nicht zwischen 0 und 359,99 Grad. Verwenden Sie
heading, um auf den Wert des umgebrochenen Kurses zuzugreifen.
// 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 Functionsvoid setHeading( double value, rotationUnits units );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Der für den Sensor einzustellende Kurswert in Grad. Dieser Wert kann zwischen 0 und 359,99 liegen. |
|
|
Die Kurseinheit:
|
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 Functionsvoid setRotation( double value, rotationUnits units );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Der für den Sensor einzustellende Rotationswert in Grad. Dies kann eine ganze Zahl oder eine Dezimalzahl sein. |
|
|
Die Rotationseinheit:
|
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 Functionsvoid calibrate( );
Diese Funktion akzeptiert keine Parameter.
Return ValuesDiese Funktion gibt keinen Wert zurück.
NotesDer 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 Functionsvoid resetHeading();
Diese Funktion benötigt keine Parameter.
Return ValuesDiese 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 Functionsvoid resetRotation();
Diese Funktion benötigt keine Parameter.
Return ValuesDiese Funktion gibt keinen Wert zurück.
isCalibrating#
Gibt zurück, ob der Inertialsensor gerade kalibriert wird.
Available Functionsbool isCalibrating();
Diese Funktion benötigt keine Parameter.
Return ValuesGibt 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 Functionsvoid changed( void (* callback)(void) );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Ein Zeiger auf eine Funktion, die aufgerufen wird, wenn sich der Wert der Überschrift ändert. Die Funktion darf keine Parameter annehmen und muss |
Diese Funktion gibt keinen Wert zurück.
ExamplesDefiniere 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 Functionsbool installed();
Diese Funktion benötigt keine Parameter.
Return ValuesGibt 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.
double acceleration( axisType axis );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Die Achsen zur Messung der Beschleunigung:
|
Gibt einen Wert vom Typ double zurück, der die Beschleunigung entlang der angegebenen Achse in G (Gravitationseinheiten) darstellt.
Die Beschleunigungswerte werden in Einheiten von
Gangegeben.
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 Functionsdouble gyroRate( axisType axis, velocityUnits units );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Die Achsen, von denen die Gyro-Rate zurückgegeben wird:
|
|
|
Die Kreiselrateneinheit:
|
Gibt einen Wert vom Typ double zurück, der die aktuelle Rotationsgeschwindigkeit entlang der angegebenen Achse in den ausgewählten Einheiten darstellt.
// 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 Functionsdouble orientation(
axisType axis,
rotationUnits units );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Die Achse, für die die Orientierung zurückgegeben wird:
|
|
|
Die Rotationseinheit:
|
Gibt einen Wert vom double zurück, der den ausgewählten Orientierungswinkel in den angegebenen Einheiten darstellt.
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 Functionsvoid collision( void (* callback)(axisType, double, double, double) );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Ein Zeiger auf eine Funktion, die bei Erkennung einer Kollision aufgerufen wird. Die Callback-Funktion muss folgende Parameter akzeptieren:
void zurückgeben. |
Diese Funktion gibt keinen Wert zurück.
ExamplesDefiniere 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 Functionsvoid setTurnType( turnType dir );
Parameter |
Typ |
Beschreibung |
|---|---|---|
|
|
Die Richtung, die positive Werte liefert:
|
Diese Funktion gibt keinen Wert zurück.
NotesDiese Einstellung beeinflusst, wie
headingundrotationpositive und negative Werte ausgeben.Calling this function overrides the
dirvalue specified when constructing theinertialobject.
getTurnType#
Rückgabewerte, die eine Richtungsänderung bewirken, ergeben positive Werte.
Available FunctionsturnType getTurnType();
Diese Funktion benötigt keine Parameter.
Return ValuesGibt einen turnType zurück, der angibt, welche Richtung positive Werte erzeugt:
-
right— Clockwise rotation returns positive values. -
left— Counterclockwise rotation returns positive values.
Dieser Wert wird während der Konstruktion des
inertialoder durch Aufruf vonsetTurnTypefestgelegt.