Drivlina#
Introduktion#
Drivlinan inkluderar hjul och motorer som styr hur roboten kör och svänger. Drivlinor kan hittas i byggen som Code Base 2.0, Super Car eller en specialbyggd robot.
Drivlinor använder tröghetssensorn i hjärnan för att upptäcka krascher och hjälpa roboten att röra sig och svänga exakt. I början av varje projekt kalibrerar drivlinan tröghetssensorn automatiskt. Håll roboten stilla i cirka 2 sekunder under kalibreringen, så att roboten kan röra sig och svänga korrekt.
Det finns många sätt att koda drivlinan. Nedan följer en lista över alla drivlinmetoder:
Åtgärder — Flytta och vrid roboten.
drive— Rör roboten framåt eller bakåt i all oändlighet.drive_for— Rör roboten framåt eller bakåt ett visst avstånd.drive_until— Rör roboten framåt tills ögonsensorn detekterar ett föremål eller roboten detekterar en krasch.turn— Svänger roboten åt vänster eller höger för alltid.turn_for— Svänger roboten åt vänster eller höger ett visst antal grader.turn_to_heading— Vrider roboten mot en specifik kurs från -359 till 359 grader. Roboten kommer att svänga den kortaste riktningen för att nå målkursen.turn_to_rotation— Vrider roboten till en specifik rotation.stop— Stoppar robotens rörelse.
Mutatorer — Justera drivlinans inställningar.
set_drive_velocity— Anger för roboten hur snabbt den ska köra.set_turn_velocity— Anger för roboten hur snabbt den ska svänga.set_stopping— Anger hur roboten kommer att stanna: genom att bromsa, frihjula eller hålla.set_timeout— Ställer in hur länge roboten ska försöka slutföra en rörelse.set_heading— Ändrar robotens nuvarande kurs till en ny kurs.set_rotation— Ändrar robotens aktuella rotation till en ny rotation.
Getters — Kontrollera rörelsestatus.
get_heading— Returnerar robotens aktuella kurs från 0 till 359 grader.get_rotation— Returnerar robotens aktuella rotation.get_velocity— Returnerar hur snabbt roboten kör, som en procentandel från -100 % till 100 %.get_yaw— Returnerar robotens aktuella girning.get_roll— Returnerar robotens aktuella kast.get_pitch— Returnerar robotens aktuella tonhöjd.get_crashed— Returnerar om roboten har upptäckt en krasch, som ett booleskt värde.is_stopped— Returnerar om roboten är klar med sin rörelse, som ett booleskt värde.
Åtgärder#
drive#
drive rör roboten framåt eller bakåt för alltid. Roboten fortsätter att röra sig tills den får en annan åtgärd, som att vända eller stanna.
Usage:
drivetrain.drive(direction)
Parametrar |
Beskrivning |
|---|---|
|
Robotens rörelseriktning: |
# Build Used: Code Base 2.0
def main():
# Drive forward then stop
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
drive_for#
drive_for flyttar roboten framåt eller bakåt ett visst avstånd.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
Parametrar |
Beskrivning |
|---|---|
|
Robotens rörelseriktning: |
|
Den sträcka roboten kör. Detta kan vara ett heltal eller ett decimaltal. |
|
Valfritt. Avståndsenheten: |
|
Valfritt. |
# Build Used: Code Base 2.0
def main():
# Drive back and forth
drivetrain.drive_for(FORWARD, 100, MM)
drivetrain.drive_for(REVERSE, 4, INCHES)
# Start threads — Do not delete
start_thread(main)
drive_until#
drive_until flyttar roboten framåt tills ögonsensorn detekterar ett föremål eller roboten detekterar en krock.
Usage:
drivetrain.drive_until(condition, wait)
Parametrar |
Beskrivning |
|---|---|
|
Villkoret som stoppar roboten: |
|
Valfritt. |
# Build Used: Code Base 2.0
def main():
# Turn right after a crash
drivetrain.drive_until(CRASH)
drivetrain.turn_for(RIGHT, 90)
# Start threads — Do not delete
start_thread(main)
turn#
turn vrider roboten åt vänster eller höger för alltid. Roboten fortsätter att vrida tills den får en annan åtgärd, som att köra till stopp.
Usage:
drivetrain.turn(direction)
Parametrar |
Beskrivning |
|---|---|
|
Riktningen roboten svänger: |
# Build Used: Code Base 2.0
def main():
# Turn right and left, then stop
drivetrain.turn(RIGHT)
wait(2, SECONDS)
drivetrain.turn(LEFT)
wait(2, SECONDS)
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
turn_for#
turn_for vrider roboten åt vänster eller höger ett visst antal grader. Vridningen är relativ till robotens aktuella position.
Usage:
drivetrain.turn_for(direction, angle, wait)
Parametrar |
Beskrivning |
|---|---|
|
Riktningen roboten svänger: |
|
Antalet grader som roboten roterar. Detta kan vara ett heltal eller ett decimaltal. |
|
Valfritt. |
# Build Used: Code Base 2.0
def main():
# Turn right then left
drivetrain.turn_for(RIGHT, 90)
drivetrain.turn_for(LEFT, 90)
# Start threads — Do not delete
start_thread(main)
turn_to_heading#
En kurs är den riktning robotens hjärna är vänd mot, mätt i grader. turn_to_heading vrider roboten så att den är vänd mot en specifik kurs från -359 till 359 grader. Roboten kommer att svänga den kortaste riktningen för att nå målkursen.
Startriktningen är 0 grader.

