Cảm biến quán tính#

Giới thiệu#

Lớp inertial được sử dụng để điều khiển và truy cập dữ liệu từ Cảm biến quán tính tích hợp trong não IQ (thế hệ thứ 2). Cảm biến này đo lường cách não di chuyển và xoay.

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 lường sự quay, chẳng hạn như hướng, độ quay, tốc độ quay và hướng định vị. Gia tốc kế đo lường sự thay đổi trong chuyển động, chẳng hạn như tăng tốc hoặc giảm tốc dọc theo các trục x, y và z.

Hàm tạo lớp#

inertial(
  turnType dir = turnType::right );

Lớp Destructor#

Destroys the inertial object and releases associated resources.

~inertial();

Thông số#

Tham số

Kiểu

Sự miêu tả

dir

turnType

Tùy chọn. Hướng trả về giá trị dương:

  • right (mặc định) — Rẽ phải trả về giá trị dương.
  • left — Rẽ trái trả về giá trị dương.

Ví dụ#

// Create the inertial instance
inertial myInertial = inertial(
    right);     // dir

Chức năng thành viên#

Lớp inertial bao gồm các hàm thành viên sau:

  • heading — Trả về hướng mà cảm biến đang hướng tới.

  • rotation — Trả về mức độ xoay của cảm biến.

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

  • setRotation — Đặt góc quay hiện tại của cảm biến thành một giá trị góc quay mới.

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

  • resetHeading — Đặt lại hướng hiện tại của cảm biến về 0 độ.

  • resetRotation — Đặt lại góc quay hiện tại của cảm biến về 0 độ.

  • isCalibrating — 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.

  • changed — Đăng ký một hàm gọi lại chạy khi tiêu đề thay đổi.

  • installed — Trả về trạng thái Cảm biến quán tính đã được cài đặt hay chưa.

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

  • gyroRate — Trả về tốc độ quay của cảm biến trên trục đã chọn.

  • orientation — Trả về góc cuộn, nghiêng hoặc xoay của Cảm biến quán tính.

  • collision — Đăng ký một hàm gọi lại chạy khi phát hiện va chạm.

  • setTurnType — Đặt hướng rẽ trả về giá trị hướng dương.

  • getTurnType — Trả về hướng rẽ nào tạo ra giá trị dương.

Trước khi gọi bất kỳ hàm thành viên nào của lớp inertial , cần phải tạo một thể hiện của lớp inertial , như hình bên dưới:

/* This constructor is required when using VS Code.
Inertial Sensor configuration is generated automatically
in VEXcode with the IQ (2nd gen) Brain. Replace the values
as needed. */

// Create the inertial instance
inertial myInertial = inertial();

heading#

Hướng (heading) là hướng mà cảm biến đang quay tới, được đo bằng độ từ 0 đến 359,99. Chức năng này trả về hướng hiện tại của cảm biến.

Góc quay ban đầu là 0 độ. Nếu cảm biến quay vượt quá 359,99 độ, góc quay sẽ quay trở lại 0 độ.

Available Functions
double heading( rotationUnits units = degrees );

Parameters

Tham số

Kiểu

Sự miêu tả

units

rotationUnits

The heading unit:

  • deg / degrees (default) — degrees
  • turns / rev — revolutions

Return Values

Trả về một giá trị double biểu thị hướng hiện tại của cảm biến theo đơn vị đã chỉ định.

Notes
  • Giá trị hướng được bao quanh trong khoảng từ 0 đến 359,99 độ. Sử dụng rotation để truy cập giá trị xoay liên tục.

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

rotation#

Trả về góc quay hiện tại của cảm biến quán tính.

Góc quay thể hiện mức độ xoay của cảm biến. 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 độ. Ví dụ, quay hai vòng hoàn toàn sang phải sẽ cho góc quay là 720 độ. Quay một vòng hoàn toàn sang trái từ 0 độ sẽ cho góc quay là -360 độ.

Available Functions
double rotation( rotationUnits units = degrees );

Parameters

Tham số

Kiểu

Sự miêu tả

units

rotationUnits

The rotation unit:

  • deg / degrees (default) — degrees
  • turns / rev — revolutions

Return Values

Returns a double representing the current rotation in the specified units.

Notes
  • Giá trị xoay liên tục và không bị cuộn lại giữa 0 và 359,99 độ. Sử dụng heading để truy cập giá trị hướng bị cuộn lại.

Examples
// Turn, then show the current rotation
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.rotation(degrees));

setHeading#

Hướng (heading) là hướng mà cảm biến đang đối mặt, được đo bằng độ từ 0 đến 359,99. Chức năng này thay đổi hướng hiện tại của cảm biến quán tính thành một giá trị hướng mới.

