Hệ thống truyền động#

Giới thiệu#

Hệ thống truyền động điều khiển cách robot VR di chuyển và xoay hướng. Hệ thống truyền động có thể tiến hoặc lùi, rẽ trái hoặc phải, xoay theo hướng mong muốn và theo dõi chuyển động quay của nó.

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ể.

  • 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 độ.

  • 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_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.

  • set_timeout — Đặt khoảng thời gian robot sẽ cố gắng hoàn thành một chuyển động.

  • set_drive_velocity — Cho robot biết tốc độ lái xe.

  • set_turn_velocity — Cho robot biết tốc độ quay.

Bộ phận truyền động — Kiểm tra trạng thái hệ thống truyền động.

  • heading — Trả về hướng hiện tại của robot từ 0 đến 359,99 độ.

  • rotation — Trả về góc xoay hiện tại của robot.

  • is_done — Trả về giá trị Boolean cho biết robot đã hoàn thành việc di chuyển hay chưa.

  • is_moving — Trả về giá trị Boolean cho biết robot có đang di chuyển hay không.

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ả

direction

Hướng di chuyển của robot: FORWARD hoặc REVERSE.

def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# VR threads — Do not delete
vr_thread(main)

drive_for#

Lệnh drive_for di chuyển robot tiến hoặc lùi một khoảng cách cụ thể. Chương trình sẽ đợi cho đến khi robot hoàn thành việc di chuyển trước khi dòng mã tiếp theo được thực thi.

Usage:
drivetrain.drive_for(direction, distance, units, wait)

Thông số

Sự miêu tả

direction

Hướng di chuyển của robot: FORWARD hoặc REVERSE.

distance

Quãng đường robot di chuyển. Giá trị này có thể là số nguyên integer hoặc số thập phân (float).

units

Tùy chọn. Đơn vị khoảng cách: INCHES (mặc định) hoặc MM (milimet).

wait

Tùy chọn. wait=True (mặc định) khiến dự án chờ cho đến khi robot hoàn thành chuyển động trước khi dòng mã tiếp theo được thực thi. wait=False khiến dòng mã tiếp theo được thực thi ngay lập tức.

def main():
    # Drive forward and backward
    drivetrain.drive_for(FORWARD, 200, MM)
    drivetrain.drive_for(REVERSE, 200, MM)

# VR threads — Do not delete
vr_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, chẳng hạn như lái xe hoặc dừng lại.

Usage:
drivetrain.turn(direction)

Thông số

Sự miêu tả

direction

Hướng quay của robot: LEFT hoặc RIGHT.

def main():
    # Turn right and left, then stop
    drivetrain.turn(RIGHT)
    wait(2, SECONDS)
    drivetrain.turn(LEFT)
    wait(2, SECONDS)
    drivetrain.stop()

# VR threads — Do not delete
vr_thread(main)

turn_for#

Lệnh turn_for cho phép robot quay sang trái hoặc phải một số độ nhất định. Góc quay được tính tương đối so với vị trí hiện tại của robot. Chương trình sẽ chờ cho đến khi robot quay xong trước khi thực thi dòng mã tiếp theo.

Usage:
drivetrain.turn_for(direction, angle, units, wait)

Thông số

Sự miêu tả

direction

Hướng quay của robot: LEFT hoặc RIGHT.

angle

Số độ mà robot quay. Giá trị này có thể là số nguyên integer hoặc số thập phân (float).

units

Tùy chọn. Đơn vị xoay: DEGREES (mặc định).

wait

Tùy chọn. wait=True (mặc định) khiến dự án chờ cho đến khi robot quay xong trước khi dòng mã tiếp theo được thực thi. wait=False khiến dòng mã tiếp theo được thực thi ngay lập tức.

def main():
    # Turn the robot right and left
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_for(LEFT, 90, DEGREES)

# VR threads — Do not delete
vr_thread(main)

turn_to_heading#

Hướng quay là hướng mà robot đang đối mặt, được đo bằng độ. Lệnh turn_to_heading sẽ xoay robot để quay 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 di chuyển ban đầu của robot là 0 độ.

Dự án sẽ chờ cho đến khi robot hoàn thành việc quay trước khi dòng mã tiếp theo được thực thi.

Usage:
drivetrain.turn_to_heading(angle, units, wait)

Thông số

Sự miêu tả

angle

Hướng mà robot nên đối mặt, tính bằng độ. Giá trị này có thể là số nguyên integer hoặc số thập phân (float) từ -359 đến 359.

units

Tùy chọn. Đơn vị xoay: DEGREES (mặc định).

wait

Tùy chọn. wait=True (mặc định) khiến dự án chờ cho đến khi robot quay xong trước khi dòng mã tiếp theo được thực thi. wait=False khiến dòng mã tiếp theo được thực thi ngay lập tức.

