Sistem penggerak#
Perkenalan#
Sistem penggerak mencakup roda dan motor yang mengontrol cara robot bergerak dan berbelok. Sistem penggerak dapat ditemukan pada robot seperti Code Base 2.0, Super Car, atau robot kustom.
Sistem penggerak menggunakan Sensor Inersia di Otak untuk mendeteksi benturan dan membantu robot bergerak dan berbelok dengan tepat. Pada awal setiap proyek, sistem penggerak secara otomatis mengkalibrasi Sensor Inersia. Jaga agar robot tetap diam selama sekitar 2 detik selama kalibrasi, sehingga robot dapat bergerak dan berbelok dengan benar.
Ada banyak cara untuk memprogram sistem penggerak (drivetrain). Berikut adalah daftar semua metode pemrograman sistem penggerak:
Aksi — Gerakkan dan putar robot.
drive— Menggerakkan robot maju atau mundur selamanya.drive_for— Menggerakkan robot maju atau mundur sejauh jarak tertentu.drive_until— Menggerakkan robot ke depan hingga Sensor Mata mendeteksi suatu objek atau robot mendeteksi tabrakan.turn— Memutar robot ke kiri atau ke kanan selamanya.turn_for— Memutar robot ke kiri atau ke kanan dengan jumlah derajat tertentu.turn_to_heading— Memutar robot untuk menghadap arah tertentu dari -359 hingga 359 derajat. Robot akan berbelok ke arah terpendek untuk mencapai arah target.turn_to_rotation— Memutar robot ke rotasi tertentu.stop— Menghentikan pergerakan robot.
Mutator — Sesuaikan pengaturan sistem penggerak.
set_drive_velocity— Memberi tahu robot seberapa cepat harus bergerak.set_turn_velocity— Memberi tahu robot seberapa cepat harus berbelok.set_stopping— Memberitahukan bagaimana robot akan berhenti bergerak: dengan mengerem, meluncur, atau berhenti.set_timeout— Menentukan berapa lama robot akan mencoba menyelesaikan suatu gerakan.set_heading— Mengubah arah robot saat ini ke arah yang baru.set_rotation— Mengubah rotasi robot saat ini ke rotasi baru.
Pengambil — Periksa status pergerakan.
get_heading— Mengembalikan arah haluan robot saat ini dari 0 hingga 359 derajat.get_rotation— Mengembalikan rotasi robot saat ini.get_velocity— Mengembalikan seberapa cepat robot mengemudi, sebagai persentase dari -100% hingga 100%.get_yaw— Mengembalikan yaw robot saat ini.get_roll— Mengembalikan hasil lemparan dadu robot saat ini.get_pitch— Mengembalikan pitch robot saat ini.get_crashed— Mengembalikan nilai Boolean apakah robot telah mendeteksi tabrakan.is_stopped— Mengembalikan nilai Boolean apakah robot telah selesai bergerak.
Tindakan#
drive#
Perintah drive menggerakkan robot maju atau mundur tanpa henti. Robot akan terus bergerak hingga diberi perintah lain, seperti berbelok atau berhenti.
Usage:
drivetrain.drive(direction)
Parameter |
Keterangan |
|---|---|
|
Arah pergerakan robot: |
# 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 menggerakkan robot maju atau mundur sejauh jarak tertentu.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
Parameter |
Keterangan |
|---|---|
|
Arah pergerakan robot: |
|
Jarak yang ditempuh robot. Ini bisa berupa bilangan bulat atau desimal. |
|
Opsional. Satuan jarak: |
|
Opsional. |
# 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 menggerakkan robot maju hingga Sensor Mata mendeteksi suatu objek atau robot mendeteksi tabrakan.
Usage:
drivetrain.drive_until(condition, wait)
Parameter |
Keterangan |
|---|---|
|
Kondisi yang menghentikan robot: |
|
Opsional. |
# 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#
Perintah turn akan memutar robot ke kiri atau ke kanan selamanya. Robot akan terus berputar hingga diberi perintah lain, seperti mengemudi lalu berhenti.
Usage:
drivetrain.turn(direction)
Parameter |
Keterangan |
|---|---|
|
Arah putaran robot: |
# 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 memutar robot ke kiri atau ke kanan sejumlah derajat tertentu. Putaran tersebut relatif terhadap posisi robot saat ini.
Usage:
drivetrain.turn_for(direction, angle, wait)
Parameter |
Keterangan |
|---|---|
|
Arah putaran robot: |
|
Jumlah derajat putaran robot. Ini bisa berupa bilangan bulat atau desimal. |
|
Opsional. |
# 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#
Arah haluan adalah arah yang dihadapi otak robot, diukur dalam derajat. turn_to_heading memutar robot untuk menghadap arah haluan tertentu dari -359 hingga 359 derajat. Robot akan berbelok melalui arah terpendek untuk mencapai arah haluan target.
Arah awal adalah 0 derajat.

