惯性#
介绍#
VEX AIM 编程机器人的惯性传感器内置一个用于测量旋转运动的三轴陀螺仪和一个用于检测运动变化的三轴加速度计。这些传感器使机器人能够追踪其方向、航向和加速度。以下是所有可用方法的列表:
方向——获取机器人的航向和角度。
get_rotation
– Returns how much the robot has turned since it started.get_heading
– Returns the current heading (0 to 359.99°).get_yaw
– Returns the yaw angle (–180 to 180°).get_roll
– Returns the roll angle (–180 to 180°).get_pitch
– Returns the pitch angle (–90 to 90°).reset_rotation
– Resets the rotation value to zero.reset_heading
– Sets the current heading to zero.set_heading
– Sets the heading to a specific value.
碰撞——检测碰撞。
crashed
– Registers a function to run when a collision is detected.
运动——测量加速度和转弯速度。
get_acceleration
– Returns acceleration in a specific direction.get_turn_rate
– Returns turning rate in degrees per second.
校准——管理传感器校准。
calibrate
– Calibrates the inertial sensor.is_calibrating
– Returns whether the sensor is currently calibrating.
方向#
get_rotation#
get_rotation
returns the robot’s net rotation in degrees as a float.
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#
get_heading
returns the robot’s heading angle as a float in the range 0 to 359.99 degrees.
用法:
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#
get_yaw
returns the robot’s yaw angle in the range –180.00 to 180.00 degrees as a float.
下图使用箭头显示偏航的正旋转方向。

用法:
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#
get_roll
returns the robot’s roll angle in the range –180.00 to 180.00 degrees as a float.
下图使用箭头表示滚动的正向旋转方向。

用法:
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
returns the robot’s pitch angle in the range –90.00 to 90.00 degrees as a float.
下图使用箭头表示俯仰正向旋转的方向。

用法:
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
resets the robot’s gyro rotation value to 0 degrees.
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
resets the robot’s heading to 0 degrees.
用法:
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#
set_heading
sets the robot’s heading to a specified value in the range 0 to 359.99 degrees.
用法:
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
registers a function to be called when the robot detects a collision.
用法:
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
adjusts the acceleration threshold required to trigger a crash response.
Usage:
robot.inertial.set_crash_sensitivity(sensitivity)
参数 |
描述 |
---|---|
|
The crash 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(SensitivityType.HIGH)
robot.move_at(0)
运动#
get_acceleration#
get_acceleration
returns the robot’s acceleration in a specified direction as a float in the range –4.00 to 4.00 g.
用法:
robot.inertial.get_acceleration(type)
参数 |
描述 |
---|---|
|
The direction of acceleration to return: DOWNWARD - Acceleration affecting the robot’s vertical movement.FORWARD - Acceleration affecting the robot’s movement along its front-to-back direction.RIGHTWARD - Acceleration affecting the robot’s movement along its side-to-side direction. |
# 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
returns the robot’s turning rate in degrees per second (DPS) as a float, from –1000.00 to 1000.00 dps.
下图使用箭头显示滚动、俯仰和偏航的正旋转方向。
用法:
robot.inertial.get_turn_rate(axis)
参数 |
描述 |
---|---|
|
Which orientation to return: |
# 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 机器人启动后会尝试自动校准,直到检测到无运动为止。但是,如果在启动过程中搬运或移动机器人,传感器可能无法正确校准或产生错误的校准结果。
If your project relies heavily on having an accurate heading, or if you need consistent and repeatable turns, calling calibrate
at the beginning of your code can help. It’s good practice to display a message like “Calibrating…” on the robot’s screen during calibration, then update it to “Calibration complete.” afterward to remind you (and anyone else using the robot) that the robot must remain motionless during this period.
calibrate#
calibrate
calibrates the gyro. Calibration is an internal procedure that measures and compensates for sensor noise and drift over a 2-second period. During this time, the robot must remain completely still (i.e., on a stable surface without any external movement). Movement during calibration will produce inaccurate results.
VEX 机器人启动后会尝试自动校准,直到检测到无运动为止。但是,如果在启动过程中搬运或移动机器人,传感器可能无法正确校准或产生错误的校准结果。
用法:
robot.inertial.calibrate()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Calibrate the gryo 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
returns a Boolean indicating whether the gyro is calibrating.
True
- The gyro is calibrating.False
- The gyro is not calibrating.
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)