Quán tính#

Giới thiệu#

Robot lập trình VEX AIM được tích hợp cảm biến quán tính. Cảm biến này đo lường chuyển động và hướng quay của robot.

Cảm biến quán tính sử dụng hai bộ phận để thực hiện điều này. Con quay hồi chuyển đo chuyển động quay, chẳng hạn như hướng, độ xoay, độ lệch hướng, độ nghiêng, độ dốc và tốc độ quay của robot. Gia tốc kế đo các thay đổi trong chuyển động, chẳng hạn như tăng tốc, giảm tốc hoặc dừng đột ngột trong trường hợp va chạm.

Các phương pháp quán tính có thể được sử dụng để theo dõi các khúc cua, đo gia tốc, phát hiện va chạm, thiết lập lại giá trị hướng hoặc vòng quay và hiệu chuẩn cảm biến.

Dưới đây là danh sách tất cả các phương pháp:

Định hướng — Xác định và thiết lập lại hướng mà robot đang đối mặt, xoay hoặc nghiêng.

  • get_rotation — Trả về mức độ quay của robot.

  • get_heading — Trả về hướng mà robot đang đối mặt, từ 0 đến 359,99 độ.

  • get_yaw — Trả về góc yaw của robot.

  • get_roll — Trả về góc lăn của robot.

  • get_pitch — Trả về góc nghiêng của robot.

  • reset_rotation — Đặt lại góc quay hiện tại của robot về 0 độ.

  • reset_heading — Đặt lại hướng hiện tại của robot về 0 độ.

  • set_heading — Đặt hướng hiện tại của robot thành một giá trị hướng mới.

Va chạm — Phát hiện va chạm.

  • crashed — Đăng ký một hàm để chạy khi phát hiện lỗi.

  • set_crash_sensitivity — Đặt độ nhạy của việc phát hiện va chạm đối với các tác động.

Chuyển động — Đo gia tốc và tốc độ quay.

  • get_acceleration — Trả về tốc độ tăng hoặc giảm của robot trên trục đã chọn.

  • get_turn_rate — Trả về tốc độ quay của robot trên trục đã chọn.

Hiệu chuẩn — Quản lý quá trình hiệu chuẩn cảm biến.

  • calibrate — Hiệu chuẩn Cảm biến quán tính.

  • is_calibrating — Trả về trạng thái hiện tại của Cảm biến quán tính đang hiệu chuẩn.

Định hướng#

get_rotation#

Góc quay là mức độ robot đã xoay, được đo bằng độ. Không giống như hướng, góc quay có thể tăng lên quá 359,99 độ hoặc giảm xuống dưới 0 độ. Khi bắt đầu một dự án, giá trị góc quay được đặt là 0 độ. Hàm get_rotation trả về góc quay hiện tại của robot dưới dạng số thực.

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 độ. Xoay một vòng sang trái từ vị trí 0 độ sẽ tạo ra góc quay -360 độ.

Usage:
robot.inertial.get_rotation()

Thông số

Sự miêu tả

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

# Display the robot's rotation as it rotates
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
    wait(50, MSEC)

get_heading#

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

Hướng quay ban đầu là 0 độ. Nếu robot quay quá 359,99 độ, hướng quay sẽ quay trở lại 0 độ.

Usage:
robot.inertial.get_heading()

Thông số

Sự miêu tả

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

# Turn right until the heading reaches 90 degrees
robot.turn(RIGHT)
while robot.inertial.get_heading() < 90:
    wait(50, MSEC)
robot.stop_all_movement()

# Display the robot's heading as it is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Heading: {robot.inertial.get_heading()} degrees")
    wait(50, MSEC)

get_yaw#

Góc Yaw mô tả việc robot quay sang trái hoặc phải quanh trục thẳng đứng của nó. get_yaw trả về góc yaw của robot trong khoảng từ -180,00 đến 180,00 độ dưới dạng số thực.

Hình ảnh bên dưới sử dụng các mũi tên để chỉ hướng quay dương của trục yaw.