Usage:
drivetrain.turn_to_heading(angle, wait)
Parameter |
Keterangan |
|---|---|
|
Arah yang harus dihadapi robot berupa bilangan bulat, dari -359 hingga 359 derajat. |
|
Opsional. |
# 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 memutar robot ke rotasi tertentu.
Rotasi adalah seberapa banyak robot telah berputar, diukur dalam derajat. Pada awal proyek, nilai rotasi diatur ke 0 derajat. Rotasi juga dapat diatur menggunakan set_rotation.
Nilai rotasi bersifat absolut. Artinya, arah putaran bergantung pada rotasi robot saat ini. Berbelok ke kanan akan meningkatkan rotasi, dan berbelok ke kiri akan mengurangi rotasi.
Sebagai contoh, jika robot mulai dari 0 derajat dan Anda memutarnya hingga mencapai rotasi 720 derajat, robot akan berbelok ke kanan dua kali. Jika kemudian Anda memutarnya hingga mencapai rotasi 360 derajat, robot akan berbelok ke kiri sekali, karena 360 kurang dari 720.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Parameter |
Keterangan |
|---|---|
|
Nilai rotasi, dalam derajat, yang akan dilakukan robot. Nilai ini dapat berupa bilangan bulat. |
|
Opsional. |
# 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 menghentikan pergerakan robot.
Usage:
drivetrain.stop()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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)
Mutator#
set_drive_velocity#
set_drive_velocity memberi tahu robot seberapa cepat ia harus bergerak. Persentase yang lebih tinggi membuat robot bergerak lebih cepat dan persentase yang lebih rendah membuat robot bergerak lebih lambat.
Setiap proyek dimulai dengan robot yang bergerak dengan kecepatan 50% secara default.
Catatan: Kecepatan yang lebih tinggi membuat robot bergerak lebih cepat, tetapi mungkin kurang presisi. Kecepatan yang lebih rendah membuat robot bergerak lebih lambat, tetapi lebih presisi.
Usage:
drivetrain.set_drive_velocity(velocity)
Parameter |
Keterangan |
|---|---|
|
Kecepatan berkendara berkisar dari 0% hingga 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 memberi tahu robot seberapa cepat harus berbelok. Persentase yang lebih tinggi membuat robot berbelok lebih cepat dan persentase yang lebih rendah membuat robot berbelok lebih lambat.
Setiap proyek dimulai dengan robot yang berputar dengan kecepatan 50% secara default.
Catatan: Kecepatan yang lebih tinggi membuat robot berbelok lebih cepat, tetapi mungkin kurang presisi. Kecepatan yang lebih rendah membuat robot berbelok lebih lambat, tetapi lebih presisi.
Usage:
drivetrain.set_turn_velocity(velocity)
Parameter |
Keterangan |
|---|---|
|
Kecepatan untuk berbelok berkisar dari 0% hingga 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 mengatur bagaimana robot akan berhenti bergerak: dengan mengerem, meluncur, atau berhenti.
Usage:
drivetrain.set_stopping(brake)
Parameter |
Keterangan |
|---|---|
|
Cara robot berhenti:
|
Jika metode ini tidak digunakan, robot akan menggunakan BRAKE saat berhenti.
# 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 mengatur berapa lama robot akan mencoba menyelesaikan suatu gerakan. Jika robot tidak dapat menyelesaikannya dalam waktu tersebut, robot akan berhenti mencoba dan melanjutkan ke baris kode berikutnya. Ini mencegah robot terjebak pada suatu gerakan.
Usage:
drivetrain.set_timeout(value, units)
Parameter |
Keterangan |
|---|---|
|
Jumlah waktu yang dapat diberikan robot untuk mencoba menyelesaikan suatu gerakan. Ini bisa berupa bilangan bulat atau desimal. |
|
Opsional. Satuan waktu: |
# 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#
Heading adalah arah yang dihadapi otak robot, diukur dalam derajat. set_heading mengubah heading robot saat ini ke nilai heading baru.
Sebagai contoh, jika robot telah berputar menghadap ke kanan, mengatur arah menjadi 0 derajat akan menjadikan posisi menghadap ke kanan tersebut sebagai 0 derajat yang baru. Kemudian robot dapat berputar ke posisi lain berdasarkan arah yang baru tersebut.
Usage:
drivetrain.set_heading(value)
Parameter |
Keterangan |
|---|---|
|
Nilai arah, dalam derajat, yang akan diatur untuk robot. Ini bisa berupa bilangan bulat dari 0 hingga 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#
Rotasi adalah seberapa banyak robot telah berputar, diukur dalam derajat. Pada awal proyek, nilai rotasi diatur ke 0 derajat. Perintah set_rotation mengubah rotasi robot saat ini ke nilai baru.
Sebagai contoh, jika robot telah melakukan dua putaran penuh ke kanan, nilai rotasinya akan menjadi 720 derajat. Mengatur rotasi ke 0 derajat akan mengatur ulang rotasi tersebut dari 720 menjadi 0 derajat. Kemudian robot dapat berputar berdasarkan nilai rotasi yang baru tersebut.
Usage:
drivetrain.set_rotation(value)
Parameter |
Keterangan |
|---|---|
|
Nilai rotasi, dalam derajat, yang akan diatur untuk robot. Ini bisa berupa bilangan bulat. |
# 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)
Pencari#
get_heading#
Heading adalah arah yang dihadapi otak robot, diukur dalam derajat. get_heading mengembalikan heading tersebut dari 0 hingga 359 derajat.
Arah awal pergerakan robot adalah 0 derajat.

