Tröghets#
Introduktion#
VEX AIM-kodningsroboten har en inbyggd tröghetssensor. Denna sensor mäter hur roboten rör sig och vrider sig.
Tröghetssensorn använder två delar för att göra detta. Gyroskopet mäter svängningar, såsom robotens kurs, rotation, girning, rullning, lutning och svänghastighet. Accelerometern mäter förändringar i rörelse, såsom att öka hastigheten, sakta ner eller att plötsligt stanna under en krock.
Tröghetsmetoderna kan användas för att spåra svängar, mäta acceleration, upptäcka krascher, återställa kurs- eller rotationsvärden och kalibrera sensorn.
Nedan följer en lista över alla metoder:
Orientering — Ta reda på och återställ hur roboten är vänd, vrider sig eller lutar.
get_rotation— Returnerar hur långt roboten har roterat.get_heading— Returnerar den riktning roboten är vänd i, från 0 till 359,99 grader.get_yaw— Returnerar robotens girvinkel.get_roll— Returnerar robotens rullningsvinkel.get_pitch— Returnerar robotens lutningsvinkel.reset_rotation— Återställer robotens aktuella rotation till 0 grader.reset_heading— Återställer robotens aktuella kurs till 0 grader.set_heading— Ställer in robotens aktuella kurs till ett nytt kursvärde.
Krasch — Upptäck kollisioner.
crashed— Registrerar en funktion som ska köras när en krasch upptäcks.set_crash_sensitivity— Anger hur känslig krockdetektering är för stötar.
Rörelse — Mät acceleration och svänghastighet.
get_acceleration— Returnerar hur snabbt roboten ökar eller saktar ner på den valda axeln.get_turn_rate— Returnerar hur snabbt roboten roterar på den valda axeln.
Kalibrering — Hantera sensorkalibrering.
calibrate— Kalibrerar tröghetssensorn.is_calibrating— Returnerar om tröghetssensorn för närvarande kalibrerar.
Orientering#
get_rotation#
Rotation är hur mycket roboten har roterat, mätt i grader. Till skillnad från kurs kan rotationen öka över 359,99 grader eller minska under 0 grader. I början av ett projekt sätts rotationsvärdet till 0 grader. get_rotation returnerar robotens aktuella rotation som ett flyttal.
Om du vrider åt höger ökar rotationen och om du vrider åt vänster minskar den. Om du till exempel gör två hela varv åt höger ger du en rotation på 720 grader. Om du vrider ett helt varv åt vänster från 0 grader ger du en rotation på -360 grader.
Usage:
robot.inertial.get_rotation()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Display the robot's rotation as it rotates
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
wait(50, MSEC)
get_heading#
En kurs är den riktning roboten är vänd i, mätt i grader från 0 till 359,99. get_heading returnerar robotens aktuella kurs som ett flyttal.
Startkursen är 0 grader. Om roboten svänger mer än 359,99 grader, återgår kursen till 0 grader.
Usage:
robot.inertial.get_heading()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Turn right until the heading reaches 90 degrees
robot.turn(RIGHT)
while robot.inertial.get_heading() < 90:
wait(50, MSEC)
robot.stop_all_movement()
# Display the robot's heading as it is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Heading: {robot.inertial.get_heading()} degrees")
wait(50, MSEC)
get_yaw#
Girning beskriver hur roboten vrider sig åt vänster eller höger runt sin vertikala axel. get_yaw returnerar robotens girningsvinkel i intervallet -180,00 till 180,00 grader som ett flyttal.
Bilden nedan använder pilar för att visa riktningen för positiv rotation vid girning.
Usage:
robot.inertial.get_yaw()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Display the robot's yaw angle as it is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_yaw())
wait(50, MSEC)
get_roll#
Roll beskriver roboten som lutar från sida till sida. get_roll returnerar robotens rollvinkel i intervallet -180,00 till 180,00 grader som ett flyttal.
Bilden nedan använder pilar för att visa riktningen för den positiva rotationen för rullen.
Usage:
robot.inertial.get_roll()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Display the robot's roll angle as it is tilted by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_roll())
wait(50, MSEC)
get_pitch#
Pitch beskriver hur roboten lutar framåt eller bakåt. get_pitch returnerar robotens lutningsvinkel i intervallet -90,00 till 90,00 grader som ett flyttal.
Bilden nedan använder pilar för att visa riktningen för positiv rotation för tonhöjd.
Usage:
robot.inertial.get_pitch()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Display the robot's pitch angle as it is tilted by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_pitch())
wait(50, MSEC)
reset_rotation#
reset_rotation återställer robotens aktuella rotation till 0 grader.
Efter att den här metoden har använts spårar roboten framtida svängar från det nya rotationsvärdet på 0 grader.
Usage:
robot.inertial.reset_rotation()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Reset the robot's rotation if it exceeds 180 degrees
while True:
if robot.inertial.get_rotation() >= 180:
robot.inertial.reset_rotation()
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
wait(50, MSEC)
reset_heading#
reset_heading återställer robotens aktuella kurs till 0 grader.
Efter att den här metoden har använts blir robotens nuvarande riktning den nya 0-gradersriktningen.
Usage:
robot.inertial.reset_heading()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Turn the robot around using a new 90 degree heading
robot.turn_to(90)
wait(1, SECONDS)
robot.inertial.reset_heading()
robot.turn_to(90)
set_heading#
En kurs är den riktning roboten är vänd i, mätt i grader från 0 till 359,99. set_heading ändrar robotens nuvarande kurs till ett nytt kursvärde.
Om roboten till exempel har vänt sig åt höger, och om kursen ställs in på 0 grader, blir den högervända positionen den nya 0 grader. Då kan roboten spåra andra kurser baserat på den nya riktningen.
Usage:
robot.inertial.set_heading(heading)
Parametrar |
Beskrivning |
|---|---|
|
Kursvärdet, i grader, som ska ställas in för roboten. Detta kan vara ett värde från 0 till 359,99. |
# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)
Krascha#
crashed#
crashed registrerar en funktion som ska anropas när roboten detekterar en plötslig stöt eller kollision.
Användande:
robot.inertial.crashed(callback, arg)
Parametrar |
Beskrivning |
|---|---|
|
En funktion som tidigare är definierad att köras när en kollision detekteras. |
|
Valfritt. En tupel som innehåller argument som ska skickas till callback-funktionen. Se Använda funktioner med parametrar för mer information. |
# Define what happens when a crash occurs
def crash_detected():
# Stop all movement and indicate a crash occurred
robot.screen.print("Crash detected")
robot.stop_all_movement()
robot.inertial.crashed(crash_detected)
# Drive forward until crash
robot.move_at(0, 100)
set_crash_sensitivity#
set_crash_sensitivity justerar hur mycket plötslig acceleration som behövs för att roboten ska upptäcka en krock.
Usage:
robot.inertial.set_crash_sensitivity(sensitivity)
Parametrar |
Beskrivning |
|---|---|
|
Kraschkänsligheten:
|
def crashed_callback():
robot.stop_all_movement()
robot.sound.play(CRASH)
# system event handlers
robot.inertial.crashed(crashed_callback)
# add 15ms delay to make sure events are registered correctly.
wait(15, MSEC)
# Detect a crash at a slow velocity.
robot.set_move_velocity(35, PERCENT)
robot.inertial.set_crash_sensitivity(HIGH)
robot.move_at(0)
Rörelse#
get_acceleration#
Acceleration är hur snabbt roboten ökar eller saktar ner. get_acceleration returnerar robotens acceleration på den valda axeln, från -4,00 G till 4,00 G, som ett flyttal.
En G är en enhet som används för att mäta acceleration. 1 G motsvarar den acceleration du känner från gravitationen när du sitter stilla.
Värdet kan vara positivt eller negativt beroende på accelerationsriktningen på den valda axeln. I AIM är axelalternativen namngivna efter riktningar på roboten: FORWARD, RIGHTWARDoch DOWNWARD.

