관성#
소개#
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) 회전의 양의 방향을 보여줍니다.
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도 사이의 부동 소수점 값으로 로봇의 롤 각도를 반환합니다.
아래 이미지는 화살표를 사용하여 롤의 양의 회전 방향을 보여줍니다.
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도 사이의 부동 소수점 값으로 로봇의 피치 각도를 반환합니다.
아래 이미지는 화살표를 사용하여 피치에 대한 양의 회전 방향을 보여줍니다.
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)
매개변수 |
설명 |
|---|---|
|
로봇의 진행 방향 값을 도 단위로 설정합니다. 이 값은 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)
매개변수 |
설명 |
|---|---|
|
충돌이 감지되면 실행되도록 미리 정의된 함수입니다. |
|
선택 사항입니다. 콜백 함수에 전달할 인수를 포함하는 튜플입니다. 자세한 내용은 매개변수가 있는 함수 사용을 참조하세요. |
# 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)
매개변수 |
설명 |
|---|---|
|
충돌 감도:
|
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.

용법:
robot.inertial.get_acceleration(type)
매개변수 |
설명 |
|---|---|
|
가속도를 측정할 축:
|
# 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 사이의 부동 소수점 값으로 반환합니다.
이 값은 로봇이 선택된 축을 중심으로 회전하는 방향에 따라 양수 또는 음수가 될 수 있습니다. 아래 이미지는 화살표를 사용하여 롤, 피치, 요우 회전 방향을 양의 값으로 나타냅니다.

Usage:
robot.inertial.get_turn_rate(axis)
매개변수 |
설명 |
|---|---|
|
어떤 방향으로 복귀하시겠습니까?
|
# 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)