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ả |
|---|---|---|
|
|
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 |
|
|
Tùy chọn. Hướng 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 Functionsdouble heading( rotationUnits units = degrees );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
The heading unit:
|
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.
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.
// 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 Functionsdouble rotation( rotationUnits units = degrees );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
The rotation unit:
|
Returns a double representing the current rotation in the specified units.
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.
// 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 Functionsvoid setHeading( double value, rotationUnits units );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
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. |
|
|
The heading unit:
|
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 Functionsvoid setRotation( double value, rotationUnits units );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
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. |
|
|
The rotation unit:
|
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 Functionsvoid calibrate( );
Hàm này không chấp nhận bất kỳ tham số nào.
Return ValuesHàm này không trả về giá trị nào.
NotesCả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 Functionsvoid resetHeading();
Hàm này không nhận tham số nào.
Return ValuesHà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 Functionsvoid resetRotation();
Hàm này không nhận tham số nào.
Return ValuesHà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 Functionsbool isCalibrating();
Hàm này không nhận tham số nào.
Return ValuesTrả 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 Functionsvoid changed( void (* callback)(void) );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
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ề |
Hàm này không trả về giá trị nào.
ExamplesXá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 Functionsbool installed();
Hàm này không nhận tham số nào.
Return ValuesTrả 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.
double acceleration( axisType axis );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Trục đo gia tốc:
|
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).
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 Functionsdouble gyroRate( axisType axis, velocityUnits units );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Trục để trả về tốc độ con quay hồi chuyển:
|
|
|
Đơn vị tốc độ quay hồi chuyển:
|
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.
// 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 Functionsdouble orientation(
axisType axis,
rotationUnits units );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Trục mà thông tin hướng được trả về:
|
|
|
The rotation unit:
|
Trả về một double biểu thị góc định hướng đã chọn theo đơn vị được chỉ định.
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 Functionsvoid collision( void (* callback)(axisType, double, double, double) );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
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:
void. |
Hàm này không trả về giá trị nào.
ExamplesXá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 Functionsvoid setTurnType( turnType dir );
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Hướng trả về giá trị dương:
|
Hàm này không trả về giá trị nào.
NotesCài đặt này ảnh hưởng đến cách
headingvàrotationbáo cáo các giá trị dương và âm.Việc gọi hàm này sẽ ghi đè giá trị
dirđược chỉ định khi xây dựng đối tượng quán tínhinertial.
getTurnType#
Các khoản trả về có hướng quay tạo ra giá trị dương.
Available FunctionsturnType getTurnType();
Hàm này không nhận tham số nào.
Return ValuesTrả 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.
Giá trị này được đặt trong quá trình xây dựng đối tượng quán tính
inertialhoặc bằng cách gọisetTurnType.