Usage:
drivetrain.turn_to_heading(angle, wait)
Parametrar |
Beskrivning |
|---|---|
|
Riktningen som roboten ska vara vänd som ett heltal, från -359 till 359 grader. |
|
Valfritt. |
# Build Used: Code Base 2.0
def main():
# Turn to face the cardinal directions
drivetrain.turn_to_heading(90)
wait(1, SECONDS)
drivetrain.turn_to_heading(180)
wait(1, SECONDS)
drivetrain.turn_to_heading(270)
wait(1, SECONDS)
drivetrain.turn_to_heading(0)
# Start threads — Do not delete
start_thread(main)
turn_to_rotation#
turn_to_rotation vrider roboten till en specifik rotation.
Rotation är hur mycket roboten har roterat, mätt i grader. I början av ett projekt sätts rotationsvärdet till 0 grader. Rotation kan också ställas in med set_rotation.
Rotationsvärdena är absoluta. Det betyder att rotationsriktningen beror på robotens aktuella rotation. Att vrida åt höger ökar rotationen och att vrida åt vänster minskar rotationen.
Om roboten till exempel startar vid 0 grader och du roterar 720 grader, kommer den att svänga höger två gånger. Om du sedan roterar 360 grader, kommer den att svänga vänster en gång, eftersom 360 är mindre än 720.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Parametrar |
Beskrivning |
|---|---|
|
Rotationsvärdet, i grader, som roboten kommer att vända sig till. Detta kan vara ett heltal. |
|
Valfritt. |
# Build Used: Code Base 2.0
def main():
# Make one full turn to the right
drivetrain.turn_to_rotation(360)
# Make another full turn to the right
drivetrain.turn_to_rotation(720)
# Make one full turn to the left, returning to 360 degrees
drivetrain.turn_to_rotation(360)
# Start threads — Do not delete
start_thread(main)
stop#
stop stoppar robotens rörelse.
Usage:
drivetrain.stop()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Build Used: Code Base 2.0
def main():
# Drive forward then stop
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
Mutatorer#
set_drive_velocity#
set_drive_velocity anger hur snabbt roboten ska köra. En högre procentandel gör att roboten kör snabbare och en lägre procentandel gör att roboten kör långsammare.
Varje projekt börjar med att roboten kör med 50 % hastighet som standard.
Obs: En högre hastighet gör att roboten kör snabbare, men den kan vara mindre precis. En lägre hastighet gör att roboten kör långsammare, men är mer precis.
Usage:
drivetrain.set_drive_velocity(velocity)
Parametrar |
Beskrivning |
|---|---|
|
Hastigheten att köra med från 0 % till 100 %. |
# Build Used: Code Base 2.0
def main():
# Drive at different velocities
drivetrain.drive_for(FORWARD, 100, MM)
wait(1, SECONDS)
# Drive slow
drivetrain.set_drive_velocity(20)
drivetrain.drive_for(FORWARD, 100, MM)
wait(1, SECONDS)
# Drive fast
drivetrain.set_drive_velocity(100)
drivetrain.drive_for(FORWARD, 100, MM)
# Start threads — Do not delete
start_thread(main)
set_turn_velocity#
set_turn_velocity anger hur snabbt roboten ska snurra. En högre procentandel gör att roboten snurrar snabbare och en lägre procentandel gör att roboten snurrar långsammare.
Varje projekt börjar med att roboten roterar med 50 % hastighet som standard.
Obs: En högre hastighet gör att roboten roterar snabbare, men den kan vara mindre precis. En lägre hastighet gör att roboten roterar långsammare, men är mer precis.
Usage:
drivetrain.set_turn_velocity(velocity)
Parametrar |
Beskrivning |
|---|---|
|
Hastigheten att rotera med från 0 % till 100 %. |
# Build Used: Code Base 2.0
def main():
# Turn at different velocities
drivetrain.turn_for(RIGHT, 180)
wait(1, SECONDS)
# Turn fast
drivetrain.set_turn_velocity(100)
drivetrain.turn_for(RIGHT, 180)
# Start threads — Do not delete
start_thread(main)
set_stopping#
set_stopping anger hur roboten ska stanna: genom att bromsa, frihjula eller hålla.
Usage:
drivetrain.set_stopping(brake)
Parametrar |
Beskrivning |
|---|---|
|
Hur roboten kommer att stanna:
|
Om denna metod inte används kommer roboten att använda BRAKE vid stopp.
# Build Used: Code Base 2.0
def main():
# Drive, then coast to a stop
drivetrain.set_drive_velocity(100)
drivetrain.set_stopping(COAST)
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
set_timeout#
set_timeout anger hur länge roboten ska försöka slutföra en rörelse. Om roboten inte kan slutföra inom den tiden kommer den att sluta försöka och gå vidare till nästa kodrad. Detta förhindrar att roboten fastnar i en rörelse.
Usage:
drivetrain.set_timeout(value, units)
Parametrar |
Beskrivning |
|---|---|
|
Den tid roboten kan försöka slutföra en rörelse. Detta kan vara ett heltal eller ett decimaltal. |
|
Valfritt. Tidsenhet: |
# Build Used: Code Base 2.0
def main():
# Drive as far as possible for 1 second before turning right
drivetrain.set_timeout(1, SECONDS)
drivetrain.drive_for(FORWARD, 25, INCHES)
drivetrain.turn_for(RIGHT, 90)
# Start threads — Do not delete
start_thread(main)
set_heading#
En kurs är den riktning robotens hjärna är vänd mot, mätt i grader. set_heading ändrar robotens nuvarande kurs till ett nytt kursvärde.
Om roboten till exempel har vänt sig åt höger och kursen ställs in på 0 grader, blir den högervända positionen den nya 0 grader. Roboten kan då vända sig till andra positioner baserat på den nya kursen.
Usage:
drivetrain.set_heading(value)
Parametrar |
Beskrivning |
|---|---|
|
Kursvärdet, i grader, som ska ställas in för roboten. Detta kan vara ett heltal från 0 till 359. |
# Build Used: Code Base 2.0
def main():
# Face the new 0 degree heading
drivetrain.set_heading(90)
drivetrain.turn_to_heading(0)
# Start threads — Do not delete
start_thread(main)
set_rotation#
Rotation är hur mycket roboten har roterat, mätt i grader. I början av ett projekt sätts rotationsvärdet till 0 grader. set_rotation ändrar robotens aktuella rotation till ett nytt värde.
Om roboten till exempel har gjort två hela varv åt höger blir dess rotationsvärde 720 grader. Om rotationen ställs in på 0 grader återställs den rotationen från 720 till 0 grader. Sedan kan roboten vända sig till rotationer baserat på det nya värdet.
Usage:
drivetrain.set_rotation(value)
Parametrar |
Beskrivning |
|---|---|
|
Rotationsvärdet, i grader, som ska ställas in för roboten. Detta kan vara ett heltal. |
# Build Used: Code Base 2.0
def main():
# Spin counterclockwise two times
drivetrain.set_rotation(720)
drivetrain.turn_to_rotation(0)
# Start threads — Do not delete
start_thread(main)
Getters#
get_heading#
En kurs är den riktning robotens hjärna är vänd mot, mätt i grader. get_heading returnerar den kursen från 0 till 359 grader.
Robotens startriktning är 0 grader.

