Piedziņa#
Ievads#
Piedziņas sistēmā ietilpst riteņi un motori, kas kontrolē robota braukšanu un pagriešanos. Piedziņas sistēmas var atrast tādās versijās kā Code Base 2.0, Super Car vai pielāgotā robotā.
Piedziņas mehānismi izmanto smadzenēs esošo inerciālo sensoru, lai noteiktu avārijas un palīdzētu robotam precīzi kustēties un pagriezties. Katra projekta sākumā piedziņas mehānisms automātiski kalibrē inerciālo sensoru. Kalibrēšanas laikā robotam jāturas nekustīgi apmēram 2 sekundes, lai tas varētu pareizi kustēties un pagriezties.
Ir daudz veidu, kā kodēt piedziņas sistēmu. Zemāk ir visu piedziņas sistēmas metožu saraksts:
Darbības — Pārvietot un pagriezt robotu.
drive— Pārvieto robotu uz priekšu vai atpakaļ uz visiem laikiem.drive_for— Pārvieto robotu uz priekšu vai atpakaļ noteiktu attālumu.drive_until— Robots pārvieto uz priekšu, līdz acu sensors konstatē objektu vai robots konstatē avāriju.turn— Pagriež robotu pa kreisi vai pa labi uz visiem laikiem.turn_for— Pagriež robotu pa kreisi vai pa labi par noteiktu grādu skaitu.turn_to_heading— Pagriež robotu noteiktā virzienā no -359 līdz 359 grādiem. Robots pagriezīsies īsākajā virzienā, lai sasniegtu mērķa virzienu.turn_to_rotation— Pagriež robotu noteiktā rotācijā.stop— Aptur robota kustību.
Mutatori — pielāgo piedziņas mehānisma iestatījumus.
set_drive_velocity— Norāda robotam, cik ātri braukt.set_turn_velocity— Norāda robotam, cik ātri griezties.set_stopping— Norāda, kā robots pārtrauks kustību: bremzējot, braucot brīvi vai turoties.set_timeout— Iestata, cik ilgi robots mēģinās pabeigt kustību.set_heading— Maina robota pašreizējo virzienu uz jaunu virzienu.set_rotation— Maina robota pašreizējo rotāciju uz jaunu rotāciju.
Getteri — pārbaudiet kustības statusu.
get_heading— Atgriež robota pašreizējo virzienu no 0 līdz 359 grādiem.get_rotation— Atgriež robota pašreizējo rotāciju.get_velocity— Atgriež robota braukšanas ātrumu procentos no -100% līdz 100%.get_yaw— Atgriež robota pašreizējo novirzi.get_roll— Atgriež robota pašreizējo metienu.get_pitch— Atgriež robota pašreizējo slīpuma leņķi.get_crashed— Atgriež, vai robots ir konstatējis avāriju, kā Būla vērtību.is_stopped— Atgriež, vai robots ir pabeidzis kustību, kā Būla vērtību.
Darbības#
drive#
drive pārvieto robotu uz priekšu vai atpakaļ bezgalīgi. Robots turpinās kustēties, līdz tam tiks dota cita darbība, piemēram, pagriešana vai apstāšanās.
Usage:
drivetrain.drive(direction)
Parametri |
Apraksts |
|---|---|
|
Robota kustības virziens: |
# 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 pārvieto robotu uz priekšu vai atpakaļ noteiktu attālumu.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
Parametri |
Apraksts |
|---|---|
|
Robota kustības virziens: |
|
Robota nobrauktais attālums. Tas var būt vesels skaitlis vai decimālskaitlis. |
|
Neobligāti. Attāluma mērvienība: |
|
Neobligāti. |
# 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 pārvieto robotu uz priekšu, līdz acu sensors atrod objektu vai robots konstatē avāriju.
Usage:
drivetrain.drive_until(condition, wait)
Parametri |
Apraksts |
|---|---|
|
Nosacījums, kas aptur robotu: |
|
Neobligāti. |
# 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 pagriež robotu pa kreisi vai pa labi uz visiem laikiem. Robots turpinās griezties, līdz tam tiks dota cita darbība, piemēram, braukšana līdz apstāšanās brīdim.
Usage:
drivetrain.turn(direction)
Parametri |
Apraksts |
|---|---|
|
Robota griešanās virziens: |
# 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 pagriež robotu pa kreisi vai pa labi par noteiktu grādu skaitu. Pagrieziens ir relatīvs attiecībā pret robota pašreizējo pozīciju.
Usage:
drivetrain.turn_for(direction, angle, wait)
Parametri |
Apraksts |
|---|---|
|
Robota griešanās virziens: |
|
Robota pagrieziena grādu skaits. Tas var būt vesels skaitlis vai decimālskaitlis. |
|
Neobligāti. |
# 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#
Virziens ir virziens, kurā ir pagrieztas robota smadzenes, mērot grādos. turn_to_heading pagriež robotu noteiktā virzienā no -359 līdz 359 grādiem. Robots pagriezīsies īsākajā virzienā, lai sasniegtu mērķa virzienu.
Sākuma kurss ir 0 grādi.