Usage:
drivetrain.get_heading()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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#
Rotasi adalah seberapa banyak robot telah berputar, diukur dalam derajat. Pada awal proyek, nilai rotasi diatur ke 0 derajat. get_rotation mengembalikan rotasi robot saat ini.
Memutar ke kanan akan meningkatkan putaran, dan memutar ke kiri akan mengurangi putaran. Misalnya, melakukan dua putaran penuh ke kanan akan menghasilkan putaran sebesar 720 derajat.

Usage:
drivetrain.get_rotation()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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 mengembalikan seberapa cepat robot bergerak, sebagai persentase dari -100% hingga 100%.
Nilai positif berarti robot bergerak maju. Nilai negatif berarti robot bergerak mundur.
Usage:
drivetrain.get_velocity()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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#
Yaw adalah seberapa jauh robot telah berbelok ke kiri atau ke kanan dari posisi awalnya, diukur dalam derajat. get_yaw mengembalikan nilai yaw robot saat ini.
Berbelok ke kanan meningkatkan nilai yaw, dan berbelok ke kiri menurunkan nilai yaw.
Usage:
drivetrain.get_yaw()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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 adalah seberapa besar robot miring ke kiri atau ke kanan, diukur dalam derajat. get_roll mengembalikan nilai roll robot saat ini.
Dengan posisi Otak menghadap ke depan, memiringkan ke kiri akan meningkatkan nilai putaran, dan memiringkan ke kanan akan mengurangi nilai putaran.
Usage:
drivetrain.get_roll()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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#
Pitch adalah seberapa besar robot miring ke depan atau ke belakang, diukur dalam derajat. get_pitch mengembalikan nilai pitch robot saat ini.
Dengan posisi otak menghadap ke depan, memiringkan ke depan akan meningkatkan nilai pitch, dan memiringkan ke belakang akan menurunkan nilai pitch.
Usage:
drivetrain.get_pitch()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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 mengembalikan nilai Boolean yang menunjukkan apakah robot telah mendeteksi tabrakan.
True— Sebuah kerusakan telah terdeteksi.False— Tidak ada kerusakan yang terdeteksi.
Usage:
drivetrain.get_crashed()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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 mengembalikan nilai Boolean yang menunjukkan apakah robot telah selesai bergerak. Ini dapat digunakan untuk mengontrol waktu perilaku lain berdasarkan pergerakan robot.
True— Robot telah selesai bergerak.False— Robot masih bergerak.
Metode ini bekerja bersama dengan metode penggerak berikut yang memiliki parameter wait : drive_for, drive_until, turn_for, turn_to_heading, dan turn_to_rotation.
Usage:
drivetrain.is_stopped()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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)