Ví dụ, nếu cảm biến đã xoay sang bên phải, việc đặt hướng về 0 độ sẽ biến vị trí hướng sang phải đó thành 0 độ mới. Sau đó, cảm biến có thể theo dõi các hướng khác dựa trên hướng mới đó.

Available Functions
void setHeading( double        value,
                 rotationUnits units );

Parameters

Tham số

Kiểu

Sự miêu tả

value

double

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

units

rotationUnits

The heading unit:

  • deg / degrees — degrees
  • turns / rev — revolutions

Return Values

Hàm này không trả về giá trị nào.

Examples
// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);

setRotation#

Đặt góc quay hiện tại của cảm biến quán tính về một giá trị xác định.

Góc quay thể hiện mức độ xoay của cảm biến. Không giống như hướng, góc quay có thể tăng vượt quá 359,99 độ hoặc giảm xuống dưới 0 độ.

Available Functions
void setRotation( double        value,
                  rotationUnits units );

Parameters

Tham số

Kiểu

Sự miêu tả

value

double

Giá trị xoay, tính bằng độ, cần thiết lập cho cảm biến. Giá trị này có thể là số nguyên hoặc số thập phân.

units

rotationUnits

The rotation unit:

  • deg / degrees — degrees
  • turns / rev — revolutions

Return Values

Hàm này không trả về giá trị nào.

Examples
// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);

calibrate#

Hiệu chỉnh cảm biến quán tính.

Hiệu chuẩn giúp cảm biến đo các góc quay một cách chính xác. Giữ cảm biến cố định trong quá trình hiệu chuẩn. Nếu cảm biến di chuyển trong quá trình hiệu chuẩn, các giá trị hướng, độ xoay, tốc độ quay hồi chuyển và hướng định vị có thể không được đo chính xác.

Available Functions
void calibrate( );

Parameters

Hàm này không chấp nhận bất kỳ tham số nào.

Return Values

Hàm này không trả về giá trị nào.

Notes
  • Cảm biến cần được giữ nguyên vị trí trong suốt quá trình hiệu chuẩn.

  • Sử dụng isCalibrating để xác định khi nào quá trình hiệu chuẩn đã hoàn tất.

resetHeading#

Đặt lại hướng hiện tại của cảm biến quán tính về 0 độ.

Sau khi sử dụng chức năng này, hướng hiện tại của cảm biến sẽ trở thành hướng 0 độ mới.

Available Functions
void resetHeading();

Parameters

Hàm này không nhận tham số nào.

Return Values

Hàm này không trả về giá trị nào.

resetRotation#

Đặt lại góc quay hiện tại của cảm biến quán tính về 0 độ.

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

Available Functions
void resetRotation();

Parameters

Hàm này không nhận tham số nào.

Return Values

Hàm này không trả về giá trị nào.

isCalibrating#

Trả về trạng thái cho biết cảm biến quán tính hiện đang hiệu chuẩn hay không.

Available Functions
bool isCalibrating();

Parameters

Hàm này không nhận tham số nào.

Return Values

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 — The sensor is currently calibrating.
  • false — The sensor is not currently calibrating.

changed#

Đăng ký một hàm gọi lại sẽ chạy khi giá trị hướng của cảm biến quán tính thay đổi.

Available Functions
void changed( void (* callback)(void) );

Parameters

Tham số

Kiểu

Sự miêu tả

callback

void (*)(void)

Con trỏ đến một hàm sẽ được gọi khi giá trị tiêu đề thay đổi. Hàm này không được nhận tham số và trả về void

Return Values

Hàm này không trả về giá trị nào.

Examples

Xác định hàm gọi lại (bên ngoài int main())

// Display the heading when the Inertial Sensor's heading value changes.
void onHeadingChanged() {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Heading: %.2f", myInertial.heading());
}

Đăng ký hàm gọi lại bên trong int main()

int main() {
  // Run onHeadingChanged when the Inertial Sensor's heading value changes.
  myInertial.changed(onHeadingChanged);
}

installed#

Trả về trạng thái cho biết cảm biến quán tính đã được cài đặt và kết nối hay chưa.

Available Functions
bool installed();

Parameters

Hàm này không nhận tham số nào.

Return Values

Trả về giá trị Boolean cho biết cảm biến quán tính đã được cài đặt và kết nối hay chưa:

  • true — The sensor is connected and responding.
  • false — The sensor is not connected or not detected.

acceleration#

Gia tốc thể hiện tốc độ tăng hoặc giảm của cảm biến. Chức năng này trả về gia tốc của Cảm biến quán tính trên trục đã chọn, từ -4,0 G đến 4,0 G.

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ị này có thể dương hoặc âm tùy thuộc vào hướng của gia tốc trên trục đã chọn.

