Cử động#

Giới thiệu#

Động cơ điều khiển cách các bộ phận của robot di chuyển. Động cơ có thể được sử dụng để nâng cánh tay, xoay càng, quay bánh xe hoặc di chuyển một bộ phận khác của cấu trúc. Hai động cơ có thể hoạt động cùng nhau như một hệ thống truyền động để di chuyển và xoay toàn bộ robot.

Mỗi động cơ được cấu hình trong cửa sổ Thiết bị. Tùy thuộc vào phiên bản, tên động cơ có thể thay đổi. Ví dụ, phiên bản Competition Advanced 2.0 có một động cơ tên là arm_motorMột robot tùy chỉnh có thể sử dụng các tên động cơ khác nhau.

Mặc định, FORWARD sẽ làm động cơ quay ngược chiều kim đồng hồ, và REVERSE sẽ làm động cơ quay theo chiều kim đồng hồ. Nếu động cơ được thiết lập để quay ngược chiều trong cửa sổ Thiết bị, hướng quay sẽ được đảo ngược.

Một động cơ VEX GO hiển thị hướng quay thuận được biểu thị bằng dấu cộng và mũi tên chỉ hướng quay sang trái, hay ngược chiều kim đồng hồ. Một động cơ VEX GO hiển thị chiều quay ngược được biểu thị bằng dấu trừ và mũi tên, cho biết nó đang quay sang phải, hay theo chiều kim đồng hồ.

Có rất nhiều cách để lập trình động cơ. Dưới đây là danh sách tất cả các phương pháp lập trình chuyển động:

Thao tác — Dừng và quay động cơ.

  • spin — Quay động cơ tiến hoặc lùi mãi mãi.

  • spin_for — Quay động cơ trong một khoảng cách cụ thể.

  • spin_to_position — Quay động cơ đến một vị trí cụ thể.

  • stop — Dừng động cơ quay.

Bộ điều chỉnh — Điều chỉnh cài đặt động cơ.

  • set_velocity — Cho động cơ biết tốc độ quay.

  • set_max_torque — Đặt lực đẩy tối đa mà động cơ được phép thực hiện khi quay.

  • set_position — Thay đổi vị trí hiện tại của động cơ thành một giá trị mới.

  • set_stopping — Đặt cách động cơ sẽ dừng chuyển động: bằng cách phanh, chạy không tải hoặc giữ nguyên.

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

Bộ phận lấy hàng — Kiểm tra trạng thái động cơ.

  • get_position — Trả về vị trí hiện tại của động cơ.

  • get_velocity — Trả về tốc độ quay của động cơ, dưới dạng phần trăm từ -100% đến 100%.

  • get_current — Trả về lượng điện năng mà động cơ đang sử dụng từ pin, dưới dạng phần trăm từ 0% đến 100%.

  • is_stopped — Trả về giá trị Boolean cho biết động cơ đã ngừng chuyển động hay chưa.

  • is_moving — Trả về giá trị Boolean cho biết động cơ có đang quay hay không.

Hành động#

spin#

spin sẽ làm cho động cơ quay tiến hoặc lùi liên tục. Động cơ sẽ tiếp tục quay cho đến khi nhận được một lệnh khác, chẳng hạn như quay theo hướng khác hoặc dừng lại.

Usage:
arm_motor.spin(direction)

Thông số

Sự miêu tả

direction

Hướng quay của động cơ: FORWARD hoặc REVERSE.

# Build Used: Competition Advanced 2.0
def main():
    # Raise the ArmMotor, then stop
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

spin_for#

Lệnh spin_for quay một động cơ một khoảng cách nhất định. Khoảng cách quay này tương đối so với vị trí hiện tại của động cơ. Chương trình sẽ chờ cho đến khi động cơ quay xong trước khi dòng mã tiếp theo được thực thi.

Usage:
arm_motor.spin_for(direction, angle, units, wait)

Thông số

Sự miêu tả

direction

Hướng quay của động cơ: FORWARD hoặc REVERSE.

angle

Quãng đường quay của động cơ. DEGREES sử dụng số nguyên. TURNS có thể sử dụng số nguyên hoặc số thập phân.

units

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

wait

Tùy chọn. wait=True (mặc định) khiến dự án chờ cho đến khi động cơ 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.