Usage:
drivetrain.turn_to_heading(angle, wait)
Parametri |
Apraksts |
|---|---|
|
Virziens, kādā robotam jāgriežas, kā vesels skaitlis no -359 līdz 359 grādiem. |
|
Neobligāti. |
# 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 pagriež robotu noteiktā rotācijā.
Rotācija ir robota pagrieziena lielums, mērīts grādos. Projekta sākumā rotācijas vērtība ir iestatīta uz 0 grādiem. Rotāciju var iestatīt arī, izmantojot set_rotation.
Rotācijas vērtības ir absolūtas. Tas nozīmē, ka pagrieziena virziens ir atkarīgs no robota pašreizējās rotācijas. Pagriežoties pa labi, rotācija palielinās, bet pagriežoties pa kreisi, tā samazinās.
Piemēram, ja robots sāk darboties no 0 grādiem un jūs pagriežaties par 720 grādiem, tas divreiz pagriezīsies pa labi. Ja pēc tam pagriezīsities par 360 grādiem, tas vienreiz pagriezīsies pa kreisi, jo 360 grādi ir mazāki par 720.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Parametri |
Apraksts |
|---|---|
|
Rotācijas vērtība grādos, kādā robots pagriezīsies. Tas var būt vesels skaitlis. |
|
Neobligāti. |
# 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 aptur robota kustību.
Usage:
drivetrain.stop()
Parametri |
Apraksts |
|---|---|
Šai metodei nav parametru. |
# 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)
Mutatori#
set_drive_velocity#
set_drive_velocity norāda robotam, cik ātri jābrauc. Augstāka procentuālā vērtība liek robotam braukt ātrāk, bet zemāka procentuālā vērtība liek robotam braukt lēnāk.
Katrs projekts sākas ar robota kustību ar noklusējuma ātrumu 50%.
Piezīme: Lielāks ātrums padara robotu ātrāku, bet tas var būt mazāk precīzs. Mazāks ātrums padara robotu lēnāku, bet precīzāku.
Usage:
drivetrain.set_drive_velocity(velocity)
Parametri |
Apraksts |
|---|---|
|
Braukšanas ātrums no 0% līdz 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 norāda robotam, cik ātri griezties. Augstāka procentuālā vērtība liek robotam griezties ātrāk, bet zemāka procentuālā vērtība liek robotam griezties lēnāk.
Katrs projekts sākas ar robota griešanos ar noklusējuma ātrumu 50%.
Piezīme: Lielāks ātrums liek robotam griezties ātrāk, bet tas var būt mazāk precīzs. Mazāks ātrums liek robotam griezties lēnāk, bet tas var būt precīzāks.
Usage:
drivetrain.set_turn_velocity(velocity)
Parametri |
Apraksts |
|---|---|
|
Griešanās ātrums no 0% līdz 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 nosaka, kā robots pārtrauks kustību: bremzējot, braucot brīvi vai turoties.
Usage:
drivetrain.set_stopping(brake)
Parametri |
Apraksts |
|---|---|
|
Kā robots apstāsies:
|
Ja šī metode netiek izmantota, robots apstājoties izmantos BRAKE.
# 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 nosaka, cik ilgi robots mēģinās pabeigt kustību. Ja robots nevar pabeigt šajā laikā, tas pārtrauks mēģinājumu un pāries uz nākamo koda rindiņu. Tas neļauj robotam iestrēgt kustībā.
Usage:
drivetrain.set_timeout(value, units)
Parametri |
Apraksts |
|---|---|
|
Laiks, kurā robots var mēģināt pabeigt kustību. Tas var būt vesels skaitlis vai decimālskaitlis. |
|
Neobligāti. Laika mērvienība: |
# 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#
Virziens ir virziens, kurā atrodas robota smadzenes, mērot grādos. set_heading maina robota pašreizējo virzienu uz jaunu virzienu.
Piemēram, ja robots ir pagriezies pa labi, iestatot virzienu uz 0 grādiem, šī pozīcija, kas vērsta pa labi, kļūst par jauno 0 grādu pozīciju. Pēc tam robots var pagriezties uz citām pozīcijām, pamatojoties uz šo jauno virzienu.
Usage:
drivetrain.set_heading(value)
Parametri |
Apraksts |
|---|---|
|
Robota iestatāmā virziena vērtība grādos. Tas var būt vesels skaitlis no 0 līdz 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#
Rotācija ir robota pagrieziena lielums, mērot grādos. Projekta sākumā rotācijas vērtība ir iestatīta uz 0 grādiem. set_rotation maina robota pašreizējo rotāciju uz jaunu vērtību.
Piemēram, ja robots ir veicis divus pilnus pagriezienus pa labi, tā rotācijas vērtība būs 720 grādi. Iestatot rotāciju uz 0 grādiem, šī rotācija tiks atiestatīta no 720 uz 0 grādiem. Pēc tam robots var veikt rotācijas, pamatojoties uz šo jauno vērtību.
Usage:
drivetrain.set_rotation(value)
Parametri |
Apraksts |
|---|---|
|
Robota rotācijas vērtība grādos. Tā var būt vesels skaitlis. |
# 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)
Getteri#
get_heading#
Virziens ir virziens, kurā atrodas robota smadzenes, mērīts grādos. get_heading atgriež šo virzienu no 0 līdz 359 grādiem.
Robota sākuma virziens ir 0 grādi.