def main():
    # Turn to face the cardinal directions
    drivetrain.turn_to_heading(90, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(180, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(270, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(0, DEGREES)

# VR threads — Do not delete
vr_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 phương pháp 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.

Dự án sẽ chờ cho đến khi robot hoàn thành việc quay trước khi dòng mã tiếp theo được thực thi.

Usage:
drivetrain.turn_to_rotation(angle, units, wait)

Thông số

Sự miêu tả

angle

Giá trị góc quay, tính bằng độ, mà robot sẽ quay tới. Giá trị này có thể là số nguyên integer hoặc số thập phân (float).

units

Tùy chọn. Đơn vị xoay: DEGREES (mặc định).

wait

Tùy chọn. wait=True (mặc định) khiến dự án chờ cho đến khi robot quay xong trước khi dòng mã tiếp theo được thực thi. wait=False khiến dòng mã tiếp theo được thực thi ngay lập tức.

def main():
    # Turn left, then spin in a circle
    # clockwise and face right
    drivetrain.turn_to_rotation(-90, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_rotation(450, DEGREES)

# VR threads — Do not delete
vr_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ố.

def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# VR threads — Do not delete
vr_thread(main)

Biến đổi#

set_heading#

Hướng di chuyển là hướng mà robot đang đối mặt, được đo bằng độ. Lệnh set_heading thay đổi hướng di chuyển hiện tại của robot thành một giá trị hướng di chuyển 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(heading, units)

Thông số

Sự miêu tả

heading

Giá trị hướng, tính bằng độ, cần thiết lập cho robot. Giá trị này có thể là số nguyên integer hoặc số thập phân (float).

units

Tùy chọn. Đơn vị hướng: DEGREES (mặc định).

def main():
    # Face the new 0 degrees
    drivetrain.set_heading(90, DEGREES)
    drivetrain.turn_to_heading(0, DEGREES)

# VR threads — Do not delete
vr_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(rotation, units)

Thông số

Sự miêu tả

rotation

Giá trị xoay, tính bằng độ, cần thiết lập cho robot. Giá trị này có thể là số nguyên integer hoặc số thập phân (float).

units

Tùy chọn. Đơn vị xoay: DEGREES (mặc định).

def main():
    # Spin counterclockwise two times
    drivetrain.set_rotation(720, DEGREES)
    drivetrain.turn_to_rotation(0, DEGREES)

# VR threads — Do not delete
vr_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ả

value

The amount of time the robot can try to finish a movement. This can be a positive integer or decimal (float).

units

Tùy chọn. Đơn vị thời gian: SECONDS (mặc định) hoặc MSEC (mili giây).

def main():
    # Turn right after driving forward
    drivetrain.set_timeout(1, SECONDS)
    drivetrain.drive_for(FORWARD, 25, INCHES)
    drivetrain.turn_for(RIGHT, 90)

# VR threads — Do not delete
vr_thread(main)

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 có thể chính xác hơn.

Usage:
drivetrain.set_drive_velocity(velocity, units)

Thông số

Sự miêu tả

velocity

Tốc độ lái xe từ 0% đến 100%. Giá trị này có thể là số nguyên integer hoặc số thập phân (float).

units

Tùy chọn. Đơn vị vận tốc: PERCENT (mặc định).

def main():
    # Drive forward at different velocities
    # Default velocity
    drivetrain.drive_for(FORWARD, 150, MM)
    wait(1, SECONDS)
    # Drive slower
    drivetrain.set_drive_velocity(20, PERCENT)
    drivetrain.drive_for(FORWARD, 150, MM)
    wait(1, SECONDS)
    # Drive faster
    drivetrain.set_drive_velocity(100, PERCENT)
    drivetrain.drive_for(FORWARD, 150, MM)

# VR threads — Do not delete
vr_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 quay càng nhanh, tỷ lệ phần trăm càng thấp thì robot quay càng chậm.

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 có thể chính xác hơn.

Usage:
drivetrain.set_turn_velocity(velocity, units)

Thông số

Sự miêu tả

velocity

Tốc độ quay từ 0% đến 100%. Giá trị này có thể là số nguyên integer hoặc số thập phân (float).

units

Tùy chọn. Đơn vị vận tốc: PERCENT (mặc định).

def main():
    # Turn at different velocities
    # Default velocity
    drivetrain.turn_for(RIGHT, 120, DEGREES)
    wait(1, SECONDS)
    # Turn slower
    drivetrain.set_turn_velocity(20, PERCENT)
    drivetrain.turn_for(RIGHT, 120, DEGREES)
    wait(1, SECONDS)
    # Turn faster
    drivetrain.set_turn_velocity(100, PERCENT)
    drivetrain.turn_for(RIGHT, 120, DEGREES)

# VR threads — Do not delete
vr_thread(main)

Người nhận#

heading#

Hướng di chuyển là hướng mà robot đang đối mặt, được đo bằng độ. Lệnh heading trả về hướng di chuyển hiện tại của robot từ 0 đến 359,99 độ.

Hướng di chuyển ban đầu của robot là 0 độ.

Usage:
drivetrain.heading(units)

Thông số

Sự miêu tả

units

Tùy chọn. Đơn vị hướng: DEGREES (mặc định).

def main():
    # Display the heading after turning
    drivetrain.turn_for(RIGHT, 450, DEGREES)
    brain.print("Heading: ")
    brain.print(drivetrain.heading(DEGREES))

# VR threads — Do not delete
vr_thread(main)

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 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.rotation(units)

Thông số

Sự miêu tả

units

Tùy chọn. Đơn vị xoay: DEGREES (mặc định).

def main():
    # Display the rotation after turning
    drivetrain.turn_for(RIGHT, 450, DEGREES)
    brain.print("Rotation: ")
    brain.print(drivetrain.rotation(DEGREES))

# VR threads — Do not delete
vr_thread(main)

is_done#

is_done trả về giá trị Boolean cho biết robot đã di chuyển xong hay chưa. Điều này có thể được sử dụng để điều khiển thời gian của 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 Drivetrain sau có tham số wait : drive_for, turn_for, turn_to_heading, và turn_to_rotation.

Usage:
drivetrain.is_done()

Thông số

Sự miêu tả

Phương pháp này không có tham số.

is_moving#

is_moving trả về trạng thái di chuyển của robot, dưới dạng giá trị Boolean. Điều 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 đang di chuyển.

  • False — Robot không di chuyển.

Usage:
drivetrain.is_moving()

Thông số

Sự miêu tả

Phương pháp này không có tham số.