Available Functions
double acceleration( axisType axis );

Parameters

Tham số

Kiểu

Sự miêu tả

axis

axisType

Trục đo gia tốc:

  • xaxis
  • yaxis
  • zaxis

Return Values

Trả về giá trị double biểu thị gia tốc dọc theo trục được chỉ định tính bằng G (đơn vị trọng lực).

Notes
  • Các giá trị gia tốc được báo cáo theo đơn vị G.

gyroRate#

Tốc độ quay của con quay hồi chuyển là tốc độ quay của cảm biến quán tính. Chức năng này trả về tốc độ quay hiện tại của cảm biến quán tính trên trục đã chọn.

Giá trị có thể dương hoặc âm tùy thuộc vào hướng quay của cảm biến trên trục đó.

Available Functions
double gyroRate( axisType      axis,
                 velocityUnits units );

Parameters

Tham số

Kiểu

Sự miêu tả

axis

axisType

Trục để trả về tốc độ con quay hồi chuyển:

  • xaxis
  • yaxis
  • zaxis

units

velocityUnits

Đơn vị tốc độ quay hồi chuyển:

  • dps — độ trên giây
  • rpm — vòng/phút

Return Values

Trả về giá trị double biểu thị tốc độ quay hiện tại dọc theo trục được chỉ định, theo đơn vị đã chọn.

Examples
// Display the rate of change of rotation while turning in dps
Drivetrain.turn(right);
wait(1, seconds);

Brain.Screen.print(myInertial.gyroRate(zaxis, dps));

Drivetrain.stop();

orientation#

Orientation là góc hiện tại của cảm biến quán tính trên trục quay đã chọn. Chức năng này trả về hướng hiện tại của cảm biến quán tính cho trục được chỉ định.

Các thuật ngữ “roll”, “pitch” và “yaw” mô tả các hướng khác nhau mà cảm biến có thể nghiêng hoặc xoay.

Available Functions
double orientation(
  orientationType type,
  rotationUnits   units );

Parameters

Tham số

Kiểu

Sự miêu tả

type

orientationType

Góc định hướng để quay trở lại:

  • pitch
  • roll
  • yaw

units

rotationUnits

The orientation unit:

  • deg / degrees — degrees
  • turns / rev — revolutions

Return Values

Trả về một double biểu thị góc định hướng đã chọn theo đơn vị được chỉ định.

Examples
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1,1);
  // Show the Inertial Sensor's orientation value
  // for roll in degrees
  double orient = myInertial.orientation(roll, deg);
  Brain.Screen.print("%f", orient);
  wait(0.1, seconds);
}

collision#

Đăng ký một hàm gọi lại sẽ chạy khi Cảm biến quán tính phát hiện va chạm hoặc tác động đột ngột.

Available Functions
void collision( void (* callback)(axisType, double, double, double) );

Parameters

Tham số

Kiểu

Sự miêu tả

callback

void (*)(axisType, double, double, double)

Một con trỏ đến một hàm sẽ được gọi khi phát hiện va chạm. Hàm gọi lại phải chấp nhận các tham số sau:

  • axisType — Trục mà va chạm được phát hiện.
  • Giá trị gia tốc tại thời điểm va chạm, theo thứ tự:
    • double — Gia tốc dọc theo trục x (tính bằng G).
    • double — Gia tốc dọc theo trục y (tính bằng G).
    • double — Gia tốc dọc theo trục z (tính bằng G).
Hàm phải trả về void.

Return Values

Hàm này không trả về giá trị nào.

Examples

Xác định hàm gọi lại (bên ngoài int main())

// Display a message when the Inertial Sensor detects a collision.
void onCollision(axisType axis, double x, double y, double z) {
  Brain.Screen.print("Collision detected!");
}

Đăng ký hàm gọi lại bên trong int main()

int main() {
  // Run onCollision when the Inertial Sensor detects a collision.
  myInertial.collision(onCollision);
}

setTurnType#

Thiết lập hướng quay trả về giá trị dương.

Available Functions
void setTurnType( turnType dir );

Parameters

Tham số

Kiểu

Sự miêu tả

dir

turnType

Hướng trả về giá trị dương:

  • right
  • left

Return Values

Hàm này không trả về giá trị nào.

Notes

getTurnType#

Các khoản trả về có hướng quay tạo ra giá trị dương.

Available Functions
turnType getTurnType();

Parameters

Hàm này không nhận tham số nào.

Return Values

Trả về giá trị turnType cho biết hướng nào tạo ra giá trị dương:

  • right — Clockwise rotation returns positive values.
  • left — Counterclockwise rotation returns positive values.
Notes