Một robot lập trình VEX AIM với mũi tên màu xanh hướng xuống từ tâm robot. Xung quanh mũi tên màu xanh, một mũi tên cong màu đen chỉ theo chiều kim đồng hồ, biểu thị hướng xoay dương.

Usage:
robot.inertial.get_yaw()

Thông số

Sự miêu tả

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

# Display the robot's yaw angle as it is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_yaw())
    wait(50, MSEC)

get_roll#

Biến Roll mô tả độ nghiêng của robot sang hai bên. get_roll trả về góc nghiêng của robot trong khoảng từ -180,00 đến 180,00 độ dưới dạng số thực.

Hình ảnh bên dưới sử dụng các mũi tên để chỉ hướng quay dương của trục lăn.

Một robot lập trình VEX AIM với một mũi tên màu xanh lá cây kéo dài ra phía trước robot, ở trung tâm của cảm biến AI Vision. Xung quanh mũi tên màu xanh lá cây, một mũi tên màu đen uốn cong ngược chiều kim đồng hồ, chỉ hướng dương của chuyển động lăn.

Usage:
robot.inertial.get_roll()

Thông số

Sự miêu tả

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

# Display the robot's roll angle as it is tilted by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_roll())
    wait(50, MSEC)

get_pitch#

Góc nghiêng (Pitch) mô tả độ nghiêng về phía trước hoặc phía sau của robot. get_pitch trả về góc nghiêng của robot trong khoảng từ -90,00 đến 90,00 độ dưới dạng số thực.

Hình ảnh bên dưới sử dụng các mũi tên để chỉ hướng quay dương của trục nghiêng.

Một robot lập trình VEX AIM với một mũi tên màu đỏ nhô ra từ bên hông robot, bên dưới logo VEX. Xung quanh mũi tên đỏ, một mũi tên màu đen uốn cong ngược chiều kim đồng hồ, chỉ hướng dương của góc nghiêng.

Usage:
robot.inertial.get_pitch()

Thông số

Sự miêu tả

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

# Display the robot's pitch angle as it is tilted by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_pitch())
    wait(50, MSEC)

reset_rotation#

reset_rotation đặt lại góc quay hiện tại của robot về 0 độ.

Sau khi sử dụng phương pháp này, robot sẽ theo dõi các lượt rẽ tiếp theo từ giá trị xoay 0 độ mới.

Usage:
robot.inertial.reset_rotation()

Thông số

Sự miêu tả

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

# Reset the robot's rotation if it exceeds 180 degrees
while True:
    if robot.inertial.get_rotation() >= 180:
        robot.inertial.reset_rotation()

    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")

    wait(50, MSEC)

reset_heading#

reset_heading đặt lại hướng hiện tại của robot về 0 độ.

Sau khi áp dụng phương pháp này, hướng hiện tại của robot sẽ trở thành hướng 0 độ mới.

Usage:
robot.inertial.reset_heading()

Thông số

Sự miêu tả

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

# Turn the robot around using a new 90 degree heading
robot.turn_to(90)
wait(1, SECONDS)
robot.inertial.reset_heading()
robot.turn_to(90)

set_heading#

Hướng di chuyển là hướng mà robot đang đối mặt, được đo bằng độ từ 0 đến 359,99. 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 về 0 độ sẽ biến vị trí quay mặt sang phải đó thành 0 độ mới. Sau đó, robot có thể theo dõi các hướng khác dựa trên hướng mới đó.

Usage:
robot.inertial.set_heading(heading)

Thông số

Sự miêu tả

heading

Giá trị góc quay, tính bằng độ, cần thiết lập cho robot. Giá trị này có thể nằm trong khoảng từ 0 đến 359,99.

# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)

Tai nạn#

crashed#

crashed đăng ký một hàm sẽ được gọi khi robot phát hiện va chạm đột ngột.

Cách sử dụng:

robot.inertial.crashed(callback, arg)

Thông số

Sự miêu tả

callback

Một hàm được định nghĩa trước để thực thi khi phát hiện va chạm.

