เซ็นเซอร์ความเฉื่อย#
การแนะนำ#
คลาส inertial ใช้สำหรับควบคุมและเข้าถึงข้อมูลจากเซ็นเซอร์วัดความเฉื่อยในตัวของ IQ (รุ่นที่ 2) Brain เซ็นเซอร์นี้จะวัดการเคลื่อนไหวและการหมุนของ Brain
เซ็นเซอร์วัดความเฉื่อยใช้ส่วนประกอบสองส่วนในการทำงานนี้ ไจโรสโคปจะวัดการหมุน เช่น ทิศทาง การหมุน อัตราการหมุน และการวางแนว ส่วนแอ็กเซลเลอโรเมตรจะวัดการเปลี่ยนแปลงของการเคลื่อนที่ เช่น การเร่งความเร็วหรือการลดความเร็วตามแกน x, y และ z
ตัวสร้างคลาส#
inertial(
turnType dir = turnType::right );
ตัวทำลายคลาส#
ทำลายวัตถุ inertial และปล่อยทรัพยากรที่เกี่ยวข้อง
~inertial();
พารามิเตอร์#
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ตัวเลือกเสริม ทิศทางที่ส่งค่าบวก:
|
ตัวอย่าง#
// Create the inertial instance
inertial myInertial = inertial(
right); // dir
ฟังก์ชันสมาชิก#
คลาส inertial ประกอบด้วยฟังก์ชันสมาชิกต่อไปนี้:
heading— ส่งคืนทิศทางที่เซ็นเซอร์หันไปrotation— ส่งคืนระยะทางที่เซ็นเซอร์หมุนไปsetHeading— ตั้งค่าทิศทางปัจจุบันของเซ็นเซอร์เป็นค่าทิศทางใหม่setRotation— ตั้งค่าการหมุนปัจจุบันของเซ็นเซอร์เป็นค่าการหมุนใหม่calibrate— ปรับเทียบเซ็นเซอร์เฉื่อยresetHeading— รีเซ็ตทิศทางปัจจุบันของเซ็นเซอร์เป็น 0 องศาresetRotation— รีเซ็ตการหมุนปัจจุบันของเซ็นเซอร์เป็น 0 องศาisCalibrating— ส่งคืนว่าเซ็นเซอร์เฉื่อยกำลังทำการปรับเทียบอยู่หรือไม่changed— ลงทะเบียนฟังก์ชันเรียกกลับที่จะทำงานเมื่อหัวเรื่องเปลี่ยนแปลงinstalled— ส่งคืนว่าเซ็นเซอร์เฉื่อยได้รับการติดตั้งหรือไม่acceleration— ส่งคืนอัตราเร็วที่เซ็นเซอร์เร่งความเร็วหรือชะลอความเร็วบนแกนที่เลือกgyroRate— ส่งคืนความเร็วในการหมุนของเซ็นเซอร์บนแกนที่เลือกorientation— ส่งคืนมุมม้วน มุมเงย หรือมุมหันเหของเซ็นเซอร์เฉื่อยcollision— ลงทะเบียนฟังก์ชันเรียกกลับที่จะทำงานเมื่อตรวจพบการชนกันsetTurnType— กำหนดทิศทางการเลี้ยวที่จะส่งค่าหัวทิศทางบวกกลับมาgetTurnType— ส่งคืนทิศทางการเลี้ยวที่ให้ค่าบวก
ก่อนเรียกใช้ฟังก์ชันสมาชิก inertial ใดๆ จะต้องสร้างอินสแตนซ์ inertial ก่อน ดังแสดงด้านล่าง:
/* 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#
ทิศทาง (Heading) คือทิศทางที่เซ็นเซอร์หันไป โดยวัดเป็นองศาตั้งแต่ 0 ถึง 359.99 ฟังก์ชันนี้จะส่งคืนค่าทิศทางปัจจุบันของเซ็นเซอร์
ทิศทางเริ่มต้นคือ 0 องศา หากเซ็นเซอร์หมุนเลย 359.99 องศา ทิศทางจะวนกลับไปที่ 0 องศา
Available Functionsdouble heading( rotationUnits units = degrees );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
หน่วยวัด:
|
ส่งคืนค่า double ซึ่งแสดงทิศทางปัจจุบันของเซ็นเซอร์ในหน่วยที่ระบุ
ค่าหัวจะถูกวนซ้ำระหว่าง 0 ถึง 359.99 องศา ใช้
rotationเพื่อเข้าถึงค่าการหมุนต่อเนื่อง
// Turn, then show the current heading
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.heading(degrees));
rotation#
ส่งคืนค่าการหมุนปัจจุบันของเซ็นเซอร์วัดความเฉื่อย
การหมุนคือจำนวนองศาที่เซ็นเซอร์หมุนไป ต่างจากทิศทาง การหมุนสามารถเพิ่มขึ้นเกิน 359.99 องศา หรือลดลงต่ำกว่า 0 องศาได้ ตัวอย่างเช่น การหมุนไปทางขวาครบสองรอบ จะได้ค่าการหมุน 720 องศา การหมุนไปทางซ้ายครบหนึ่งรอบจาก 0 องศา จะได้ค่าการหมุน -360 องศา
Available Functionsdouble rotation( rotationUnits units = degrees );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
หน่วยการหมุน:
|
ส่งคืนค่า double ซึ่งแสดงถึงการหมุนปัจจุบันในหน่วยที่ระบุ
ค่าการหมุนเป็นแบบต่อเนื่องและไม่วนซ้ำระหว่าง 0 ถึง 359.99 องศา ใช้
headingเพื่อเข้าถึงค่าหัวที่วนซ้ำ
// Turn, then show the current rotation
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.rotation(degrees));
setHeading#
ค่าทิศทาง (Heading) คือทิศทางที่เซ็นเซอร์หันไป โดยวัดเป็นองศาตั้งแต่ 0 ถึง 359.99 ฟังก์ชันนี้จะเปลี่ยนค่าทิศทางปัจจุบันของเซ็นเซอร์วัดความเฉื่อย (Inertial Sensor) ไปเป็นค่าทิศทางใหม่
ตัวอย่างเช่น หากเซ็นเซอร์หันไปทางขวา การตั้งค่าทิศทางเป็น 0 องศา จะทำให้ตำแหน่งที่หันไปทางขวานั้นกลายเป็น 0 องศาใหม่ จากนั้นเซ็นเซอร์จะสามารถติดตามทิศทางอื่นๆ โดยอิงจากทิศทางใหม่นั้นได้
Available Functionsvoid setHeading( double value,
rotationUnits units );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ค่าทิศทาง (หน่วยเป็นองศา) ที่จะตั้งค่าให้กับเซ็นเซอร์ ค่านี้สามารถเป็นได้ตั้งแต่ 0 ถึง 359.99 |
|
|
หน่วยหัวเรื่อง:
|
ฟังก์ชันนี้ไม่ส่งค่ากลับ
Examples// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);
setRotation#
ตั้งค่าการหมุนปัจจุบันของเซ็นเซอร์ความเฉื่อยให้เป็นค่าที่ระบุไว้
ค่าการหมุนคือจำนวนองศาที่เซ็นเซอร์หมุนไป ซึ่งแตกต่างจากค่าทิศทาง ค่าการหมุนสามารถเพิ่มขึ้นเกิน 359.99 องศา หรือลดลงต่ำกว่า 0 องศาได้
Available Functionsvoid setRotation( double value,
rotationUnits units );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ค่าการหมุน (หน่วยเป็นองศา) ที่จะตั้งค่าให้กับเซ็นเซอร์ ค่านี้สามารถเป็นจำนวนเต็มหรือทศนิยมก็ได้ |
|
|
The rotation unit:
|
ฟังก์ชันนี้ไม่ส่งค่ากลับ
Examples// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);
calibrate#
ปรับเทียบเซ็นเซอร์วัดแรงเฉื่อย
การปรับเทียบช่วยให้เซ็นเซอร์วัดการหมุนได้อย่างถูกต้อง ควรวางเซ็นเซอร์ให้นิ่งขณะทำการปรับเทียบ หากเซ็นเซอร์เคลื่อนที่ขณะทำการปรับเทียบ ค่าทิศทาง การหมุน อัตราไจโร และการวางแนวอาจวัดไม่ถูกต้อง
Available Functionsvoid calibrate( );
ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ
Return Valuesฟังก์ชันนี้ไม่ส่งค่ากลับ
Notesเซ็นเซอร์ควรอยู่นิ่งขณะทำการปรับเทียบ
ใช้
isCalibratingเพื่อกำหนดว่าการสอบเทียบเสร็จสมบูรณ์เมื่อใด
resetHeading#
รีเซ็ตค่าทิศทางปัจจุบันของเซ็นเซอร์วัดความเฉื่อยเป็น 0 องศา
หลังจากใช้งานฟังก์ชันนี้แล้ว ทิศทางปัจจุบันของเซ็นเซอร์จะเปลี่ยนเป็นทิศทาง 0 องศาใหม่
Available Functionsvoid resetHeading();
ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ
Return Valuesฟังก์ชันนี้ไม่ส่งค่ากลับ
resetRotation#
รีเซ็ตค่าการหมุนปัจจุบันของเซ็นเซอร์ความเฉื่อยเป็น 0 องศา
หลังจากใช้งานฟังก์ชันนี้แล้ว เซ็นเซอร์จะติดตามการเลี้ยวครั้งต่อไปโดยเริ่มต้นจากค่าการหมุน 0 องศาใหม่
Available Functionsvoid resetRotation();
ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ
Return Valuesฟังก์ชันนี้ไม่ส่งค่ากลับ
isCalibrating#
แสดงว่าเซ็นเซอร์ความเฉื่อยกำลังทำการปรับเทียบอยู่หรือไม่
Available Functionsbool isCalibrating();
ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ
Return Valuesส่งคืนค่าบูลีนที่ระบุว่าเซ็นเซอร์ความเฉื่อยกำลังทำการปรับเทียบอยู่หรือไม่:
-
true— The sensor is currently calibrating. -
false— The sensor is not currently calibrating.
changed#
ลงทะเบียนฟังก์ชันเรียกกลับที่จะทำงานเมื่อค่าทิศทางของเซ็นเซอร์วัดความเฉื่อยเปลี่ยนแปลง
Available Functionsvoid changed( void (* callback)(void) );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ตัวชี้ไปยังฟังก์ชันที่จะถูกเรียกเมื่อค่าหัวเปลี่ยน ฟังก์ชันต้องไม่มีพารามิเตอร์และส่งคืนค่า |
ฟังก์ชันนี้ไม่ส่งค่ากลับ
Examplesกำหนดฟังก์ชันเรียกกลับ (นอก
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()); }ลงทะเบียนฟังก์ชันเรียกกลับภายใน
int main()int main() { // Run onHeadingChanged when the Inertial Sensor's heading value changes. myInertial.changed(onHeadingChanged); }
installed#
ตรวจสอบว่าได้ติดตั้งและเชื่อมต่อเซ็นเซอร์วัดแรงเฉื่อยแล้วหรือไม่
Available Functionsbool installed();
ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ
Return Valuesส่งคืนค่าบูลีนที่ระบุว่าเซ็นเซอร์วัดความเฉื่อยได้รับการติดตั้งและเชื่อมต่อแล้วหรือไม่:
-
true— The sensor is connected and responding. -
false— The sensor is not connected or not detected.
acceleration#
ความเร่ง คือ อัตราการเปลี่ยนแปลงความเร็วของเซ็นเซอร์ ไม่ว่าจะเป็นการเร่งความเร็วหรือลดความเร็ว ฟังก์ชันนี้จะส่งคืนค่าความเร่งของเซ็นเซอร์วัดความเฉื่อยบนแกนที่เลือก โดยมีค่าตั้งแต่ -4.0 G ถึง 4.0 G
G คือหน่วยที่ใช้ในการวัดความเร่ง 1 G คือความเร่งที่คุณรู้สึกจากแรงโน้มถ่วงขณะนั่งอยู่กับที่ ค่าอาจเป็นบวกหรือลบก็ได้ ขึ้นอยู่กับทิศทางของความเร่งบนแกนที่เลือก
double acceleration( axisType axis );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
แกนที่ใช้วัดความเร่ง:
|
ส่งคืนค่า double ซึ่งแสดงถึงความเร่งตามแกนที่ระบุในหน่วย G (หน่วยแรงโน้มถ่วง)
ค่าความเร่งจะรายงานในหน่วย
G
gyroRate#
อัตราการหมุนของไจโร คือ ความเร็วในการหมุนของเซ็นเซอร์วัดความเฉื่อย ฟังก์ชันนี้จะส่งคืนความเร็วในการหมุนปัจจุบันของเซ็นเซอร์วัดความเฉื่อยในแกนที่เลือก
ค่าที่ได้อาจเป็นบวกหรือลบ ขึ้นอยู่กับทิศทางการหมุนของเซ็นเซอร์บนแกนนั้น
Available Functionsdouble gyroRate( axisType axis,
velocityUnits units );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
แกนที่จะใช้ในการส่งค่าอัตราการหมุนของไจโรสโคป:
|
|
|
หน่วยวัดอัตราการหมุน:
|
ส่งคืนค่า double ซึ่งแสดงถึงความเร็วในการหมุนปัจจุบันตามแกนที่ระบุในหน่วยที่เลือก
// 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) คือมุมปัจจุบันของเซ็นเซอร์ความเฉื่อย (Inertial Sensor) บนแกนหมุนที่เลือก ฟังก์ชันนี้จะส่งคืนค่าการวางแนวปัจจุบันของเซ็นเซอร์ความเฉื่อยสำหรับแกนที่ระบุ
Roll, Pitch และ Yaw อธิบายถึงวิธีการต่างๆ ที่เซ็นเซอร์สามารถเอียงหรือหมุนได้
Available Functionsdouble orientation(
orientationType type,
rotationUnits units );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
มุมการวางแนวเพื่อกลับ:
|
|
|
The orientation unit:
|
ส่งคืนค่า double ซึ่งแสดงถึงมุมการวางแนวที่เลือกในหน่วยที่ระบุ
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#
ลงทะเบียนฟังก์ชันเรียกกลับที่จะทำงานเมื่อเซ็นเซอร์วัดความเฉื่อยตรวจพบแรงกระแทกหรือการชนอย่างกะทันหัน
Available Functionsvoid collision( void (* callback)(axisType, double, double, double) );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ตัวชี้ไปยังฟังก์ชันที่จะถูกเรียกเมื่อตรวจพบการชน ฟังก์ชันเรียกกลับต้องรับพารามิเตอร์ต่อไปนี้:
void. |
ฟังก์ชันนี้ไม่ส่งค่ากลับ
Examplesกำหนดฟังก์ชันเรียกกลับ (นอก
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!"); }ลงทะเบียนฟังก์ชันเรียกกลับภายใน
int main()int main() { // Run onCollision when the Inertial Sensor detects a collision. myInertial.collision(onCollision); }
setTurnType#
ชุดที่กำหนดทิศทางการหมุนและส่งคืนค่าบวก
Available Functionsvoid setTurnType( turnType dir );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ทิศทางที่ให้ค่าบวก:
|
ฟังก์ชันนี้ไม่ส่งค่ากลับ
Notesการตั้งค่านี้มีผลต่อวิธีที่
headingและrotationรายงานค่าบวกและค่าลบการเรียกฟังก์ชันนี้จะแทนที่ค่า
dirที่ระบุไว้เมื่อ สร้างวัตถุเฉื่อยinertial
getTurnType#
ผลตอบแทนที่เปลี่ยนทิศทางจะให้ค่าเป็นบวก
Available FunctionsturnType getTurnType();
ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ
Return Valuesส่งคืนค่า turnType turnType บ่งชี้ว่าทิศทางใดให้ค่าบวก:
-
right— Clockwise rotation returns positive values. -
left— Counterclockwise rotation returns positive values.
ค่านี้จะถูกกำหนดในระหว่าง การสร้างวัตถุเฉื่อย
inertialหรือโดยการเรียกsetTurnType