惯性#

介绍#

VEX IQ(第二代)大脑内置一个用于测量旋转运动的三轴陀螺仪和一个用于检测运动变化的三轴加速度计。这些传感器使机器人能够追踪其方向、航向和加速度。

For the examples below, the configured Inertial Sensors will be named BrainInertial, and will be used in all subsequent examples throughout this API documentation when referring to Inertial class methods.

以下是所有可用方法的列表:

方向——测量惯性传感器的旋转运动。

  • heading – Returns the current heading.

  • rotation – Returns the cumulative rotation.

  • setHeading – Sets the Inertial Sensor’s heading to a specified value.

  • setRotation – Sets the Inertial Sensor’s rotation value.

  • calibrate – Calibrates the Inertial Sensor for stable heading tracking.

  • isCalibrating – Returns whether or not the Inertial Sensor is calibrating.

  • resetHeading – Sets the heading of the Inertial Sensor to 0.

  • resetRotation – Sets the rotation of the Inertial Sensor to 0.

运动——检测运动的变化。

  • acceleration – Returns the linear acceleration along the x, y, or z axis.

  • gyroRate – Returns the angular velocity around the x, y, or z axis.

  • orientation – Returns the roll, pitch, or yaw based on tilt and rotation.

  • changed – Registers a function to call when the Inertial Sensor detects change.

构造函数——手动初始化和配置惯性传感器。

  • inertial – Creates an Inertial Sensor.

方向#

heading#

heading returns the current heading of the Inertial Sensor.

Usage:
BrainInertial.heading(units)

参数

描述

units

Optional. The units that represent the heading:

  • degrees (default)
  • turns
int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Turn, then show the current heading
  Drivetrain.turnFor(right, 450, degrees);
  Brain.Screen.print("%f", BrainInertial.heading(degrees));
}

rotation#

rotation returns the current rotation of the Inertial Sensor.

Usage:
BrainInertial.rotation(units)

参数

描述

units

Optional. The units that represent the rotation:

  • degrees (default)
  • turns
int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Turn, then show the total rotation
  Drivetrain.turnFor(right, 450, degrees);
  Brain.Screen.print("%f", BrainInertial.rotation(degrees));
}

setHeading#

setHeading sets the heading of the Inertial Sensor to a specific value.

Usage:
BrainInertial.setHeading(value, units);

参数

描述

value

要设置的航向值。

units

The unit that represents the new heading:

  • degrees
  • turns
int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Make current facing equal to 90 degrees
  BrainInertial.setHeading(90, degrees);

  // Turn to 0 degrees using that new reference
  Drivetrain.turnToHeading(0, degrees);
}

setRotation#

setRotation sets the rotation of the Inertial Sensor to a specific value.

Usage:
BrainInertial.setRotation(value, units);

参数

描述

value

要设置的旋转值。

units

The unit that represents the new rotation:

  • degrees
  • turns
int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Pretend we have already turned 180 degrees
  BrainInertial.setRotation(180, degrees);

  // Spin back to the 0 degree rotation
  Drivetrain.turnToRotation(0, degrees);
}

calibrate#

calibrate calibrates the Inertial Sensor. All subsequent lines will wait for the calibration to complete before executing. Calibration is an internal procedure that measures and compensates for sensor noise and drift over a specified period. During this time, the Brain must remain completely still (i.e., on a stable surface without any external movement). Movement during calibration will produce inaccurate results.

../../_images/IQ_right_orientation.png../../_images/IQ_left_orientation.png../../_images/IQ_top_orientation.png

VEX 机器人会在每次项目开始时尝试自动校准。但是,如果在项目启动期间搬运或移动机器人,传感器可能无法正确校准或产生错误的校准结果。

Usage:
BrainInertial.calibrate();

范围

描述

该方法没有参数。

isCalibrating#

isCalibrating checks if the Inertial Sensor is currently calibrating.

  • 1 - The Inertial Sensor is calibrating.

  • 0 - The Inertial Sensor is not calibrating.

Usage:
isCalibrating()

范围

描述

该方法没有参数。

resetHeading#

resetHeading resets the heading of the Inertial Sensor to 0.

Usage:
BrainInertial.resetHeading();

参数

描述

该方法没有参数。

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Turn to 90, reset heading, then turn to 90 again
  Drivetrain.turnToHeading(90, degrees);
  wait(0.5, seconds);
  BrainInertial.resetHeading();
  Drivetrain.turnToHeading(90, degrees);
}

resetRotation#

resetRotation resets the rotation of the Inertial Sensor to 0.

Usage:
BrainInertial.resetRotation();

参数

描述

该方法没有参数。

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Turn to rotation -90, reset, then turn to -90 again
  Drivetrain.turnToRotation(-90, degrees);
  wait(0.5, seconds);
  BrainInertial.resetRotation();
  Drivetrain.turnToRotation(-90, degrees);
}

运动#

acceleration#

acceleration returns the acceleration of the Inertial Sensor in terms of G (gravity).

Usage:
BrainInertial.acceleration(axis);

参数

描述

axis

The axis to return the acceleration from:

  • xaxis
  • yaxis
  • zaxis

gyroRate#

gyroRate returns the gyro rate for one axis of the Inertial Sensor.

Usage:
BrainInertial.gyroRate(axis, units);

参数

描述

axis

The axis to return the gyro rate from:

  • xaxis
  • yaxis
  • zaxis

units

The unit used to represent the gyro rate:

  • dps – degrees per second
  • rpm – rotations per minute
  • velocityUnits::pct – percent
int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Turn, then display z-axis rate in degrees per second
  Drivetrain.turn(right);
  wait(1, seconds);
  Brain.Screen.print("%f", BrainInertial.gyroRate(zaxis, dps));
  Drivetrain.stop();
}

orientation#

orientation returns the orientation for one axis of the Inertial Sensor.

Usage:
BrainInertial.orientation(type, units);

参数

描述

type

The axis to return the orientation from:

  • pitch
  • roll
  • yaw

units

The unit used to represent the orientation:

  • degrees
  • turns
int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Display the changes in orientation as the Brain
  // Tilt and rotate the Brain to see the values change
  while (true) {
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print("Roll: %f", BrainInertial.orientation(roll, degrees));
    Brain.Screen.newLine();
    Brain.Screen.print("Pitch: %f", BrainInertial.orientation(pitch, degrees));
    Brain.Screen.newLine();
    Brain.Screen.print("Yaw: %f", BrainInertial.orientation(yaw, degrees));
    wait(100, msec);
  }
}

changed#

changed registers a callback function for when the Inertial Sensor’s heading changes.

Usage:
BrainInertial.changed(callback);

参数

描述

callback

当惯性传感器航向改变时调用的回调函数。

void onHeadingChange() {
  // Show a message when heading changes
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Heading changed!");
}

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Register callback and cause a heading change
  BrainInertial.changed(onHeadingChange);
  Drivetrain.turnFor(right, 90, degrees);
}

构造函数#

inertial#

inertial creates an Inertial Sensor.

Usage:
inertial BrainInertial = inertial();

范围

描述

该方法没有参数。

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Create an Inertial object and read heading
  inertial BrainInertial = inertial();
}