傳動系統#

介紹#

驅動系統包括車輪和電機,用於控制機器人的行駛和轉向。驅動系統常見於 Code Base 2.0、Super Car 等機器人或客製化機器人。

Drivetrains use the Inertial Sensor in the Brain to detect crashes and help the robot move and turn precisely. At the start of each project, the drivetrain calibrates the Inertial Sensor automatically. Keep the robot still for about 2 seconds during calibration, so the robot can move and turn correctly.

傳動系統編碼方式有很多種。以下列出了所有傳動系統編碼方法:

動作-移動和轉向機器人。

  • drive — 使機器人無限向前或向後移動。

  • drive_for — 使機器人向前或向後移動指定的距離。

  • drive_until — 讓機器人向前移動,直到眼睛感應器偵測到物體或機器人偵測到碰撞為止。

  • turn — 讓機器人永遠向左或向右轉。

  • turn_for — 使機器人向左或向右旋轉指定的度數。

  • turn_to_heading — 將機器人轉向 -359 度到 359 度之間的特定航向。機器人將沿著最短路徑轉向以達到目標航向。

  • turn_to_rotation — 將機器人旋轉到指定的方向。

  • stop — 停止機器人的移動。

變異器 — 調整傳動系統設定。

  • set_drive_velocity — 告訴機器人以多快的速度行駛。

  • set_turn_velocity — 告訴機器人轉彎的速度。

  • set_stopping — 說明機器人如何停止移動:透過煞車、滑行或保持。

  • set_timeout — 設定機器人嘗試完成一次動作的時間。

  • set_heading — 將機器人的目前航向改為新的航向。

  • set_rotation — 將機器人的目前旋轉改為新的旋轉。

獲取者 — 查看移動狀態。

  • get_heading — 返回機器人的目前航向,範圍從 0 到 359 度。

  • get_rotation — 返回機器人的目前旋轉角度。

  • get_velocity — 返回機器人行駛的速度,以 -100% 到 100% 的百分比表示。

  • get_yaw — 返回機器人的目前偏航角。

  • get_roll — 傳回機器人的目前滾動位置。

  • get_pitch — 返回機器人的目前俯仰角。

  • get_crashed — 傳回機器人是否偵測到碰撞,以布林值表示。

  • is_stopped — 返回機器人是否停止移動,以布林值表示。

行動#

drive#

drive 使機器人無限前進或後退。機器人將持續移動,直到收到其他指令,例如轉向或停止。

用法:
drivetrain.drive(direction)

參數

描述

direction

機器人移動方向: FORWARD 或 REVERSE。

# 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 使機器人向前或向後移動指定的距離。

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

參數

描述

direction

機器人移動方向: FORWARD 或 REVERSE。

distance

機器人行駛的距離。可以是整數,也可以是小數。

units

可選。距離單位: MM (毫米,預設)或 INCHES。

wait

可選 wait=True (預設值)使專案等待機器人完成移動後再執行下一行程式碼。 2 wait=False 使下一行程式碼立即運作。

# 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 使機器人向前移動,直到眼部感測器偵測到物體或機器人偵測到碰撞為止。

用法:
drivetrain.drive_until(condition, wait)

參數

描述

condition

導致機器人停止的條件: OBJECT 或 CRASH。

wait

可選 wait=True (預設值)使專案等待機器人完成移動後再執行下一行程式碼。 2 wait=False 使下一行程式碼立即運作。

# 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 表示機器人無限向左或向右轉向。機器人會一直轉向,直到收到其他指令,例如行駛或停止。

用法:
drivetrain.turn(direction)

參數

描述

direction

機器人轉向的方向: LEFT 或 RIGHT。

# 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 使機器人向左或向右旋轉指定角度。旋轉角度是相對於機器人的當前位置而言的。

用法:
drivetrain.turn_for(direction, angle, wait)

參數

描述

direction

機器人轉向的方向: LEFT 或 RIGHT。

angle

機器人旋轉的角度數。可以是整數,也可以是小數。

wait

可選 wait=True (預設值)表示程式會等待機器人完成轉向後再執行下一行程式碼。 2 wait=False 表示程式會立即執行下一行程式碼。

# 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#

