Hnací ústrojí#
Zavedení#
Pohonné ústrojí zahrnuje kola a motory, které ovládají, jak se robot pohybuje a zatáčí. Pohonné ústrojí lze nalézt v sestavách, jako je Code Base 2.0, Super Car nebo robot na zakázku.
Pohonné jednotky používají Inerciální senzor v mozku k detekci kolizí a pomáhají robotu s přesným pohybem a otáčením. Na začátku každého projektu pohonná jednotka automaticky kalibruje inerciální senzor. Během kalibrace držte robota v klidu asi 2 sekundy, aby se mohl správně pohybovat a otáčet.
Existuje mnoho způsobů, jak kódovat hnací ústrojí. Níže je uveden seznam všech metod kódování hnacího ústrojí:
Akce – Pohyb a otáčení robota.
drive— Pohybuje robota vpřed nebo vzad natrvalo.drive_for— Pohybuje robotem vpřed nebo vzad o určitou vzdálenost.drive_until— Pohybuje robota vpřed, dokud oční senzor nezaznamená objekt nebo dokud robot nezaznamená náraz.turn— Otočí robota doleva nebo doprava natrvalo.turn_for— Otočí robota doleva nebo doprava o určitý počet stupňů.turn_to_heading— Otočí robota do určitého směru od -359 do 359 stupňů. Robot se otočí nejkratším směrem k dosažení cílového směru.turn_to_rotation— Otočí robota do určité rotace.stop— Zastaví pohyb robota.
Mutátory – Upravte nastavení hnacího ústrojí.
set_drive_velocity— Říká robotovi, jak rychle má jet.set_turn_velocity— Říká robotovi, jak rychle se má otáčet.set_stopping— Určuje, jak se robot zastaví: brzděním, setrvačností nebo zastavením.set_timeout— Nastaví, jak dlouho se bude robot snažit dokončit pohyb.set_heading— Změní aktuální směr robota na nový směr.set_rotation— Změní aktuální rotaci robota na novou rotaci.
Gettery – Kontrola stavu pohybu.
get_heading— Vrátí aktuální směr robota od 0 do 359 stupňů.get_rotation— Vrátí aktuální rotaci robota.get_velocity— Vrátí rychlost pohybu robota v procentech od -100 % do 100 %.get_yaw— Vrátí aktuální natočení robota.get_roll— Vrátí aktuální hod robota.get_pitch— Vrátí aktuální sklon robota.get_crashed— Vrátí, zda robot detekoval havárii, jako booleovskou hodnotu.is_stopped— Vrátí, zda robot dokončil pohyb, jako booleovskou hodnotu.
Akce#
drive#
drive pohybuje robotem vpřed nebo vzad navždy. Robot se bude pohybovat, dokud nedostane další akci, například otočení nebo zastavení.
Usage:
drivetrain.drive(direction)
Parametry |
Popis |
|---|---|
|
Směr pohybu robota: |
# 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 pohybuje robotem vpřed nebo vzad o určitou vzdálenost.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
Parametry |
Popis |
|---|---|
|
Směr pohybu robota: |
|
Vzdálenost, kterou robot urazí. Může to být celé číslo nebo desetinné číslo. |
|
Volitelné. Jednotka vzdálenosti: |
|
Volitelné. |
# 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 pohybuje robotem vpřed, dokud oční senzor nezaznamená objekt nebo dokud robot nezaznamená náraz.
Usage:
drivetrain.drive_until(condition, wait)
Parametry |
Popis |
|---|---|
|
Podmínka, která zastaví robota: |
|
Volitelné. |
# 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 otočí robota doleva nebo doprava natrvalo. Robot se bude otáčet, dokud nedostane další akci, například zastavení.
Usage:
drivetrain.turn(direction)
Parametry |
Popis |
|---|---|
|
Směr otáčení robota: |
# 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 otočí robota doleva nebo doprava o určitý počet stupňů. Otočení je relativní vzhledem k aktuální poloze robota.
Usage:
drivetrain.turn_for(direction, angle, wait)
Parametry |
Popis |
|---|---|
|
Směr otáčení robota: |
|
Počet stupňů, o které se robot otočí. Může to být celé číslo nebo desetinné číslo. |
|
Volitelné. |
# 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#
Směr je směr, kterým je otočen mozek robota, měřený ve stupních. turn_to_heading otočí robota do určitého směru od -359 do 359 stupňů. Robot se otočí nejkratším směrem, aby dosáhl cílového směru.
Výchozí směr je 0 stupňů.

