Hệ thống truyền động#
Giới thiệu#
Hệ thống truyền động bao gồm bánh xe và động cơ điều khiển cách robot di chuyển và rẽ. Hệ thống truyền động có thể được tìm thấy trong các mô hình như Code Base 2.0, Super Car, hoặc robot tự chế.
Hệ thống truyền động sử dụng Cảm biến quán tính trong Bộ não để phát hiện va chạm và giúp robot di chuyển và quay chính xác. Khi bắt đầu mỗi dự án, hệ thống truyền động sẽ tự động hiệu chỉnh Cảm biến quán tính. Giữ robot đứng yên trong khoảng 2 giây trong quá trình hiệu chỉnh để robot có thể di chuyển và quay chính xác.
Có rất nhiều cách để lập trình hệ thống truyền động. Dưới đây là danh sách tất cả các phương pháp lập trình hệ thống truyền động:
Thao tác — Di chuyển và xoay robot.
drive— Di chuyển robot tiến hoặc lùi mãi mãi.drive_for— Di chuyển robot tiến hoặc lùi một khoảng cách cụ thể.drive_until— Di chuyển robot về phía trước cho đến khi Cảm biến Mắt phát hiện vật thể hoặc robot phát hiện va chạm.turn— Xoay robot sang trái hoặc phải mãi mãi.turn_for— Xoay robot sang trái hoặc phải một số độ cụ thể.turn_to_heading— Xoay robot để hướng về một hướng cụ thể từ -359 đến 359 độ. Robot sẽ xoay theo hướng ngắn nhất để đạt được hướng mục tiêu.turn_to_rotation— Xoay robot theo hướng cụ thể.stop— Dừng chuyển động của robot.
Bộ điều chỉnh — Điều chỉnh các thiết lập hệ thống truyền động.
set_drive_velocity— Cho robot biết tốc độ lái xe.set_turn_velocity— Cho robot biết tốc độ quay.set_stopping— Cho biết cách robot sẽ dừng di chuyển: bằng cách phanh, trượt hoặc giữ nguyên.set_timeout— Đặt thời gian robot sẽ cố gắng hoàn thành một chuyển động.set_heading— Thay đổi hướng hiện tại của robot thành một hướng mới.set_rotation— Thay đổi hướng quay hiện tại của robot thành hướng quay mới.
Người nhận hàng — Kiểm tra trạng thái di chuyển.
get_heading— Trả về hướng hiện tại của robot từ 0 đến 359 độ.get_rotation— Trả về góc quay hiện tại của robot.get_velocity— Trả về tốc độ di chuyển của robot, dưới dạng phần trăm từ -100% đến 100%.get_yaw— Trả về góc yaw hiện tại của robot.get_roll— Trả về kết quả tung xúc xắc hiện tại của robot.get_pitch— Trả về độ nghiêng hiện tại của robot.get_crashed— Trả về giá trị Boolean cho biết robot có phát hiện va chạm hay không.is_stopped— Trả về giá trị Boolean cho biết robot đã dừng di chuyển hay chưa.
Hành động#
drive#
Phím drive cho phép robot di chuyển tiến hoặc lùi liên tục. Robot sẽ tiếp tục di chuyển cho đến khi nhận được lệnh khác, chẳng hạn như rẽ hoặc dừng lại.
Usage:
drivetrain.drive(direction)
Thông số |
Sự miêu tả |
|---|---|
|
Hướng di chuyển của 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 di chuyển robot tiến hoặc lùi một khoảng cách cụ thể.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
Thông số |
Sự miêu tả |
|---|---|
|
Hướng di chuyển của robot: |
|
Quãng đường robot di chuyển. Đây có thể là số nguyên hoặc số thập phân. |
|
Tùy chọn. Đơn vị khoảng cách: |
|
Tùy chọn. |
# 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 cho phép robot di chuyển về phía trước cho đến khi cảm biến mắt phát hiện vật thể hoặc robot phát hiện va chạm.
Usage:
drivetrain.drive_until(condition, wait)
Thông số |
Sự miêu tả |
|---|---|
|
Điều kiện khiến robot dừng lại: |
|
Tùy chọn. |
# 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 sẽ khiến robot quay sang trái hoặc phải liên tục. Robot sẽ tiếp tục quay cho đến khi nhận được lệnh thực hiện hành động khác, ví dụ như chuyển từ lái sang dừng lại.
Usage:
drivetrain.turn(direction)
Thông số |
Sự miêu tả |
|---|---|
|
Hướng quay của 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 xoay robot sang trái hoặc phải một số độ nhất định. Góc xoay được tính tương đối so với vị trí hiện tại của robot.
Usage:
drivetrain.turn_for(direction, angle, wait)
Thông số |
Sự miêu tả |
|---|---|
|
Hướng quay của robot: |
|
Số độ mà robot quay. Số này có thể là số nguyên hoặc số thập phân. |
|
Tùy chọn. |
# 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#
Hướng quay là hướng mà bộ não của robot đang hướng tới, được đo bằng độ. Lệnh turn_to_heading sẽ xoay robot để hướng về một hướng cụ thể từ -359 đến 359 độ. Robot sẽ quay theo hướng ngắn nhất để đạt được hướng mục tiêu.
Hướng ban đầu là 0 độ.

