관성#

소개#

VEX AIM 코딩 로봇에는 관성 센서가 내장되어 있습니다. 이 센서는 로봇의 움직임과 회전 방식을 측정합니다.

관성 센서는 이를 위해 두 부분으로 구성됩니다. 자이로스코프는 로봇의 진행 방향, 회전, 요, 롤, 피치 및 회전율과 같은 회전 운동을 측정합니다. 가속도계는 가속, 감속 또는 충돌 시 갑작스러운 정지와 같은 운동 변화를 측정합니다.

관성 모멘트 방법은 회전 추적, 가속도 측정, 충돌 감지, 방향 또는 회전 값 재설정, 센서 보정 등에 사용할 수 있습니다.

다음은 모든 방법 목록입니다.

방향 설정 — 로봇의 현재 방향, 회전 방향 또는 기울기를 확인하고 재설정합니다.

  • get_rotation — 로봇이 얼마나 회전했는지 반환합니다.

  • get_heading — 로봇이 향하는 방향을 0~359.99도에서 반환합니다.

  • get_yaw — 로봇의 요각을 반환합니다.

  • get_roll — 로봇의 롤 각도를 반환합니다.

  • get_pitch — 로봇의 피치 각도를 반환합니다.

  • reset_rotation — 로봇의 현재 회전을 0도로 재설정합니다.

  • reset_heading — 로봇의 현재 방향을 0도로 재설정합니다.

  • set_heading — 로봇의 현재 방향을 새로운 방향 값으로 설정합니다.

충돌 감지 - 충돌을 감지합니다.

  • crashed — 충돌이 감지될 때 실행될 함수를 등록합니다.

  • set_crash_sensitivity — 충돌 감지가 충격에 얼마나 민감한지 설정합니다.

동작 — 가속도와 회전 속도를 측정합니다.

  • get_acceleration — 선택된 축에서 로봇이 얼마나 빠르게 가속하거나 감속하는지 반환합니다.

  • get_turn_rate — 선택된 축을 중심으로 로봇이 회전하는 속도를 반환합니다.

교정 — 센서 교정을 관리합니다.

  • calibrate — 관성 센서를 보정합니다.

  • is_calibrating — 관성 센서가 현재 보정 중인지 여부를 반환합니다.

정위#

get_rotation#

회전은 로봇이 회전한 정도를 각도로 나타낸 것입니다. 방향과는 달리 회전은 359.99도를 초과하거나 0도 미만으로 감소할 수 있습니다. 프로젝트 시작 시 회전 값은 0도로 설정됩니다. get_rotation 로봇의 현재 회전 값을 실수형으로 반환합니다.

오른쪽으로 돌면 회전 각도가 증가하고, 왼쪽으로 돌면 회전 각도가 감소합니다. 예를 들어, 오른쪽으로 두 바퀴를 완전히 돌면 720도 회전하게 됩니다. 0도에서 왼쪽으로 한 바퀴를 완전히 돌면 -360도 회전하게 됩니다.

Usage:
robot.inertial.get_rotation()

매개변수

설명

이 메서드에는 매개변수가 없습니다.

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

헤딩은 로봇이 향하는 방향을 나타내며, 0도에서 359.99도까지의 각도로 측정됩니다. get_heading을 설정하면 로봇의 현재 헤딩을 부동 소수점 값으로 반환합니다.

초기 진행 방향은 0도입니다. 로봇이 359.99도를 넘어서 회전하면 진행 방향은 다시 0도로 돌아갑니다.

Usage:
robot.inertial.get_heading()

매개변수

설명

이 메서드에는 매개변수가 없습니다.

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

Yaw는 로봇이 수직축을 중심으로 좌우로 회전하는 것을 나타냅니다. get_yaw를 설정하면 -180.00도에서 180.00도 사이의 부동 소수점 값으로 로봇의 Yaw 각도를 반환합니다.

아래 이미지는 화살표를 사용하여 요(yaw) 회전의 양의 방향을 보여줍니다.

VEX AIM 코딩 로봇의 중앙에서 아래쪽으로 향하는 파란색 화살표가 있습니다. 파란색 화살표 주변에는 시계 방향으로 향하는 검은색 곡선 화살표가 있으며, 이는 양의 요(yaw) 방향을 나타냅니다.

Usage:
robot.inertial.get_yaw()

매개변수

설명

이 메서드에는 매개변수가 없습니다.

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