Användande:
robot.inertial.get_acceleration(type)
Parametrar |
Beskrivning |
|---|---|
|
Axeln att mäta acceleration på:
|
# Display the acceleration as the robot begins to move
robot.screen.set_cursor(4,1)
sitting_accel = robot.inertial.get_acceleration(RIGHTWARD)
robot.screen.print(f"Resting: {sitting_accel:.2f}")
wait(0.5, SECONDS)
robot.screen.next_row()
robot.move_at(90, 100)
wait(0.1, SECONDS)
robot.screen.print(f"Startup: {robot.inertial.get_acceleration(RIGHTWARD):.2f}")
get_turn_rate#
Vridhastighet är hur snabbt roboten roterar. get_turn_rate returnerar robotens vridhastighet i grader per sekund \(dps\) som ett flyttal, från -1000,00 till 1000,00 dps.
Värdet kan vara positivt eller negativt beroende på vilken riktning roboten roterar på den valda axeln. Bilden nedan använder pilar för att visa den positiva rotationsriktningen för rullning, lutning och girning.

Usage:
robot.inertial.get_turn_rate(axis)
Parametrar |
Beskrivning |
|---|---|
|
Vilken orientering som ska returneras:
|
# Display the gyro rate as the robot is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_turn_rate(YAW))
wait(50, MSEC)
Kalibrering#
Kalibrering hjälper tröghetssensorn att mäta och kompensera för sensorbrus och drift under en 2-sekundersperiod. Under denna tid måste roboten stå helt stilla på en stabil yta. Rörelse under kalibreringen kan ge felaktiga resultat.
VEX-robotar försöker kalibrera sig själva automatiskt vid uppstart och väntar tills de inte detekterar någon rörelse. Om roboten däremot bärs eller flyttas under uppstart kan det hända att sensorn inte kalibrerar korrekt eller ger felaktig kalibrering.
Om ditt projekt i hög grad är beroende av att ha en korrekt kurs, eller om du behöver konsekventa och repeterbara svängar, kan det vara bra att anropa calibrate i början av din kod. Det är bra att visa ett meddelande som “Kalibrerar…” på robotens skärm under kalibreringen och sedan uppdatera det till “Kalibrering klar” efteråt för att påminna dig (och alla andra som använder roboten) om att roboten måste förbli orörlig under denna period.
calibrate#
calibrate kalibrerar gyrot. Kalibrering hjälper tröghetssensorn att mäta rotationer korrekt genom att mäta och kompensera för sensorbrus och drift under en 2-sekundersperiod. Under denna tid måste roboten stå helt stilla på en stabil yta. Rörelse under kalibreringen kan ge felaktiga resultat.
VEX-robotar försöker kalibrera sig själva automatiskt vid uppstart och väntar tills de inte detekterar någon rörelse. Om roboten däremot bärs eller flyttas under uppstart kan det hända att sensorn inte kalibrerar korrekt eller ger felaktig kalibrering.
Usage:
robot.inertial.calibrate()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Calibrate the gyro before moving
robot.inertial.calibrate()
robot.screen.show_emoji(THINKING)
wait(2, SECONDS)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)
is_calibrating#
is_calibrating returnerar ett booleskt värde som anger om tröghetssensorn kalibrerar.
True— Tröghetssensorn kalibrerar.False— Tröghetssensorn kalibrerar inte.
Usage:
robot.inertial.is_calibrating()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Move after the calibration is completed
robot.inertial.calibrate()
while robot.inertial.is_calibrating():
robot.screen.show_emoji(THINKING)
wait(50, MSEC)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)