Usage:
drivetrain.turn_to_heading(angle, wait)
Thông số |
Sự miêu tả |
|---|---|
|
Hướng mà robot cần quay mặt được biểu thị bằng một số nguyên, từ -359 đến 359 độ. |
|
Tùy chọn. |
# 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 xoay robot theo một hướng cụ thể.
Góc quay là mức độ robot đã quay, được đo bằng độ. Khi bắt đầu một dự án, giá trị góc quay được đặt là 0 độ. Góc quay cũng có thể được đặt bằng cách sử dụng set_rotation.
Các giá trị xoay là tuyệt đối. Điều này có nghĩa là hướng quay phụ thuộc vào góc xoay hiện tại của robot. Xoay sang phải sẽ làm tăng góc xoay, và xoay sang trái sẽ làm giảm góc xoay.
Ví dụ, nếu robot bắt đầu ở 0 độ và bạn xoay nó một góc 720 độ, nó sẽ quay sang phải hai lần. Nếu sau đó bạn xoay nó một góc 360 độ, nó sẽ quay sang trái một lần, vì 360 nhỏ hơn 720.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Thông số |
Sự miêu tả |
|---|---|
|
Góc quay, tính bằng độ, mà robot sẽ xoay tới. Giá trị này có thể là số nguyên. |
|
Tùy chọn. |
# 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 dừng chuyển động của robot.
Usage:
drivetrain.stop()
Thông số |
Sự miêu tả |
|---|---|
Phương pháp này không có tham số. |
# 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)
Biến đổi#
set_drive_velocity#
set_drive_velocity cho robot biết tốc độ di chuyển. Tỷ lệ phần trăm càng cao thì robot càng di chuyển nhanh hơn và tỷ lệ phần trăm càng thấp thì robot càng di chuyển chậm hơn.
Mỗi dự án đều bắt đầu với việc robot di chuyển ở tốc độ mặc định là 50%.
Lưu ý: Vận tốc cao hơn giúp robot di chuyển nhanh hơn, nhưng có thể kém chính xác hơn. Vận tốc thấp hơn giúp robot di chuyển chậm hơn, nhưng chính xác hơn.
Usage:
drivetrain.set_drive_velocity(velocity)
Thông số |
Sự miêu tả |
|---|---|
|
Tốc độ lái xe từ 0% đến 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 cho robot biết tốc độ quay. Tỷ lệ phần trăm càng cao thì robot càng quay nhanh hơn và tỷ lệ phần trăm càng thấp thì robot càng quay chậm hơn.
Mỗi dự án đều bắt đầu với việc robot quay ở tốc độ 50% theo mặc định.
Lưu ý: Vận tốc cao hơn làm cho robot quay nhanh hơn, nhưng có thể kém chính xác hơn. Vận tốc thấp hơn làm cho robot quay chậm hơn, nhưng chính xác hơn.
Usage:
drivetrain.set_turn_velocity(velocity)
Thông số |
Sự miêu tả |
|---|---|
|
Tốc độ quay từ 0% đến 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 thiết lập cách robot sẽ dừng chuyển động: bằng cách phanh, chạy trượt hoặc giữ nguyên vị trí.
Usage:
drivetrain.set_stopping(brake)
Thông số |
Sự miêu tả |
|---|---|
|
Cách robot dừng lại:
|
Nếu không sử dụng phương pháp này, robot sẽ sử dụng BRAKE khi dừng lại.
# 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 thiết lập khoảng thời gian robot sẽ cố gắng hoàn thành một chuyển động. Nếu robot không thể hoàn thành trong thời gian đó, nó sẽ ngừng cố gắng và chuyển sang dòng mã tiếp theo. Điều này giúp robot không bị kẹt ở một chuyển động nào đó.
Usage:
drivetrain.set_timeout(value, units)
Thông số |
Sự miêu tả |
|---|---|
|
Khoảng thời gian tối đa mà robot có thể cố gắng hoàn thành một chuyển động. Khoảng thời gian này có thể là số nguyên hoặc số thập phân. |
|
Tùy chọn. Đơn vị thời gian: |
# 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#
Hướng (heading) là hướng mà bộ não của robot đang đối mặt, được đo bằng độ. Lệnh set_heading thay đổi hướng hiện tại của robot thành một giá trị hướng mới.
Ví dụ, nếu robot đã quay mặt sang phải, việc đặt hướng quay về 0 độ sẽ biến vị trí quay mặt sang phải đó thành 0 độ mới. Sau đó, robot có thể quay đến các vị trí khác dựa trên hướng quay mới đó.
Usage:
drivetrain.set_heading(value)
Thông số |
Sự miêu tả |
|---|---|
|
Giá trị góc quay, tính bằng độ, cần thiết lập cho robot. Giá trị này có thể là một số nguyên từ 0 đến 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#
Góc quay là mức độ robot đã xoay, được đo bằng độ. Khi bắt đầu một dự án, giá trị góc quay được đặt là 0 độ. Lệnh set_rotation thay đổi góc quay hiện tại của robot thành một giá trị mới.
Ví dụ, nếu robot đã quay hai vòng hoàn chỉnh sang phải, giá trị góc quay của nó sẽ là 720 độ. Việc đặt góc quay về 0 độ sẽ thiết lập lại góc quay từ 720 độ về 0 độ. Sau đó, robot có thể quay theo các hướng dựa trên giá trị mới đó.
Usage:
drivetrain.set_rotation(value)
Thông số |
Sự miêu tả |
|---|---|
|
Giá trị góc quay, tính bằng độ, cần thiết lập cho robot. Giá trị này có thể là một số nguyên. |
# 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)
Người nhận#
get_heading#
Hướng (heading) là hướng mà não của robot đang nhìn, được đo bằng độ. Lệnh get_heading trả về hướng đó từ 0 đến 359 độ.
Hướng di chuyển ban đầu của robot là 0 độ.