# Build Used: Competition Advanced 2.0
def main():
    # Raise and lower the ArmMotor
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_for(FORWARD, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

spin_to_position#

spin_to_position quay động cơ đến một vị trí cụ thể.

Vị trí của động cơ là khoảng cách nó đã quay, được đo bằng DEGREES hoặc TURNSMột vòng quay bằng 360 độ. Khi bắt đầu một dự án, vị trí của động cơ được đặt thành 0 độ. Vị trí của động cơ cũng có thể được đặt bằng phương pháp set_position.

Các giá trị vị trí là tuyệt đối. Điều này có nghĩa là hướng quay phụ thuộc vào vị trí hiện tại của động cơ.

Ví dụ, nếu động cơ bắt đầu ở 0 độ và quay đến vị trí 720 độ, nó sẽ quay thuận hai vòng. Nếu sau đó nó quay đến vị trí 360 độ, nó sẽ quay ngược một vòng, vì 360 nhỏ hơn 720.

Usage:
arm_motor.spin_to_position(angle, units, wait)

Thông số

Sự miêu tả

angle

Giá trị vị trí mà động cơ sẽ quay tới. DEGREES sử dụng số nguyên. TURNS có thể sử dụng số nguyên hoặc số thập phân.

units

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

wait

Tùy chọn. wait=True (mặc định) khiến dự án chờ cho đến khi động cơ 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.

# Build Used: Competition Advanced 2.0
def main():
    # Return ArmMotor to 0 degrees after raising
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

stop#

stop dừng động cơ quay.

Usage:
arm_motor.stop()

Thông số

Sự miêu tả

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

# Build Used: Competition Advanced 2.0
def main():
    # Raise the ArmMotor
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

Biến đổi#

set_velocity#

Tham số set_velocity cho biết tốc độ quay của động cơ. Tỷ lệ phần trăm càng cao thì động cơ càng quay nhanh, và tỷ lệ phần trăm càng thấp thì động cơ càng quay chậm.

Mỗi dự án đều bắt đầu với việc mỗi động cơ quay ở tốc độ 50% theo mặc định.

Lưu ý: Tốc độ cao hơn làm cho động cơ quay nhanh hơn, nhưng có thể kém chính xác hơn. Tốc độ thấp hơn làm cho động cơ quay chậm hơn, nhưng có thể chính xác hơn.

Usage:
arm_motor.set_velocity(velocity)

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

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor at different velocities
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    # Move slow
    arm_motor.set_velocity(20)
    arm_motor.spin_for(FORWARD, 180, DEGREES)
    wait(1, SECONDS)
    # Move fast
    arm_motor.set_velocity(100)
    arm_motor.spin_for(REVERSE, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_max_torque#

Mô-men xoắn là lực quay. Nó cho biết động cơ có thể đẩy hoặc kéo mạnh đến mức nào khi quay.

set_max_torque thiết lập mô-men xoắn tối đa mà động cơ được phép sử dụng.

Tỷ lệ phần trăm cao hơn cho phép động cơ đẩy mạnh hơn, ví dụ như khi nâng vật nặng. Tỷ lệ phần trăm thấp hơn giới hạn lực đẩy tối đa của động cơ. Điều này giúp bảo vệ robot nếu động cơ bị kẹt hoặc đạt đến giới hạn chuyển động tối đa.

Mỗi dự án đều bắt đầu với mô-men xoắn của mỗi động cơ ở mức 50% theo mặc định.

Usage:
arm_motor.set_max_torque(value)

Thông số

Sự miêu tả

value

Mô-men xoắn cực đại mà động cơ có thể sử dụng từ 0% đến 100%. Giá trị này có thể là số nguyên integer hoặc số thập phân (float).

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor at different torques
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    # Move with less torque
    arm_motor.set_max_torque(20)
    arm_motor.spin_for(FORWARD, 180, DEGREES)
    wait(1, SECONDS)
    # Move with maximum torque
    arm_motor.set_max_torque(100)
    arm_motor.spin_for(REVERSE, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_position#

Vị trí của động cơ được xác định bằng khoảng cách quay, tính bằng DEGREES hoặc TURNSMột vòng quay tương đương với 360 độ. set_position thay đổi vị trí hiện tại của động cơ thành một giá trị mới.

Ví dụ, nếu một động cơ đã quay đến 180 độ, việc đặt vị trí về 0 độ sẽ thiết lập lại vị trí đó từ 180 độ về 0 độ. Sau đó, động cơ có thể quay đến các vị trí dựa trên giá trị mới đó.

Usage:
arm_motor.set_position(position, units)

Thông số

Sự miêu tả

position

Giá trị vị trí cần thiết lập cho động cơ. DEGREES sử dụng số nguyên. TURNS có thể sử dụng số nguyên hoặc số thập phân.

units

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

# Build Used: Competition Advanced 2.0
def main():
    # Return ArmMotor to 0 degrees after raising
    arm_motor.set_position(0, DEGREES)
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_stopping#

set_stopping thiết lập cách động cơ sẽ dừng chuyển động: bằng cách phanh, chạy tự do hoặc giữ nguyên vị trí.

Usage:
arm_motor.set_stopping(mode)

Thông số

Sự miêu tả

mode

Cách động cơ sẽ dừng:

  • BRAKE — Dừng ngay lập tức.
  • COAST — Giảm tốc độ cho đến khi dừng hẳn.
  • HOLD — Dừng ngay lập tức và giữ nguyên vị trí của động cơ.

Ví dụ, nếu sử dụng bản dựng Competition Advanced 2.0 và arm_motor được đặt thành HOLD, động cơ sẽ giữ cánh tay ở vị trí hiện tại cho đến khi có chuyển động khác của cánh tay. Điều này có nghĩa là động cơ sẽ hoạt động chống lại trọng lực để giữ cánh tay ở trên không nếu động cơ bị dừng khi cánh tay đang được nâng lên.

Nếu không sử dụng phương pháp này, động cơ sẽ sử dụng BRAKE khi dừng lại.

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor, then coast to a stop
    arm_motor.set_velocity(20)
    arm_motor.set_stopping(COAST)
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

set_timeout#

set_timeout thiết lập khoảng thời gian tối đa mà động cơ sẽ cố gắng hoàn thành một chuyển động. Nếu động cơ 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 ngăn động cơ bị kẹt ở một chuyển động nào đó.

Usage:
arm_motor.set_timeout(value, units)

Thông số

Sự miêu tả

value

The amount of time the motor 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).

# Build Used: Competition Advanced 2.0
def main():
    # Move ArmMotor as far as possible for 1 second before resetting
    arm_motor.set_position(0, DEGREES)
    arm_motor.set_timeout(1, SECONDS)
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

Người nhận#

get_position#

Vị trí của động cơ được xác định bằng khoảng cách quay, tính bằng DEGREES hoặc TURNSMột vòng quay tương đương với 360 độ. get_position trả về vị trí hiện tại của động cơ.

Khi bắt đầu dự án, vị trí của động cơ được đặt ở 0 độ. Nếu động cơ quay một vòng về phía trước, vị trí sẽ là 360 độ hoặc 1 vòng. Nếu động cơ quay theo hướng ngược lại, vị trí sẽ là số âm.

Usage:
arm_motor.get_position(units)

Thông số

Sự miêu tả

units

Tùy chọn. Bộ phận để đưa động cơ trở lại vị trí ban đầu: DEGREES (mặc định) hoặc TURNS.

# Build Used: Competition Advanced 2.0
def main():
    # Display how far the ArmMotor moves after one second
    arm_motor.set_position(0, DEGREES)
    console.print("Start: ")
    console.print(arm_motor.get_position(DEGREES))
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()
    console.print("After: ")
    console.print(arm_motor.get_position(DEGREES))

# Start threads — Do not delete
start_thread(main)

get_velocity#

get_velocity trả về tốc độ quay của động cơ, được biểu thị bằng phần trăm từ -100% đến 100%.

Giá trị dương có nghĩa là động cơ đang quay thuận. Giá trị âm có nghĩa là động cơ đang quay ngược.

Usage:
arm_motor.get_velocity()

Thông số

Sự miêu tả

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

# Build Used: Competition Advanced 2.0
def main():
    # Display the ArmMotor's velocity when it moves
    console.print("Resting: ")
    console.print(arm_motor.get_velocity())
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    console.print("Moving: ")
    console.print(arm_motor.get_velocity())
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

get_current#

Hàm get_current trả về lượng điện năng mà động cơ đang sử dụng từ pin, dưới dạng phần trăm từ 0% đến 100%.

Giá trị dòng điện cao hơn có nghĩa là động cơ đang sử dụng nhiều điện năng hơn. Điều này có thể xảy ra khi động cơ đang nâng vật nặng, đẩy vào vật thể hoặc cố gắng di chuyển khi bị kẹt.

Usage:
arm_motor.get_current()

Thông số

Sự miêu tả

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

# Build Used: Competition Advanced 2.0
def main():
    # Display the motor's current when it moves
    console.print("Resting: ")
    console.print(arm_motor.get_current())
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    console.print("Moving: ")
    console.print(arm_motor.get_current())
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

is_stopped#

is_stopped trả về giá trị Boolean cho biết động cơ đã ngừng chuyển động hay chưa. Giá trị 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 động cơ.

  • True — Động cơ đã ngừng chuyển động.

  • False — Động cơ vẫn đang hoạt động.

Phương pháp này hoạt động cùng với các phương pháp Chuyển động sau có tham số wait : spin_for và spin_to_position.

Usage:
arm_motor.is_stopped()

Thông số

Sự miêu tả

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

# Build Used: Competition Advanced 2.0
def main():
    # Turn the Eye Sensor's light on while ArmMotor is moving
    arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
    wait(0.1, SECONDS)
    while True:
        if arm_motor.is_stopped():
            eye.set_light(OFF)
        else:
            eye.set_light(ON)

# Start threads — Do not delete
start_thread(main)

is_moving#

is_moving trả về giá trị Boolean cho biết động cơ có đang quay hay không. Giá trị 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 động cơ.

  • True — Động cơ đang quay.

  • False — Động cơ không quay.

Phương pháp này hoạt động cùng với các phương pháp Chuyển động sau có tham số wait : spin_for và spin_to_position.

Usage:
arm_motor.is_moving()

Thông số

Sự miêu tả

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

# Build Used: Competition Advanced 2.0
def main():
    # Turn the Eye Sensor's light on while ArmMotor is moving
    arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
    wait(0.1, SECONDS)
    while True:
        if arm_motor.is_moving():
            eye.set_light(ON)
        else:
            eye.set_light(OFF)

# Start threads — Do not delete
start_thread(main)