Usage:
drivetrain.get_heading()
Parametri |
Apraksts |
|---|---|
Šai metodei nav parametru. |
# 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#
Rotācija ir robota pagrieziena lielums, mērīts grādos. Projekta sākumā rotācijas vērtība ir iestatīta uz 0 grādiem. get_rotation atgriež robota pašreizējo rotāciju.
Pagriežoties pa labi, rotācija palielinās, bet pagriežoties pa kreisi, tā samazinās. Piemēram, veicot divus pilnus pagriezienus pa labi, rotācija būs 720 grādi.

Usage:
drivetrain.get_rotation()
Parametri |
Apraksts |
|---|---|
Šai metodei nav parametru. |
# 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 atgriež robota braukšanas ātrumu procentos no -100% līdz 100%.
Pozitīva vērtība nozīmē, ka robots brauc uz priekšu. Negatīva vērtība nozīmē, ka robots brauc atpakaļgaitā.
Usage:
drivetrain.get_velocity()
Parametri |
Apraksts |
|---|---|
Šai metodei nav parametru. |
# 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#
Novirze norāda, cik daudz robots ir pagriezies pa kreisi vai pa labi no sākuma pozīcijas, mērot grādos. get_yaw atgriež robota pašreizējo novirzes vērtību.
Pagriežoties pa labi, novirzes vērtība palielinās, bet pagriežoties pa kreisi, tā samazinās.
Usage:
drivetrain.get_yaw()
Parametri |
Apraksts |
|---|---|
Šai metodei nav parametru. |
# 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 (Rols) ir robota sasvēršanās pa kreisi vai pa labi, mērot grādos. get_roll atgriež robota pašreizējo ripošanas vērtību.
Ar smadzenēm vērstām uz priekšu, noliecot pa kreisi, palielinās ripošanas vērtība, bet noliecot pa labi, tā samazinās.
Usage:
drivetrain.get_roll()
Parametri |
Apraksts |
|---|---|
Šai metodei nav parametru. |
# 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#
Slīpums norāda, cik daudz robots sasveras uz priekšu vai atpakaļ, mērot grādos. get_pitch atgriež robota pašreizējo slīpuma vērtību.
Kad smadzenes ir vērstas uz priekšu, noliecoties uz priekšu, skaņas toņa vērtība palielinās, bet, noliecoties atpakaļ, tā samazinās.
Usage:
drivetrain.get_pitch()
Parametri |
Apraksts |
|---|---|
Šai metodei nav parametru. |
# 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 atgriež, vai robots ir konstatējis avāriju, kā Būla vērtību.
True— Ir konstatēta avārija.False— Avārija nav konstatēta.
Usage:
drivetrain.get_crashed()
Parametri |
Apraksts |
|---|---|
Šai metodei nav parametru. |
# 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 atgriež, vai robots ir pabeidzis kustību, kā Būla vērtību. To var izmantot, lai kontrolētu citu darbību laiku, pamatojoties uz robota kustību.
True— Robots ir pabeidzis kustību.False— Robots joprojām kustas.
Šī metode darbojas kopā ar šādām piedziņas metodēm, kurām ir parametrs wait : drive_for, drive_until, turn_for, turn_to_heading un turn_to_rotation.
Usage:
drivetrain.is_stopped()
Parametri |
Apraksts |
|---|---|
Šai metodei nav parametru. |
# 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)