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 EXP. EXP có thể sử dụng Cảm biến quán tính tích hợp sẵn trong Brain hoặc Cảm biến quán tính bên ngoài được kết nối với Cổng thông minh.

Cảm biến quán tính đo lường chuyển động và hướng quay của robot. 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 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(
    int32_t  index,
    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ả

index

int32_t

Tùy chọn. Cổng thông minh mà cảm biến quán tính bên ngoài được kết nối, được viết dưới dạng PORTx, trong đó x là số cổng (ví dụ: PORT1). Không bao gồm tham số này khi sử dụng cảm biến quán tính tích hợp sẵn của bộ xử lý.

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

// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();

// Use an external Inertial Sensor connected to Port 1.
inertial Inertial1 = inertial(PORT1);

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 sẽ được gọi 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 để chạy khi phát hiện va chạm.

  • setTurnType — Đặt hướng rẽ trả về giá trị 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 using the Device Menu. Replace the values
as needed. */

// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();

heading#

Trả về hướng hiện tại của cảm biến quán tính.

Hướng quay là hướng mà cảm biến đang hướng tới, được đo bằng độ từ 0 đến 359,99 độ. Nếu cảm biến quay vượt quá 359,99 độ, hướng 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#

Góc quay là lượng mà cảm biến đã xoay, được đo bằng độ. 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 độ. Khi bắt đầu một dự án, giá trị góc quay được đặt là 0 độ. Chức năng này thay đổi góc quay hiện tại của cảm biến quán tính thành một giá trị mới.

Ví dụ, nếu cảm biến đã quay hai vòng hoàn chỉnh sang phải, giá trị quay của nó sẽ là 720 độ. Việc đặt giá trị quay về 0 độ sẽ thiết lập lại giá trị quay từ 720 về 0 độ. Sau đó, cảm biến có thể theo dõi các vòng quay dựa trên giá trị mới này.

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

// Called 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()

/* vexcodeInit() is only required when using VEXcode.
Remove vexcodeInit() if compiling in VS Code. */
int main() {

  // Turn the robot by hand briefly
  // to change the robot's heading
  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 đã chọn. Chức năng này trả về hướng của cảm biến quán tính, từ -180,00 đến 180,00 độ.

Trục x, y hoặc z được chọn tương ứng với một trong các trục định hướng của cảm biến.

Available Functions
double orientation(
  axisType      axis,
  rotationUnits units );

Parameters

Tham số

Kiểu

Sự miêu tả

axis

axisType

Trục mà thông tin hướng được trả về:

  • xaxis
  • yaxis
  • zaxis

units

rotationUnits

The rotation 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(xaxis, 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())

// Called 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()

/* vexcodeInit() is only required when using VEXcode.
Remove vexcodeInit() if compiling in VS Code. */
int main() {

  // Firmly move the robot by hand briefly to simulate
  // a collision and call the onCollision function
  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