Usage:
drivetrain.get_heading()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Build Used: Code Base 2.0
def main():
# Display the heading while turning
monitor_sensor("drivetrain.get_heading")
drivetrain.turn_for(RIGHT, 450)
# Start threads — Do not delete
start_thread(main)
get_rotation#
Rotation är hur mycket roboten har roterat, mätt i grader. I början av ett projekt sätts rotationsvärdet till 0 grader. get_rotation returnerar robotens aktuella rotation.
Att vrida åt höger ökar rotationen, och att vrida åt vänster minskar rotationen. Om du till exempel gör två hela varv åt höger får du en rotation på 720 grader.

Usage:
drivetrain.get_rotation()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Build Used: Code Base 2.0
def main():
# Display the rotation while turning
monitor_sensor("drivetrain.get_rotation")
drivetrain.turn_for(RIGHT, 450)
# Start threads — Do not delete
start_thread(main)
get_velocity#
get_velocity returnerar hur snabbt roboten kör, som en procentandel från -100% till 100%.
Ett positivt värde betyder att roboten kör framåt. Ett negativt värde betyder att roboten kör bakåt.
Usage:
drivetrain.get_velocity()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Build Used: Code Base 2.0
def main():
# Display the velocity of the robot before and while moving
console.print("Start: ")
console.print(drivetrain.get_velocity())
console.new_line()
drivetrain.drive(FORWARD)
wait(0.5, SECONDS)
console.print("Moving: ")
console.print(drivetrain.get_velocity())
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
get_yaw#
Girning är hur mycket roboten har svängt åt vänster eller höger från sin startposition, mätt i grader. get_yaw returnerar robotens aktuella girningsvärde.
Att svänga åt höger ökar girvärdet, och att svänga åt vänster minskar girvärdet.
Usage:
drivetrain.get_yaw()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Build Used: Super Code Base 2.0
def main():
# Change the LED color based on the yaw while
# moving the robot by hand
monitor_sensor("drivetrain.get_yaw")
while True:
if drivetrain.get_yaw() > 0:
bumper.set_color(GREEN)
elif drivetrain.get_yaw() < 0:
bumper.set_color(RED)
else:
bumper.set_color(NONE)
# Start threads — Do not delete
start_thread(main)
get_roll#
Roll är hur mycket roboten lutar åt vänster eller höger, mätt i grader. get_roll returnerar robotens aktuella rollvärde.
Med hjärnan vänd framåt ökar lutningen åt vänster rullvärdet, och lutningen åt höger minskar rullvärdet.
Usage:
drivetrain.get_roll()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Build Used: Super Code Base 2.0
def main():
# Change the LED color based on the roll while
# moving the robot by hand
monitor_sensor("drivetrain.get_roll")
while True:
if drivetrain.get_roll() > 0:
bumper.set_color(GREEN)
elif drivetrain.get_roll() < 0:
bumper.set_color(RED)
else:
bumper.set_color(NONE)
# Start threads — Do not delete
start_thread(main)
get_pitch#
Lutning är hur mycket roboten lutar framåt eller bakåt, mätt i grader. get_pitch returnerar robotens aktuella lutningsvärde.
Med hjärnan vänd framåt ökar tonhöjden om du lutar framåt, och om du lutar bakåt minskar den tonhöjden.
Usage:
drivetrain.get_pitch()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Build Used: Super Code Base 2.0
def main():
# Change the LED color based on the pitch while
# moving the robot by hand
monitor_sensor("drivetrain.get_pitch")
while True:
if drivetrain.get_pitch() > 0:
bumper.set_color(GREEN)
elif drivetrain.get_pitch() < 0:
bumper.set_color(RED)
else:
bumper.set_color(NONE)
# Start threads — Do not delete
start_thread(main)
get_crashed#
get_crashed returnerar om roboten har upptäckt en krasch, som ett booleskt värde.
True— En krasch har upptäckts.False— Ingen krasch har upptäckts.
Usage:
drivetrain.get_crashed()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Build Used: Super Code Base 2.0
def main():
# Drive until a crash
drivetrain.drive(FORWARD)
while not drivetrain.get_crashed():
wait(50, MSEC)
drivetrain.stop()
drivetrain.turn_for(RIGHT, 90)
# Start threads — Do not delete
start_thread(main)
is_stopped#
is_stopped returnerar huruvida roboten är klar med att röra sig, som ett booleskt värde. Detta kan användas för att styra tidpunkten för andra beteenden baserat på robotens rörelse.
True— Roboten är klar med sin rörelse.False— Roboten rör sig fortfarande.
Den här metoden fungerar tillsammans med följande drivlinametoder som har parametern wait : drive_for, drive_until, turn_for, turn_to_heading och turn_to_rotation.
Usage:
drivetrain.is_stopped()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# Build Used: Code Base 2.0
def main():
# Turn when the drivetrain is done moving forward
drivetrain.drive_for(FORWARD, 100, MM, wait=False)
wait(0.25, SECONDS)
while True:
if drivetrain.is_stopped():
drivetrain.turn_for(RIGHT, 180)
break
else:
console.print("Still moving...")
wait(0.1, SECONDS)
console.clear()
# Start threads — Do not delete
start_thread(main)