Roll은 로봇이 좌우로 기울어지는 것을 나타냅니다. get_roll을 설정하면 -180.00도에서 180.00도 사이의 부동 소수점 값으로 로봇의 롤 각도를 반환합니다.

아래 이미지는 화살표를 사용하여 롤의 양의 회전 방향을 보여줍니다.

VEX AIM 코딩 로봇의 AI 비전 센서 중앙에는 로봇 앞쪽으로 뻗어 나온 녹색 화살표가 있습니다. 녹색 화살표 주변에는 시계 반대 방향으로 휘어진 검은색 화살표가 있으며, 이는 로봇이 회전하는 양의 방향을 나타냅니다.

Usage:
robot.inertial.get_roll()

매개변수

설명

이 메서드에는 매개변수가 없습니다.

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

피치는 로봇이 앞뒤로 기울어지는 정도를 나타냅니다. get_pitch를 설정하면 -90.00도에서 90.00도 사이의 부동 소수점 값으로 로봇의 피치 각도를 반환합니다.

아래 이미지는 화살표를 사용하여 피치에 대한 양의 회전 방향을 보여줍니다.

VEX AIM 코딩 로봇의 VEX 로고 아래 측면으로 빨간색 화살표가 뻗어 있습니다. 빨간색 화살표 주변에는 검은색 화살표가 시계 반대 방향으로 휘어져 있으며, 이는 피치의 양의 방향을 나타냅니다.

Usage:
robot.inertial.get_pitch()

매개변수

설명

이 메서드에는 매개변수가 없습니다.

# 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 로봇의 현재 회전을 0도로 재설정합니다.

이 방법을 사용한 후, 로봇은 새로운 0도 회전 값을 기준으로 향후 회전을 추적합니다.

Usage:
robot.inertial.reset_rotation()

매개변수

설명

이 메서드에는 매개변수가 없습니다.

# 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 은 로봇의 현재 방향을 0도로 재설정합니다.

이 방법을 사용하면 로봇의 현재 방향이 새로운 0도 방향으로 설정됩니다.

Usage:
robot.inertial.reset_heading()

매개변수

설명

이 메서드에는 매개변수가 없습니다.

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

헤딩은 로봇이 향하는 방향을 나타내며, 0도에서 359.99도까지의 각도로 측정됩니다. set_heading 로봇의 현재 헤딩을 새로운 헤딩 값으로 변경합니다.

예를 들어, 로봇이 오른쪽을 향하도록 회전했을 때, 방향을 0도로 설정하면 오른쪽을 향한 위치가 새로운 0도가 됩니다. 그러면 로봇은 이 새로운 방향을 기준으로 다른 방향을 추적할 수 있습니다.

Usage:
robot.inertial.set_heading(heading)

매개변수

설명

heading

로봇의 진행 방향 값을 도 단위로 설정합니다. 이 값은 0에서 359.99 사이일 수 있습니다.

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

충돌#

crashed#

crashed 로봇이 갑작스러운 충격이나 충돌을 감지했을 때 호출될 함수를 등록합니다.

용법:

robot.inertial.crashed(callback, arg)

매개변수

설명

callback

충돌이 감지되면 실행되도록 미리 정의된 함수입니다.

arg

선택 사항입니다. 콜백 함수에 전달할 인수를 포함하는 튜플입니다. 자세한 내용은 매개변수가 있는 함수 사용을 참조하세요.

# 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 로봇이 충돌을 감지하는 데 필요한 급격한 가속도를 조정합니다.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

매개변수

설명

sensitivity

충돌 감도:

  • HIGH — 가장 민감함; 작은 충격도 감지하고 1G에서 작동합니다.
  • NORMAL — 기본 감도; 중간 정도의 충격을 감지하고 1.5G에서 작동합니다.
  • LOW — 가장 둔감함; 강한 충격을 감지하고 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)

운동#

get_acceleration#

가속도는 로봇이 얼마나 빠르게 가속하거나 감속하는지를 나타냅니다. get_acceleration 선택한 축에 대한 로봇의 가속도를 -4.00G에서 4.00G 사이의 부동 소수점 값으로 반환합니다.

G 가속도를 측정하는 단위입니다. 1G는 가만히 앉아 있을 때 중력으로부터 느끼는 가속도와 거의 같습니다.

해당 값은 선택된 축의 가속도 방향에 따라 양수 또는 음수가 될 수 있습니다. AIM에서 축 옵션은 로봇의 방향에 따라 다음과 같이 명명됩니다: FORWARD, RIGHTWARD, DOWNWARD.

