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.

En VEX AIM-kodningsrobot med en blå pil som pekar nedåt från robotens mitt. Runt den blå pilen pekar en svart böjd pil medurs, vilket indikerar den positiva girriktningen.

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.

En VEX AIM-kodningsrobot med en grön pil som sträcker sig ut från robotens framsida, i mitten av AI Vision-sensorn. Runt den gröna pilen böjs en svart pil moturs, vilket indikerar den positiva riktningen för rullning.

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.

En VEX AIM-kodningsrobot med en röd pil som sträcker sig ut från robotens sida under VEX-logotypen. Runt den röda pilen böjs en svart pil moturs, vilket indikerar den positiva riktningen för tonhöjden.

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

heading

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

callback

En funktion som tidigare är definierad att köras när en kollision detekteras.

arg

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

sensitivity

Kraschkänsligheten:

  • HIGH — Mest känslig; detekterar mindre stötar och utlöses vid 1G.
  • NORMAL — Standardkänslighet; detekterar måttliga stötar och utlöses vid 1,5G.
  • LOW — Minst känslig; detekterar starkare stötar och utlöses vid 2G.

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.

En VEX AIM-kodningsrobot med riktningspilar som sträcker sig från robotens mitt. En grön pil märkt framåt sträcker sig från robotens framsida, en blå pil märkt nedåt sträcker sig från robotens undersida och en pil märkt höger sträcker sig från robotens sida under VEX-logotypen.

Användande:

robot.inertial.get_acceleration(type)

Parametrar

Beskrivning

type

Axeln att mäta acceleration på:

  • DOWNWARD — Mäter accelerationen längs robotens vertikala riktning.
  • FORWARD — Mäter accelerationen längs robotens fram-till-bak-riktning.
  • RIGHTWARD — Mäter accelerationen längs robotens sid-till-sida-riktning.

# 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.

En VEX AIM-kodningsrobot med riktningspilar som sträcker sig från robotens mitt. En grön pil märkt "rulla" sträcker sig från robotens framsida med en svart böjd pil som pekar moturs runt den. En blå pil märkt "gira" sträcker sig från robotens undersida med en svart böjd pil som pekar medurs runt den. Och en röd pil märkt "pitch" sträcker sig från robotens sida under VEX-logotypen, med en svart böjd pil som pekar moturs runt den.

Usage:
robot.inertial.get_turn_rate(axis)

Parametrar

Beskrivning

axis

Vilken orientering som ska returneras:

  • YAW
  • ROLL
  • PITCH
# 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)