Usage:
drivetrain.get_heading()
Thông số |
Sự miêu tả |
|---|---|
Phương pháp này không có tham số. |
# 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#
Góc quay là mức độ robot đã xoay, được đo bằng độ. Khi bắt đầu một dự án, giá trị góc quay được đặt là 0 độ. Lệnh get_rotation trả về góc quay hiện tại của robot.
Xoay sang phải sẽ làm tăng góc quay, và xoay sang trái sẽ làm giảm góc quay. Ví dụ, xoay hai vòng sang phải sẽ tạo ra góc quay 720 độ.

Usage:
drivetrain.get_rotation()
Thông số |
Sự miêu tả |
|---|---|
Phương pháp này không có tham số. |
# 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 trả về tốc độ di chuyển của robot, được biểu thị bằng phần trăm từ -100% đến 100%.
Giá trị dương có nghĩa là robot đang di chuyển về phía trước. Giá trị âm có nghĩa là robot đang di chuyển về phía sau.
Usage:
drivetrain.get_velocity()
Thông số |
Sự miêu tả |
|---|---|
Phương pháp này không có tham số. |
# 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#
Góc Yaw là mức độ robot quay sang trái hoặc phải so với vị trí ban đầu, được đo bằng độ. get_yaw trả về giá trị góc yaw hiện tại của robot.
Rẽ phải làm tăng giá trị góc quay ngang, và rẽ trái làm giảm giá trị góc quay ngang.
Usage:
drivetrain.get_yaw()
Thông số |
Sự miêu tả |
|---|---|
Phương pháp này không có tham số. |
# 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 là mức độ robot nghiêng sang trái hoặc phải, được đo bằng độ. get_roll trả về giá trị roll hiện tại của robot.
Khi não bộ hướng về phía trước, nghiêng sang trái sẽ làm tăng giá trị cuộn, và nghiêng sang phải sẽ làm giảm giá trị cuộn.
Usage:
drivetrain.get_roll()
Thông số |
Sự miêu tả |
|---|---|
Phương pháp này không có tham số. |
# 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#
Góc nghiêng (Pitch) là mức độ robot nghiêng về phía trước hoặc phía sau, được đo bằng độ. get_pitch trả về giá trị góc nghiêng hiện tại của robot.
Khi não bộ hướng về phía trước, nghiêng về phía trước sẽ làm tăng giá trị cao độ, và nghiêng về phía sau sẽ làm giảm giá trị cao độ.
Usage:
drivetrain.get_pitch()
Thông số |
Sự miêu tả |
|---|---|
Phương pháp này không có tham số. |
# 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 trả về giá trị Boolean cho biết robot có phát hiện va chạm hay không.
True— Đã phát hiện sự cố.False— Không phát hiện thấy sự cố nào.
Usage:
drivetrain.get_crashed()
Thông số |
Sự miêu tả |
|---|---|
Phương pháp này không có tham số. |
# 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 trả về giá trị Boolean cho biết robot đã dừng di chuyển hay chưa. Giá trị này có thể được sử dụng để điều khiển thời gian thực hiện các hành vi khác dựa trên chuyển động của robot.
True— Robot đã di chuyển xong.False— Robot vẫn đang di chuyển.
Phương pháp này hoạt động cùng với các phương pháp hệ thống truyền động sau có tham số wait : drive_for, drive_until, turn_for, turn_to_heading, và turn_to_rotation.
Usage:
drivetrain.is_stopped()
Thông số |
Sự miêu tả |
|---|---|
Phương pháp này không có tham số. |
# 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)