로봇의 중심에서 방향 화살표가 뻗어 나오는 VEX AIM 코딩 로봇. 앞쪽에서 '앞쪽'이라고 표시된 녹색 화살표가 뻗어 나오고, 아래쪽에서 '아래쪽'이라고 표시된 파란색 화살표가 뻗어 나오고, VEX 로고 아래 로봇 측면에서 '오른쪽'이라고 표시된 빨간색 화살표가 뻗어 나옵니다.

용법:

robot.inertial.get_acceleration(type)

매개변수

설명

type

가속도를 측정할 축:

  • DOWNWARD — 로봇의 수직 방향 가속도를 측정합니다.
  • FORWARD — 로봇의 앞뒤 방향 가속도를 측정합니다.
  • RIGHTWARD — 로봇의 좌우 방향 가속도를 측정합니다.

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

회전율은 로봇이 회전하는 속도를 나타냅니다. get_turn_rate get_turn_rate 입력하면 로봇의 회전율을 초당 도\(dps\) 단위로 -1000.00에서 1000.00 dps 사이의 부동 소수점 값으로 반환합니다.

이 값은 로봇이 선택된 축을 중심으로 회전하는 방향에 따라 양수 또는 음수가 될 수 있습니다. 아래 이미지는 화살표를 사용하여 롤, 피치, 요우 회전 방향을 양의 값으로 나타냅니다.

로봇의 중심에서 방향 화살표가 뻗어 나오는 VEX AIM 코딩 로봇. 로봇 앞쪽에서 뻗어 나온 녹색 화살표(roll)와 그 주위를 시계 반대 방향으로 가리키는 검은색 곡선 화살표. 로봇 아래쪽에서 뻗어 나온 파란색 화살표(yaw)와 그 주위를 시계 방향으로 가리키는 검은색 곡선 화살표. 그리고 로봇 측면 VEX 로고 아래에서 뻗어 나온 빨간색 화살표(pitch)와 그 주위를 시계 반대 방향으로 가리키는 검은색 곡선 화살표.

Usage:
robot.inertial.get_turn_rate(axis)

매개변수

설명

axis

어떤 방향으로 복귀하시겠습니까?

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

구경 측정#

보정은 관성 센서가 2초 동안 센서 노이즈와 드리프트를 측정하고 보정하여 회전을 정확하게 측정할 수 있도록 도와줍니다. 이 시간 동안 로봇은 안정적인 표면에서 완전히 정지해 있어야 합니다. 보정 중에 움직이면 부정확한 결과가 나올 수 있습니다.

VEX 로봇은 시동 시 자동으로 자체 보정을 시도하며, 움직임이 감지되지 않을 때까지 기다립니다. 그러나 시동 중에 로봇을 운반하거나 이동시키면 센서가 제대로 보정되지 않거나 잘못된 보정값을 생성할 수 있습니다.

프로젝트에서 정확한 방향 설정이 매우 중요하거나 일관되고 반복 가능한 회전이 필요한 경우, 코드 시작 부분에 calibrate 호출하면 도움이 될 수 있습니다. 보정 중에는 로봇 화면에 “Calibrating…”와 같은 메시지를 표시하고, 보정이 완료되면 “Calibration complete.”로 업데이트하여 로봇이 보정 기간 동안 움직이지 않아야 함을 사용자(및 로봇을 사용하는 다른 사람)에게 알려주는 것이 좋습니다.

calibrate#

calibrate 스코프를 보정합니다. 보정은 관성 센서가 회전을 정확하게 측정할 수 있도록 2초 동안 센서 노이즈와 드리프트를 측정하고 보정하는 과정입니다. 이 시간 동안 로봇은 안정적인 표면에서 완전히 정지해 있어야 합니다. 보정 중에 움직이면 부정확한 결과가 나올 수 있습니다.

VEX 로봇은 시동 시 자동으로 자체 보정을 시도하며, 움직임이 감지되지 않을 때까지 기다립니다. 그러나 시동 중에 로봇을 운반하거나 이동시키면 센서가 제대로 보정되지 않거나 잘못된 보정값을 생성할 수 있습니다.

Usage:
robot.inertial.calibrate()

매개변수

설명

이 메서드에는 매개변수가 없습니다.

# 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 관성 센서가 보정 중인지 여부를 나타내는 부울 값을 반환합니다.

  • True — 관성 센서가 보정 중입니다.

  • False — 관성 센서가 보정 중이 아닙니다.

Usage:
robot.inertial.is_calibrating()

매개변수

설명

이 메서드에는 매개변수가 없습니다.

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