Inertiële sensor#
Invoering#
De inertial wordt gebruikt om gegevens van een EXP-inertiële sensor te beheren en te benaderen. EXP kan de ingebouwde inertiële sensor van de Brain gebruiken of een externe inertiële sensor die is aangesloten op een Smart Port.
Een traagheidssensor meet hoe de robot beweegt en draait. De gyroscoop meet draaibewegingen, zoals richting, rotatie, gyroscoopsnelheid en oriëntatie. De accelerometer meet veranderingen in beweging, zoals versnellen of vertragen langs de x-, y- en z-assen.
Klasseconstructors#
inertial(
int32_t index,
turnType dir = turnType::right );
Klasse-destructor#
Vernietigt het inertial object en geeft de bijbehorende resources vrij.
~inertial();
Parameters#
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
Optioneel. De Smart Port waarop een externe traagheidssensor is aangesloten, weergegeven als |
|
|
Optioneel. De richting die positieve waarden oplevert:
|
Voorbeelden#
// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();
// Use an external Inertial Sensor connected to Port 1.
inertial Inertial1 = inertial(PORT1);
Lidfuncties#
De klasse inertial omvat de volgende lidfuncties:
heading— Geeft de richting aan waarin de sensor wijst.rotation— Geeft aan hoeveel de sensor is gedraaid.setHeading— Stelt de huidige richting van de sensor in op een nieuwe richtingwaarde.setRotation— Stelt de huidige rotatie van de sensor in op een nieuwe rotatiewaarde.calibrate— Kalibreert de traagheidssensor.resetHeading— Zet de huidige koers van de sensor terug naar 0 graden.resetRotation— Zet de huidige rotatie van de sensor terug naar 0 graden.isCalibrating— Geeft aan of de traagheidssensor momenteel aan het kalibreren is.changed— Registreert een functie die moet worden aangeroepen wanneer de koptekst verandert.installed— Geeft aan of de traagheidssensor is geïnstalleerd.acceleration— Geeft aan hoe snel de sensor versnelt of vertraagt op de geselecteerde as.gyroRate— Geeft aan hoe snel de sensor roteert om de geselecteerde as.orientation— Geeft de rol-, stamp- of gierhoek van de traagheidssensor terug.collision— Registreert een functie die moet worden uitgevoerd wanneer een botsing wordt gedetecteerd.setTurnType— Stelt in welke draairichting positieve waarden retourneert.getTurnType— Geeft aan welke draairichting positieve waarden oplevert.
Voordat er inertial lidfuncties worden aangeroepen, moet er een inertial instantie worden aangemaakt, zoals hieronder weergegeven:
/* 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#
Geeft de huidige koers van de traagheidssensor weer.
De koers is de richting waarin de sensor wijst, gemeten in graden van 0 tot 359,99. Als de sensor verder draait dan 359,99 graden, springt de koers terug naar 0 graden.
Available Functionsdouble heading( rotationUnits units = degrees );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De kopteksteenheid:
|
Retourneert een double die de huidige richting van de sensor in de opgegeven eenheden weergeeft.
De richtingswaarde ligt tussen 0 en 359,99 graden. Gebruik
rotationom de continue rotatiewaarde te verkrijgen.
// Turn, then show the current heading
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.heading(degrees));
rotation#
Geeft de huidige rotatie van de inertiële sensor weer.
Rotatie geeft aan hoeveel de sensor is gedraaid. In tegenstelling tot de koers, kan de rotatie groter worden dan 359,99 graden of kleiner dan 0 graden. Twee volledige draaien naar rechts levert bijvoorbeeld een rotatie van 720 graden op. Een volledige draai naar links vanaf 0 graden levert een rotatie van -360 graden op.
Available Functionsdouble rotation( rotationUnits units = degrees );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De rotatie-eenheid:
|
Retourneert een double die de huidige rotatie in de opgegeven eenheden weergeeft.
De rotatiewaarde is continu en loopt niet door tussen 0 en 359,99 graden. Gebruik
headingom de doorlopende kopwaarde te verkrijgen.
// Turn, then show the current rotation
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.rotation(degrees));
setHeading#
Een koers is de richting waarin de sensor wijst, gemeten in graden van 0 tot 359,99. Deze functie wijzigt de huidige koers van de inertiële sensor naar een nieuwe koerswaarde.
Als de sensor bijvoorbeeld naar rechts is gedraaid, zorgt het instellen van de koers op 0 graden ervoor dat die naar rechts gerichte positie de nieuwe 0 graden wordt. De sensor kan vervolgens andere koersen volgen op basis van die nieuwe richting.
Available Functionsvoid setHeading( double value, rotationUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De richtingswaarde in graden die voor de sensor moet worden ingesteld. Dit kan een waarde zijn van 0 tot 359,99. |
|
|
De kopeenheid:
|
Deze functie retourneert geen waarde.
Examples// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);
setRotation#
Rotatie geeft aan hoeveel de sensor is gedraaid, gemeten in graden. In tegenstelling tot de richting kan de rotatie oplopen tot meer dan 359,99 graden of afnemen tot minder dan 0 graden. Aan het begin van een project wordt de rotatiewaarde ingesteld op 0 graden. Deze functie wijzigt de huidige rotatie van de inertiële sensor naar een nieuwe waarde.
Als de sensor bijvoorbeeld twee volledige omwentelingen naar rechts heeft gemaakt, is de rotatiewaarde 720 graden. Door de rotatie op 0 graden in te stellen, wordt deze gereset van 720 naar 0 graden. De sensor kan vervolgens rotaties registreren op basis van deze nieuwe waarde.
Available Functionsvoid setRotation( double value, rotationUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De rotatiewaarde in graden die voor de sensor moet worden ingesteld. Dit kan een geheel getal of een decimaal getal zijn. |
|
|
De rotatie-eenheid:
|
Deze functie retourneert geen waarde.
Examples// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);
calibrate#
Kalibreert de inertiële sensor.
Kalibratie zorgt ervoor dat de sensor bochten correct meet. Houd de sensor stil tijdens de kalibratie. Als de sensor beweegt tijdens de kalibratie, kunnen de waarden voor koers, rotatie, gyroscoopsnelheid en oriëntatie onjuist worden gemeten.
Available Functionsvoid calibrate( );
Deze functie accepteert geen parameters.
Return ValuesDeze functie retourneert geen waarde.
NotesDe sensor moet tijdens de kalibratie stil blijven staan.
Gebruik
isCalibratingom te bepalen wanneer de kalibratie is voltooid.
resetHeading#
Zet de huidige koers van de traagheidssensor terug naar 0 graden.
Na gebruik van deze functie wordt de huidige richting van de sensor de nieuwe richting van 0 graden.
Available Functionsvoid resetHeading();
Deze functie accepteert geen parameters.
Return ValuesDeze functie retourneert geen waarde.
resetRotation#
Zet de huidige rotatie van de inertiële sensor terug naar 0 graden.
Nadat deze functie is gebruikt, registreert de sensor toekomstige draaiingen vanaf de nieuwe rotatiewaarde van 0 graden.
Available Functionsvoid resetRotation();
Deze functie accepteert geen parameters.
Return ValuesDeze functie retourneert geen waarde.
isCalibrating#
Geeft aan of de traagheidssensor momenteel aan het kalibreren is.
Available Functionsbool isCalibrating();
Deze functie accepteert geen parameters.
Return ValuesGeeft een Booleaanse waarde terug die aangeeft of de inertiële sensor aan het kalibreren is:
-
true— The sensor is currently calibrating. -
false— The sensor is not currently calibrating.
changed#
Registreert een callbackfunctie die wordt uitgevoerd wanneer de koerswaarde van de traagheidssensor verandert.
Available Functionsvoid changed( void (* callback)(void) );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
Een pointer naar een functie die wordt aangeroepen wanneer de koptekstwaarde verandert. De functie mag geen parameters accepteren en moet |
Deze functie retourneert geen waarde.
ExamplesDefinieer de callbackfunctie (buiten
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()); }Registreer de callback binnen
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#
Geeft aan of de traagheidssensor is geïnstalleerd en aangesloten.
Available Functionsbool installed();
Deze functie accepteert geen parameters.
Return ValuesGeeft een Booleaanse waarde terug die aangeeft of de traagheidssensor is geïnstalleerd en aangesloten:
-
true— The sensor is connected and responding. -
false— The sensor is not connected or not detected.
acceleration#
Acceleratie geeft aan hoe snel de sensor versnelt of vertraagt. Deze functie geeft de acceleratie van de inertiële sensor op de geselecteerde as weer, van -4,0 G tot 4,0 G.
G is een eenheid die gebruikt wordt om versnelling te meten. 1 G staat ongeveer gelijk aan de versnelling die je voelt door de zwaartekracht als je stilzit. De waarde kan positief of negatief zijn, afhankelijk van de richting van de versnelling op de gekozen as.
double acceleration( axisType axis );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De as waarop de versnelling gemeten moet worden:
|
Retourneert een double die de versnelling langs de opgegeven as in G (gravitationele eenheden) weergeeft.
Versnellingswaarden worden weergegeven in eenheden van
G.
gyroRate#
De gyroscoopsnelheid geeft aan hoe snel de inertiële sensor roteert. Deze functie geeft de huidige rotatiesnelheid van de inertiële sensor op de geselecteerde as weer.
De waarde kan positief of negatief zijn, afhankelijk van de draairichting van de sensor op die as.
Available Functionsdouble gyroRate( axisType axis, velocityUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De as van waaruit de gyroscoopsnelheid moet worden geretourneerd:
|
|
|
De gyroscoopsnelheidseenheid:
|
Retourneert een double die de huidige rotatiesnelheid langs de opgegeven as in de geselecteerde eenheden weergeeft.
// 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#
De oriëntatie is de huidige hoek van de inertiële sensor op een geselecteerde as. Deze functie retourneert de oriëntatie van de inertiële sensor, van -180,00 tot 180,00 graden.
De geselecteerde x-, y- of z-as komt overeen met een van de oriëntatieassen van de sensor.
Available Functionsdouble orientation(
axisType axis,
rotationUnits units );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De as waarvoor de oriëntatie wordt geretourneerd:
|
|
|
De rotatie-eenheid:
|
Retourneert een double die de geselecteerde oriëntatiehoek in de opgegeven eenheden weergeeft.
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#
Registreert een callbackfunctie die wordt uitgevoerd wanneer de traagheidssensor een plotselinge impact of botsing detecteert.
Available Functionsvoid collision( void (* callback)(axisType, double, double, double) );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
Een pointer naar een functie die wordt aangeroepen wanneer een botsing wordt gedetecteerd. De callbackfunctie moet de volgende parameters accepteren:
void retourneren. |
Deze functie retourneert geen waarde.
ExamplesDefinieer de callbackfunctie (buiten
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!"); }Registreer de callback binnen
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#
Sets die in de juiste richting draaien, retourneren positieve waarden.
Available Functionsvoid setTurnType( turnType dir );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De richting die positieve waarden teruggeeft:
|
Deze functie retourneert geen waarde.
NotesDeze instelling beïnvloedt hoe
headingenrotationpositieve en negatieve waarden rapporteren.Door deze functie aan te roepen wordt de waarde
diroverschreven die is opgegeven bij het construeren van hetinertialobject.
getTurnType#
Retourneert welke draairichting positieve waarden oplevert.
Available FunctionsturnType getTurnType();
Deze functie accepteert geen parameters.
Return ValuesGeeft een turnType terug, die aangeeft welke richting positieve waarden oplevert:
-
right— Clockwise rotation returns positive values. -
left— Counterclockwise rotation returns positive values.
Deze waarde wordt ingesteld tijdens de constructie van het
inertialobject of doorsetTurnTypeaan te roepen.