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

การแนะนำ#

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

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

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

inertial(
    int32_t  index,
    turnType dir = turnType::right );

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

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

~inertial();

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

พารามิเตอร์

พิมพ์

คำอธิบาย

index

int32_t

ตัวเลือกเสริม พอร์ตอัจฉริยะที่เชื่อมต่อกับเซ็นเซอร์วัดความเฉื่อยภายนอก เขียนเป็น PORTxโดยที่ x คือหมายเลขพอร์ต (ตัวอย่างเช่น PORT1) ไม่ต้องใส่พารามิเตอร์นี้เมื่อใช้เซ็นเซอร์วัดความเฉื่อยในตัวของ Brain

dir

turnType

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

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

ตัวอย่าง#

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

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

ฟังก์ชันสมาชิก#

คลาส 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 using the Device Menu. Replace the values
as needed. */

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

heading#

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

ทิศทาง (Heading) คือทิศทางที่เซ็นเซอร์หันไป โดยวัดเป็นองศาตั้งแต่ 0 ถึง 359.99 องศา หากเซ็นเซอร์หมุนเลย 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 องศาได้ ในตอนเริ่มต้นโครงการ ค่าการหมุนจะถูกตั้งไว้ที่ 0 องศา ฟังก์ชันนี้จะเปลี่ยนค่าการหมุนปัจจุบันของเซ็นเซอร์ความเฉื่อยเป็นค่าใหม่

ตัวอย่างเช่น หากเซ็นเซอร์หมุนไปทางขวาครบสองรอบ ค่าการหมุนของเซ็นเซอร์จะเป็น 720 องศา การตั้งค่าการหมุนเป็น 0 องศาจะรีเซ็ตค่าการหมุนจาก 720 เป็น 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())

// 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());
}

ลงทะเบียนฟังก์ชันเรียกกลับภายใน 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#

ตรวจสอบว่าได้ติดตั้งและเชื่อมต่อเซ็นเซอร์วัดแรงเฉื่อยแล้วหรือไม่

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) บนแกนที่เลือก ฟังก์ชันนี้จะส่งคืนค่าการวางแนวของเซ็นเซอร์ความเฉื่อย โดยมีค่าตั้งแต่ -180.00 ถึง 180.00 องศา

แกน x, y หรือ z ที่เลือกนั้นสอดคล้องกับแกนการวางแนวแกนใดแกนหนึ่งของเซ็นเซอร์

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

Parameters

พารามิเตอร์

พิมพ์

คำอธิบาย

axis

axisType

แกนที่ใช้ในการกำหนดทิศทาง:

  • xaxis
  • yaxis
  • zaxis

units

rotationUnits

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

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

ลงทะเบียนฟังก์ชันเรียกกลับภายใน 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#

ชุดที่กำหนดทิศทางการหมุนและส่งคืนค่าบวก

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