Usage:
drivetrain.turn_to_heading(angle, wait)
Parametry |
Popis |
|---|---|
|
Směr, kterým by se měl robot otočit, jako celé číslo v rozsahu od -359 do 359 stupňů. |
|
Volitelné. |
# 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 otočí robota do určité rotace.
Rotace udává, o kolik se robot otočil, měřeno ve stupních. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. Rotaci lze také nastavit pomocí set_rotation.
Hodnoty rotace jsou absolutní. To znamená, že směr otáčení závisí na aktuální rotaci robota. Otočení doprava rotaci zvyšuje a otáčení doleva snižuje.
Například pokud robot začne na 0 stupních a otočíte se o 720 stupňů, otočí se dvakrát doprava. Pokud se poté otočíte o 360 stupňů, otočí se jednou doleva, protože 360 je menší než 720.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Parametry |
Popis |
|---|---|
|
Hodnota rotace ve stupních, na kterou se robot otočí. Může to být celé číslo. |
|
Volitelné. |
# 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 zastaví pohyb robota.
Usage:
drivetrain.stop()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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)
Mutátory#
set_drive_velocity#
set_drive_velocity říká robotovi, jak rychle má jet. Vyšší procento způsobí, že robot jede rychleji, a nižší procento způsobí, že robot jede pomaleji.
Každý projekt začíná s robotem, který se standardně pohybuje rychlostí 50 %.
Poznámka: Vyšší rychlost znamená, že robot jede rychleji, ale může být méně přesný. Nižší rychlost znamená, že robot jede pomaleji, ale je přesnější.
Usage:
drivetrain.set_drive_velocity(velocity)
Parametry |
Popis |
|---|---|
|
Rychlost jízdy od 0 % do 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 říká robotovi, jak rychle se má otáčet. Vyšší procento způsobí, že se robot bude otáčet rychleji, a nižší procento způsobí, že se robot bude otáčet pomaleji.
Každý projekt začíná s robotem, který se standardně otáčí rychlostí 50 %.
Poznámka: Vyšší rychlost způsobí, že se robot otáčí rychleji, ale může to být méně přesné. Nižší rychlost způsobí, že se robot otáčí pomaleji, ale je přesnější.
Usage:
drivetrain.set_turn_velocity(velocity)
Parametry |
Popis |
|---|---|
|
Rychlost otáčení od 0 % do 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 nastavuje, jak se robot zastaví: brzděním, setrvačností nebo zastavením.
Usage:
drivetrain.set_stopping(brake)
Parametry |
Popis |
|---|---|
|
Jak robot zastaví:
|
Pokud se tato metoda nepoužije, robot při zastavení použije 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 nastavuje, jak dlouho se bude robot snažit dokončit pohyb. Pokud robot nedokončí pohyb v tomto čase, přestane se snažit a přesune se na další řádek kódu. Tím se zabrání tomu, aby se robot zasekl na pohybu.
Usage:
drivetrain.set_timeout(value, units)
Parametry |
Popis |
|---|---|
|
Doba, po kterou se robot může pokusit dokončit pohyb. Může se jednat o celé číslo nebo desetinné číslo. |
|
Volitelné. Jednotka času: |
# 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#
Směr je směr, kterým je otočen mozek robota, měřený ve stupních. set_heading změní aktuální směr robota na novou hodnotu směru.
Například pokud se robot otočil čelem doprava, nastavením směru na 0 stupňů se tato poloha směřující doprava stane novými 0 stupni. Robot se pak může na základě tohoto nového směru otáčet do jiných pozic.
Usage:
drivetrain.set_heading(value)
Parametry |
Popis |
|---|---|
|
Hodnota směru ve stupních, kterou chcete nastavit pro robota. Může to být celé číslo od 0 do 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#
Rotace udává, o kolik se robot otočil, měřeno ve stupních. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. set_rotation změní aktuální rotaci robota na novou hodnotu.
Například pokud robot provedl dvě plné otáčky doprava, jeho hodnota rotace bude 720 stupňů. Nastavením rotace na 0 stupňů se tato hodnota resetuje ze 720 na 0 stupňů. Robot se pak může otáčet na základě této nové hodnoty.
Usage:
drivetrain.set_rotation(value)
Parametry |
Popis |
|---|---|
|
Hodnota rotace ve stupních, která se má nastavit pro robota. Může to být celé číslo. |
# 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)
Gettery#
get_heading#
Směr je směr, kterým je robotův mozek otočen, měřený ve stupních. get_heading vrací tento směr od 0 do 359 stupňů.
Výchozí směr robota je 0 stupňů.

Usage:
drivetrain.get_heading()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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#
Rotace udává, o kolik se robot otočil, měřeno ve stupních. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. get_rotation vrací aktuální rotaci robota.
Otočení doprava zvětšuje rotaci a otočení doleva ji snižuje. Například provedení dvou celých otoček doprava vrátí rotaci o 720 stupňů.

Usage:
drivetrain.get_rotation()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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#
Funkce get_velocity vrací rychlost robota v procentech od -100 % do 100 %.
Kladná hodnota znamená, že robot jede vpřed. Záporná hodnota znamená, že robot jede vzad.
Usage:
drivetrain.get_velocity()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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#
Stáčení udává, o kolik se robot otočil doleva nebo doprava od své výchozí polohy, měřeno ve stupních. get_yaw vrací aktuální hodnotu stáčení robota.
Otočení doprava zvyšuje hodnotu stáčení a otáčení doleva hodnotu stáčení snižuje.
Usage:
drivetrain.get_yaw()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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#
Naklonění udává, o kolik se robot nakloní doleva nebo doprava, měřeno ve stupních. get_roll vrací aktuální hodnotu naklonění robota.
S Brain otočeným dopředu se nakloněním doleva hodnota klopení zvyšuje a nakloněním doprava se hodnota klopení snižuje.
Usage:
drivetrain.get_roll()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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#
Náklon udává, o kolik se robot nakloní dopředu nebo dozadu, měřeno ve stupních. get_pitch vrací aktuální hodnotu náklonu robota.
S mozkem otočeným dopředu se nakloněním dopředu zvyšuje výška tónu a nakloněním dozadu se výška tónu snižuje.
Usage:
drivetrain.get_pitch()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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 vrací, zda robot detekoval havárii, jako booleovskou hodnotu.
True— Byla detekována havárie.False— Havárie nebyla detekována.
Usage:
drivetrain.get_crashed()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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 vrací hodnotu, zda robot dokončil pohyb, jako booleovskou hodnotu. Tuto hodnotu lze použít k řízení načasování dalších chování na základě pohybu robota.
True— Robot dokončil pohyb.False— Robot se stále pohybuje.
Tato metoda spolupracuje s následujícími metodami drivetrainu, které mají parametr wait : drive_for, drive_until, turn_for, turn_to_heading a turn_to_rotation.
Usage:
drivetrain.is_stopped()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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)