arg

Tùy chọn. Một bộ chứa các đối số để truyền cho hàm gọi lại. Xem Sử dụng hàm có tham số để biết thêm thông tin.

# Define what happens when a crash occurs
def crash_detected():
    # Stop all movement and indicate a crash occurred
    robot.screen.print("Crash detected")
    robot.stop_all_movement()

robot.inertial.crashed(crash_detected)

# Drive forward until crash
robot.move_at(0, 100)

set_crash_sensitivity#

set_crash_sensitivity điều chỉnh mức gia tốc đột ngột cần thiết để robot phát hiện va chạm.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Thông số

Sự miêu tả

sensitivity

Độ nhạy va chạm:

  • HIGH — Nhạy nhất; phát hiện các va chạm nhỏ hơn và kích hoạt ở mức 1G.
  • NORMAL — Độ nhạy mặc định; phát hiện các va chạm vừa phải và kích hoạt ở mức 1.5G.
  • LOW — Ít nhạy nhất; phát hiện các va chạm mạnh hơn và kích hoạt ở mức 2G.

def crashed_callback():
    robot.stop_all_movement()
    robot.sound.play(CRASH)

# system event handlers
robot.inertial.crashed(crashed_callback)
# add 15ms delay to make sure events are registered correctly.
wait(15, MSEC)

# Detect a crash at a slow velocity.
robot.set_move_velocity(35, PERCENT)
robot.inertial.set_crash_sensitivity(HIGH)
robot.move_at(0)

Cử động#

get_acceleration#

