เซ็นเซอร์ความเฉื่อย#

การแนะนำ#

คลาส inertial ใช้สำหรับควบคุมและเข้าถึงข้อมูลจากเซ็นเซอร์วัดความเฉื่อยในตัวของ IQ (รุ่นที่ 2) Brain เซ็นเซอร์นี้จะวัดการเคลื่อนไหวและการหมุนของ Brain

เซ็นเซอร์วัดความเฉื่อยใช้ส่วนประกอบสองส่วนในการทำงานนี้ ไจโรสโคปจะวัดการหมุน เช่น ทิศทาง การหมุน อัตราการหมุน และการวางแนว ส่วนแอ็กเซลเลอโรเมตรจะวัดการเปลี่ยนแปลงของการเคลื่อนที่ เช่น การเร่งความเร็วหรือการลดความเร็วตามแกน x, y และ z

ตัวสร้างคลาส#

inertial(
  turnType dir = turnType::right );

ตัวทำลายคลาส#

ทำลายวัตถุ inertial และปล่อยทรัพยากรที่เกี่ยวข้อง

~inertial();

พารามิเตอร์#

พารามิเตอร์

พิมพ์

คำอธิบาย

dir

turnType

ตัวเลือกเสริม ทิศทางที่ส่งค่าบวก:

  • right (ค่าเริ่มต้น) — การเลี้ยวขวาจะส่งค่าบวก
  • left — การเลี้ยวซ้ายจะส่งค่าบวก

ตัวอย่าง#

// 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 Functions
double heading( rotationUnits units = degrees );

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

units

rotationUnits

หน่วยวัด:

  • deg / degrees (ค่าเริ่มต้น) — องศา
  • turns / rev — รอบ

Return Values

ส่งคืนค่า double ซึ่งแสดงทิศทางปัจจุบันของเซ็นเซอร์ในหน่วยที่ระบุ

Notes
  • ค่าหัวจะถูกวนซ้ำระหว่าง 0 ถึง 359.99 องศา ใช้ rotation เพื่อเข้าถึงค่าการหมุนต่อเนื่อง

Examples
// 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 Functions
double rotation( rotationUnits units = degrees );

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

units

rotationUnits

หน่วยการหมุน:

  • deg / degrees (ค่าเริ่มต้น) — องศา
  • turns / rev — รอบ

Return Values

ส่งคืนค่า double ซึ่งแสดงถึงการหมุนปัจจุบันในหน่วยที่ระบุ

Notes
  • ค่าการหมุนเป็นแบบต่อเนื่องและไม่วนซ้ำระหว่าง 0 ถึง 359.99 องศา ใช้ heading เพื่อเข้าถึงค่าหัวที่วนซ้ำ

Examples
// 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 Functions
void setHeading( double        value,
                 rotationUnits units );

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

value

double

ค่าทิศทาง (หน่วยเป็นองศา) ที่จะตั้งค่าให้กับเซ็นเซอร์ ค่านี้สามารถเป็นได้ตั้งแต่ 0 ถึง 359.99

units

rotationUnits

หน่วยหัวเรื่อง:

  • deg องศา degrees
  • turns รอบ rev รอบ

Return Values

ฟังก์ชันนี้ไม่ส่งค่ากลับ

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

setRotation#

ตั้งค่าการหมุนปัจจุบันของเซ็นเซอร์ความเฉื่อยให้เป็นค่าที่ระบุไว้

ค่าการหมุนคือจำนวนองศาที่เซ็นเซอร์หมุนไป ซึ่งแตกต่างจากค่าทิศทาง ค่าการหมุนสามารถเพิ่มขึ้นเกิน 359.99 องศา หรือลดลงต่ำกว่า 0 องศาได้

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

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

value

double

ค่าการหมุน (หน่วยเป็นองศา) ที่จะตั้งค่าให้กับเซ็นเซอร์ ค่านี้สามารถเป็นจำนวนเต็มหรือทศนิยมก็ได้

units

rotationUnits

The rotation unit:

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

Return Values

ฟังก์ชันนี้ไม่ส่งค่ากลับ

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

calibrate#

ปรับเทียบเซ็นเซอร์วัดแรงเฉื่อย

การปรับเทียบช่วยให้เซ็นเซอร์วัดการหมุนได้อย่างถูกต้อง ควรวางเซ็นเซอร์ให้นิ่งขณะทำการปรับเทียบ หากเซ็นเซอร์เคลื่อนที่ขณะทำการปรับเทียบ ค่าทิศทาง การหมุน อัตราไจโร และการวางแนวอาจวัดไม่ถูกต้อง

Available Functions
void calibrate( );

Parameters

ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ

Return Values

ฟังก์ชันนี้ไม่ส่งค่ากลับ

Notes
  • เซ็นเซอร์ควรอยู่นิ่งขณะทำการปรับเทียบ

  • ใช้ isCalibrating เพื่อกำหนดว่าการสอบเทียบเสร็จสมบูรณ์เมื่อใด

resetHeading#

รีเซ็ตค่าทิศทางปัจจุบันของเซ็นเซอร์วัดความเฉื่อยเป็น 0 องศา

หลังจากใช้งานฟังก์ชันนี้แล้ว ทิศทางปัจจุบันของเซ็นเซอร์จะเปลี่ยนเป็นทิศทาง 0 องศาใหม่

Available Functions
void resetHeading();

Parameters

ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ

Return Values

ฟังก์ชันนี้ไม่ส่งค่ากลับ

resetRotation#

รีเซ็ตค่าการหมุนปัจจุบันของเซ็นเซอร์ความเฉื่อยเป็น 0 องศา