航向角是指機器人大腦所朝向的方向,以度為單位。 `turn_to_heading 使機器人轉向 -359 度到 359 度之間的特定航向角。機器人將沿著最短路徑轉向以達到目標航向角。

起始航向為0度。

VEX GO 程式碼庫 2.0 顯示航向方向:向前 0 度,向右 90 度,向後 180 度,向左 270 度。

用法:
drivetrain.turn_to_heading(angle, wait)

參數

描述

angle

機器人應面向的方向,以整數表示,範圍從 -359 度到 359 度。

wait

可選 wait=True (預設值)表示程式會等待機器人完成轉向後再執行下一行程式碼。 2 wait=False 表示程式會立即執行下一行程式碼。

# 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 將機器人旋轉到指定角度。

旋轉角度是指機器人轉動的程度,以度為單位。在專案開始時,旋轉角度值設定為 0 度。也可以使用 set_rotation 設定旋轉角度。

旋轉角度是絕對值。這意味著轉彎方向取決於機器人目前的旋轉角度。向右轉會增加旋轉角度,向左轉彎會減少旋轉角度。

例如,如果機器人從0度開始,你將其旋轉720度,它會向右轉兩次。如果你再將其旋轉360度,它會向左轉一次,因為360小於720。

VEX GO 程式碼庫 2.0,顯示向右和向左旋轉的箭頭。左箭頭表示“減號”,右箭頭表示“加號”。

用法:
drivetrain.turn_to_rotation(angle, wait)

參數

描述

angle

機器人將要旋轉的角度值,以度為單位。該值可以是整數。

wait

可選 wait=True (預設值)表示程式會等待機器人完成轉向後再執行下一行程式碼。 2 wait=False 表示程式會立即執行下一行程式碼。

# 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 停止機器人的移動。

用法:
drivetrain.stop()

參數

描述

此方法沒有參數。

# 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)

變異體#

set_drive_velocity#

set_drive_velocity 告訴機器人行駛速度。百分比越高,機器人行駛速度越快;百分比越低,機器人行駛速度越慢。

每個專案開始時,機器人預設以 50% 的速度行駛。

注意: 速度越高,機器人行駛速度越快,但精度可能越低。速度越低,機器人行駛速度越慢,但精度越高。

用法:
drivetrain.set_drive_velocity(velocity)

參數

描述

velocity

行駛速度,範圍從 0% 到 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 告訴機器人轉彎的速度。百分比越高,機器人轉彎越快;百分比越低,機器人轉彎越慢。

每個專案開始時,機器人預設以 50% 的速度旋轉。

注意: 速度越高,機器人轉彎越快,但精確度可能越低。速度越低,機器人轉彎越慢,但精準度越高。

用法:
drivetrain.set_turn_velocity(velocity)

參數

描述

velocity

轉彎速度從 0% 到 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 設定機器人停止移動的方式:透過煞車、滑行或保持。

用法:
drivetrain.set_stopping(brake)

參數

描述

brake

How the robot will stop:

  • BRAKE — Stops immediately.
  • COAST — Slows to a stop.
  • HOLD — Stops immediately and holds the wheels’ position.

如果不使用此方法,機器人停止時將使用 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 設定機器人嘗試完成一個動作的超時時間。如果機器人無法在規定時間內完成,它將停止嘗試並執行下一行程式碼。這可以防止機器人卡在某個動作中。

用法:
drivetrain.set_timeout(value, units)

參數

描述

value

機器人嘗試完成一次動作的時間。該值可以是整數或小數。

units

可選。時間單位: SECONDS (預設)或 MSEC (毫秒)。

# 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#

航向角是指機器人大腦所朝向的方向,以度為單位。 0 set_heading set_heading 目前航向角變更為新的航向角值。

例如,如果機器人轉向右側,將航向設定為 0 度,則該右側位置將成為新的 0 度航向。然後,機器人可以根據新的航向轉向其他位置。

用法:
drivetrain.set_heading(value)

參數

描述

value

要設定的機器人航向角值,單位為度。該值可以是 0 到 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#

旋轉角度是指機器人轉動的程度,以度為單位。專案開始時,旋轉角度值設定為 0 度。 `set_rotation 會將機器人的目前旋轉角度變更為新值。

例如,如果機器人向右轉了兩圈,它的旋轉角度將為 720 度。將旋轉角度設為 0 度會將旋轉角度從 720 度重設為 0 度。然後,機器人可以根據這個新的旋轉角度進行旋轉。

用法:
drivetrain.set_rotation(value)

參數

描述

value

機器人旋轉角度值,以度為單位。該值可以是整數。

# 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)

獲取器#

get_heading#

航向角是指機器人大腦所面向的方向,以度為單位。 get_heading get_heading 航向角。

機器人的初始航向角為0度。

VEX GO 大腦顯示航向:向前 0 度,向右 90 度,向後 180 度,向左 270 度。

用法:
drivetrain.get_heading()

參數

描述

此方法沒有參數。

# 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#

旋轉角度是指機器人轉動的程度,以度為單位。專案開始時,旋轉角度值設定為 0 度 get_rotation 回到機器人目前的旋轉角度。

向右轉會增加旋轉角度,向左轉會減少旋轉角度。例如,向右轉兩圈將得到 720 度的旋轉角度。

VEX GO 程式碼庫 2.0,顯示向右和向左旋轉的箭頭。左箭頭表示“減號”,右箭頭表示“加號”。

用法:
drivetrain.get_rotation()

參數

描述

此方法沒有參數。

# 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 返回機器人行駛的速度,以 -100% 到 100% 的百分比表示。

正值表示機器人向前行駛,負值表示機器人向後行駛。

用法:
drivetrain.get_velocity()

參數

描述

此方法沒有參數。

# 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#

偏航角是指機器人從起始位置向左或向右轉動的角度,以度為單位。 0 get_yaw 傳回機器人目前的偏航角值。

向右轉會增加偏航角,向左轉彎會減少偏航角。

用法:
drivetrain.get_yaw()

參數

描述

此方法沒有參數。

# 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 is how much the robot tilts to the left or right, measured in degrees. get_roll returns the robot’s current roll value.

當大腦朝向前方時,向左傾斜會增加滾動值,向右傾斜會減少滾動值。

用法:
drivetrain.get_roll()

參數

描述

此方法沒有參數。

# 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 is how much the robot tilts forward or backward, measured in degrees. get_pitch returns the robot’s current pitch value.

大腦朝向前方,向前傾斜會增加音調值,向後傾斜會降低音調值。

用法:
drivetrain.get_pitch()

參數

描述

此方法沒有參數。

# 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 返回機器人是否偵測到碰撞,並返回布林值。

  • True — 偵測到崩潰。

  • False — 未偵測到崩潰。

用法:
drivetrain.get_crashed()

參數

描述

此方法沒有參數。

# 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 返回機器人是否停止移動,回傳一個布林值。這可用於根據機器人的移動狀態控制其他行為的執行時間。

  • True — 機器人已停止移動。

  • False — 機器人仍在移動。

此方法與以下具有 wait 參數的傳動系統方法配合使用:drive_for, drive_until, turn_for, turn_to_heading, turn_to_rotation#turn-to-rotation)。

用法:
drivetrain.is_stopped()

參數

描述

此方法沒有參數。

# 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)