Gia tốc thể hiện tốc độ tăng hoặc giảm của robot. get_acceleration` trả về gia tốc của robot trên trục đã chọn, từ -4,00 G đến 4,00 G, dưới dạng số thực.

A G là đơn vị dùng để đo gia tốc. 1 G xấp xỉ gia tốc trọng trường mà bạn cảm nhận được khi ngồi yên.

Giá trị có thể dương hoặc âm tùy thuộc vào hướng gia tốc trên trục đã chọn. Trên AIM, các tùy chọn trục được đặt tên theo hướng trên robot: FORWARD, RIGHTWARDvà DOWNWARD.

Một robot lập trình VEX AIM với các mũi tên chỉ hướng kéo dài từ tâm của robot. Một mũi tên màu xanh lá cây có nhãn "tiến" kéo dài từ phía trước của robot, một mũi tên màu xanh lam có nhãn "xuống" kéo dài từ phía dưới của robot và một mũi tên màu đỏ có nhãn "phải" kéo dài từ bên cạnh robot bên dưới logo VEX.

Cách sử dụng:

robot.inertial.get_acceleration(type)

Thông số

Sự miêu tả

type

Trục đo gia tốc:

  • DOWNWARD — Đo gia tốc theo hướng thẳng đứng của robot.
  • FORWARD — Đo gia tốc theo hướng trước-sau của robot.
  • RIGHTWARD — Đo gia tốc theo hướng ngang-ngang của robot.

# Display the acceleration as the robot begins to move
robot.screen.set_cursor(4,1)
sitting_accel = robot.inertial.get_acceleration(RIGHTWARD)
robot.screen.print(f"Resting: {sitting_accel:.2f}")
wait(0.5, SECONDS)
robot.screen.next_row()

robot.move_at(90, 100)
wait(0.1, SECONDS)

robot.screen.print(f"Startup: {robot.inertial.get_acceleration(RIGHTWARD):.2f}")

get_turn_rate#

Tốc độ quay là tốc độ quay của robot. get_turn_rate trả về tốc độ quay của robot tính bằng độ trên giây \(dps\) dưới dạng số thực, từ -1000.00 đến 1000.00 dps.

Giá trị này có thể dương hoặc âm tùy thuộc vào hướng quay của robot trên trục đã chọn. Hình ảnh bên dưới sử dụng mũi tên để chỉ hướng quay dương đối với các chuyển động lăn, nghiêng và xoay.

Một robot lập trình VEX AIM với các mũi tên chỉ hướng kéo dài từ tâm của robot. Một mũi tên màu xanh lá cây có nhãn "Roll" kéo dài từ phía trước của robot với một mũi tên cong màu đen chỉ ngược chiều kim đồng hồ xung quanh nó. Một mũi tên màu xanh lam có nhãn "Yaw" kéo dài từ phía dưới của robot với một mũi tên cong màu đen chỉ theo chiều kim đồng hồ xung quanh nó. Và một mũi tên màu đỏ có nhãn "Pitch" kéo dài từ bên cạnh của robot bên dưới logo VEX, với một mũi tên cong màu đen chỉ ngược chiều kim đồng hồ xung quanh nó.

Usage:
robot.inertial.get_turn_rate(axis)

Thông số

Sự miêu tả

axis

Hướng quay trở lại nào:

  • YAW
  • ROLL
  • PITCH
# Display the gyro rate as the robot is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_turn_rate(YAW))
    wait(50, MSEC)

Sự định cỡ#

Quá trình hiệu chuẩn giúp cảm biến quán tính đo lường các góc quay một cách chính xác bằng cách đo và bù trừ nhiễu và độ trôi của cảm biến trong khoảng thời gian 2 giây. Trong thời gian này, robot phải hoàn toàn đứng yên trên một bề mặt ổn định. Chuyển động trong quá trình hiệu chuẩn có thể dẫn đến kết quả không chính xác.

Robot VEX cố gắng tự hiệu chỉnh khi khởi động, chờ đến khi phát hiện không có chuyển động. Tuy nhiên, nếu robot đang được mang hoặc di chuyển trong quá trình khởi động, cảm biến có thể không hiệu chỉnh đúng cách hoặc cho kết quả hiệu chỉnh không chính xác.

Nếu dự án của bạn phụ thuộc nhiều vào việc xác định hướng chính xác, hoặc nếu bạn cần các thao tác quay nhất quán và có thể lặp lại, việc gọi lệnh calibrate ở đầu mã có thể hữu ích. Nên hiển thị thông báo như “Calibrating…” trên màn hình robot trong quá trình hiệu chuẩn, sau đó cập nhật thành “Calibration complete.” để nhắc nhở bạn (và bất kỳ ai khác sử dụng robot) rằng robot phải giữ nguyên vị trí trong suốt quá trình này.

calibrate#

calibrate hiệu chỉnh con quay hồi chuyển. Quá trình hiệu chỉnh giúp cảm biến quán tính đo lường các vòng quay một cách chính xác bằng cách đo và bù trừ nhiễu và độ trôi của cảm biến trong khoảng thời gian 2 giây. Trong thời gian này, robot phải hoàn toàn đứng yên trên một bề mặt ổn định. Chuyển động trong quá trình hiệu chỉnh có thể tạo ra kết quả không chính xác.

Robot VEX cố gắng tự hiệu chỉnh khi khởi động, chờ đến khi phát hiện không có chuyển động. Tuy nhiên, nếu robot đang được mang hoặc di chuyển trong quá trình khởi động, cảm biến có thể không hiệu chỉnh đúng cách hoặc cho kết quả hiệu chỉnh không chính xác.

Usage:
robot.inertial.calibrate()

Thông số

Sự miêu tả

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

# Calibrate the gyro before moving
robot.inertial.calibrate()
robot.screen.show_emoji(THINKING)
wait(2, SECONDS)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)

is_calibrating#

is_calibrating trả về giá trị Boolean cho biết cảm biến quán tính có đang hiệu chuẩn hay không.

  • True — Cảm biến quán tính đang hiệu chuẩn.

  • False — Cảm biến quán tính không đang hiệu chuẩn.

Usage:
robot.inertial.is_calibrating()

Thông số

Sự miêu tả

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

# Move after the calibration is completed
robot.inertial.calibrate()
while robot.inertial.is_calibrating():
    robot.screen.show_emoji(THINKING)
    wait(50, MSEC)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)