หลังจากใช้งานฟังก์ชันนี้แล้ว เซ็นเซอร์จะติดตามการเลี้ยวครั้งต่อไปโดยเริ่มต้นจากค่าการหมุน 0 องศาใหม่

Available Functions
void resetRotation();

Parameters

ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ

Return Values

ฟังก์ชันนี้ไม่ส่งค่ากลับ

isCalibrating#

แสดงว่าเซ็นเซอร์ความเฉื่อยกำลังทำการปรับเทียบอยู่หรือไม่

Available Functions
bool isCalibrating();

Parameters

ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ

Return Values

ส่งคืนค่าบูลีนที่ระบุว่าเซ็นเซอร์ความเฉื่อยกำลังทำการปรับเทียบอยู่หรือไม่:

  • true — The sensor is currently calibrating.
  • false — The sensor is not currently calibrating.

changed#

ลงทะเบียนฟังก์ชันเรียกกลับที่จะทำงานเมื่อค่าทิศทางของเซ็นเซอร์วัดความเฉื่อยเปลี่ยนแปลง

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

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

callback

void (*)(void)

ตัวชี้ไปยังฟังก์ชันที่จะถูกเรียกเมื่อค่าหัวเปลี่ยน ฟังก์ชันต้องไม่มีพารามิเตอร์และส่งคืนค่า void.

Return Values

ฟังก์ชันนี้ไม่ส่งค่ากลับ

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 Functions
bool installed();

Parameters

ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ

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 คือความเร่งที่คุณรู้สึกจากแรงโน้มถ่วงขณะนั่งอยู่กับที่ ค่าอาจเป็นบวกหรือลบก็ได้ ขึ้นอยู่กับทิศทางของความเร่งบนแกนที่เลือก

Available Functions
double acceleration( axisType axis );

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

axis

axisType

แกนที่ใช้วัดความเร่ง:

  • xaxis
  • yaxis
  • zaxis

Return Values

ส่งคืนค่า double ซึ่งแสดงถึงความเร่งตามแกนที่ระบุในหน่วย G (หน่วยแรงโน้มถ่วง)

Notes
  • ค่าความเร่งจะรายงานในหน่วย G

gyroRate#

อัตราการหมุนของไจโร คือ ความเร็วในการหมุนของเซ็นเซอร์วัดความเฉื่อย ฟังก์ชันนี้จะส่งคืนความเร็วในการหมุนปัจจุบันของเซ็นเซอร์วัดความเฉื่อยในแกนที่เลือก

ค่าที่ได้อาจเป็นบวกหรือลบ ขึ้นอยู่กับทิศทางการหมุนของเซ็นเซอร์บนแกนนั้น

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

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

axis

axisType

แกนที่จะใช้ในการส่งค่าอัตราการหมุนของไจโรสโคป:

  • xaxis
  • yaxis
  • zaxis

units

velocityUnits

หน่วยวัดอัตราการหมุน:

  • dps — องศาต่อวินาที
  • rpm — รอบต่อนาที

Return Values

ส่งคืนค่า double ซึ่งแสดงถึงความเร็วในการหมุนปัจจุบันตามแกนที่ระบุในหน่วยที่เลือก

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) คือมุมปัจจุบันของเซ็นเซอร์ความเฉื่อย (Inertial Sensor) บนแกนหมุนที่เลือก ฟังก์ชันนี้จะส่งคืนค่าการวางแนวปัจจุบันของเซ็นเซอร์ความเฉื่อยสำหรับแกนที่ระบุ

Roll, Pitch และ Yaw อธิบายถึงวิธีการต่างๆ ที่เซ็นเซอร์สามารถเอียงหรือหมุนได้

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

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

type

orientationType

มุมการวางแนวเพื่อกลับ:

  • pitch
  • roll
  • yaw

units

rotationUnits

The orientation unit:

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

Return Values

ส่งคืนค่า double ซึ่งแสดงถึงมุมการวางแนวที่เลือกในหน่วยที่ระบุ

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#

ลงทะเบียนฟังก์ชันเรียกกลับที่จะทำงานเมื่อเซ็นเซอร์วัดความเฉื่อยตรวจพบแรงกระแทกหรือการชนอย่างกะทันหัน

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

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

callback

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

ตัวชี้ไปยังฟังก์ชันที่จะถูกเรียกเมื่อตรวจพบการชน ฟังก์ชันเรียกกลับต้องรับพารามิเตอร์ต่อไปนี้:

  • axisType — แกนที่ตรวจพบการชน
  • ค่าความเร่ง ณ เวลาที่เกิดการชน ตามลำดับ:
    • double — ความเร่งตามแกน x (หน่วยเป็น G)
    • double — ความเร่งตามแกน y (หน่วยเป็น G)
    • double — ความเร่งตามแกน z (หน่วยเป็น G)
ฟังก์ชันต้องส่งคืน void.

Return Values

ฟังก์ชันนี้ไม่ส่งค่ากลับ

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 Functions
void setTurnType( turnType dir );

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

dir

turnType

ทิศทางที่ให้ค่าบวก:

  • right
  • left

Return Values

ฟังก์ชันนี้ไม่ส่งค่ากลับ

Notes
  • การตั้งค่านี้มีผลต่อวิธีที่ heading และ rotation รายงานค่าบวกและค่าลบ

  • การเรียกฟังก์ชันนี้จะแทนที่ค่า dir ที่ระบุไว้เมื่อ สร้างวัตถุเฉื่อย inertial

getTurnType#

ผลตอบแทนที่เปลี่ยนทิศทางจะให้ค่าเป็นบวก

Available Functions
turnType getTurnType();

Parameters

ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ

Return Values

ส่งคืนค่า turnType turnType บ่งชี้ว่าทิศทางใดให้ค่าบวก:

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