เฉื่อย#
การแนะนำ#
หุ่นยนต์เขียนโปรแกรม VEX AIM มีเซ็นเซอร์วัดความเฉื่อยในตัว เซ็นเซอร์นี้จะวัดการเคลื่อนที่และการหมุนของหุ่นยนต์
เซ็นเซอร์วัดแรงเฉื่อยใช้ส่วนประกอบสองส่วนในการทำงานนี้ ไจโรสโคปจะวัดการหมุน เช่น ทิศทาง การหมุน การหันเห การกลิ้ง การเอียง และอัตราการหมุนของหุ่นยนต์ ส่วนมาตรวัดความเร่งจะวัดการเปลี่ยนแปลงของการเคลื่อนที่ เช่น การเร่งความเร็ว การลดความเร็ว หรือการหยุดกะทันหันระหว่างการชน
วิธีการวัดความเฉื่อยสามารถใช้ในการติดตามการเลี้ยว วัดความเร่ง ตรวจจับการชน รีเซ็ตค่าทิศทางหรือการหมุน และปรับเทียบเซ็นเซอร์ได้
ด้านล่างนี้คือรายการวิธีการทั้งหมด:
การวางแนว — ตรวจสอบและตั้งค่าทิศทางการหันหน้า การหมุน หรือการเอียงของหุ่นยนต์
get_rotation— ส่งคืนระยะทางที่หุ่นยนต์หมุนไปget_heading— ส่งคืนทิศทางที่หุ่นยนต์หันหน้าไป ตั้งแต่ 0 ถึง 359.99 องศาget_yaw— ส่งคืนมุม yaw ของหุ่นยนต์get_roll— ส่งคืนมุมการหมุนของหุ่นยนต์get_pitch— ส่งคืนมุมเอียงของหุ่นยนต์reset_rotation— รีเซ็ตการหมุนปัจจุบันของหุ่นยนต์เป็น 0 องศาreset_heading— รีเซ็ตทิศทางปัจจุบันของหุ่นยนต์เป็น 0 องศาset_heading— ตั้งค่าทิศทางปัจจุบันของหุ่นยนต์เป็นค่าทิศทางใหม่
การชน — ตรวจจับการชน
crashed— ลงทะเบียนฟังก์ชันที่จะทำงานเมื่อตรวจพบการขัดข้องset_crash_sensitivity— ตั้งค่าความไวของการตรวจจับการชนต่อการกระแทก
การเคลื่อนที่ — วัดความเร่งและความเร็วในการเลี้ยว
get_acceleration— ส่งคืนอัตราเร็วที่หุ่นยนต์กำลังเร่งความเร็วหรือชะลอความเร็วบนแกนที่เลือกget_turn_rate— ส่งคืนความเร็วในการหมุนของหุ่นยนต์บนแกนที่เลือก
การสอบเทียบ — จัดการการสอบเทียบเซ็นเซอร์
calibrate— ปรับเทียบเซ็นเซอร์เฉื่อยis_calibrating— ส่งคืนว่าเซ็นเซอร์เฉื่อยกำลังทำการปรับเทียบอยู่หรือไม่
ปฐมนิเทศ#
get_rotation#
การหมุนคือจำนวนองศาที่หุ่นยนต์หมุนไป ต่างจากทิศทาง การหมุนสามารถเพิ่มขึ้นเกิน 359.99 องศา หรือลดลงต่ำกว่า 0 องศาได้ ในตอนเริ่มต้นโครงการ ค่าการหมุนจะถูกตั้งไว้ที่ 0 องศา ฟังก์ชัน get_rotation จะส่งคืนค่าการหมุนปัจจุบันของหุ่นยนต์ในรูปแบบทศนิยม
การหมุนไปทางขวาจะเพิ่มมุมการหมุน และการหมุนไปทางซ้ายจะลดมุมการหมุน ตัวอย่างเช่น การหมุนไปทางขวาครบสองรอบจะทำให้ได้มุมการหมุน 720 องศา การหมุนไปทางซ้ายครบหนึ่งรอบจาก 0 องศาจะทำให้ได้มุมการหมุน -360 องศา
Usage:
robot.inertial.get_rotation()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Display the robot's rotation as it rotates
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
wait(50, MSEC)
get_heading#
ทิศทางที่หุ่นยนต์หันหน้าไปนั้น วัดเป็นองศาตั้งแต่ 0 ถึง 359.99 ฟังก์ชัน get_heading จะส่งคืนค่าทิศทางปัจจุบันของหุ่นยนต์ในรูปแบบทศนิยม
ทิศทางเริ่มต้นคือ 0 องศา หากหุ่นยนต์หมุนเกิน 359.99 องศา ทิศทางจะวนกลับมาที่ 0 องศา
Usage:
robot.inertial.get_heading()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Turn right until the heading reaches 90 degrees
robot.turn(RIGHT)
while robot.inertial.get_heading() < 90:
wait(50, MSEC)
robot.stop_all_movement()
# Display the robot's heading as it is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Heading: {robot.inertial.get_heading()} degrees")
wait(50, MSEC)
get_yaw#
Yaw คือค่าที่อธิบายการหมุนของหุ่นยนต์ไปทางซ้ายหรือขวา รอบแกนตั้งของมัน ฟังก์ชัน get_yaw จะส่งคืนค่ามุม Yaw ของหุ่นยนต์ในช่วง -180.00 ถึง 180.00 องศา ในรูปแบบทศนิยม
ภาพด้านล่างใช้ลูกศรเพื่อแสดงทิศทางการหมุนบวกสำหรับมุมหันเห (yaw)
Usage:
robot.inertial.get_yaw()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Display the robot's yaw angle as it is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_yaw())
wait(50, MSEC)
get_roll#
Roll อธิบายถึงการเอียงของหุ่นยนต์ไปด้านข้าง ฟังก์ชัน get_roll จะส่งคืนค่ามุมเอียงของหุ่นยนต์ในช่วง -180.00 ถึง 180.00 องศา ในรูปแบบทศนิยม
ภาพด้านล่างใช้ลูกศรเพื่อแสดงทิศทางการหมุนบวกสำหรับการหมุนรอบแกน (roll)
Usage:
robot.inertial.get_roll()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Display the robot's roll angle as it is tilted by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_roll())
wait(50, MSEC)
get_pitch#
ค่า Pitch อธิบายถึงการเอียงของหุ่นยนต์ไปข้างหน้าหรือข้างหลัง ฟังก์ชัน get_pitch จะส่งคืนค่ามุม Pitch ของหุ่นยนต์ในช่วง -90.00 ถึง 90.00 องศาในรูปแบบทศนิยม
ภาพด้านล่างใช้ลูกศรเพื่อแสดงทิศทางการหมุนบวกของมุมเงย
Usage:
robot.inertial.get_pitch()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Display the robot's pitch angle as it is tilted by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_pitch())
wait(50, MSEC)
reset_rotation#
reset_rotation จะรีเซ็ตการหมุนปัจจุบันของหุ่นยนต์เป็น 0 องศา
หลังจากใช้วิธีนี้แล้ว หุ่นยนต์จะติดตามการเลี้ยวในอนาคตโดยเริ่มต้นจากค่าการหมุน 0 องศาใหม่
Usage:
robot.inertial.reset_rotation()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Reset the robot's rotation if it exceeds 180 degrees
while True:
if robot.inertial.get_rotation() >= 180:
robot.inertial.reset_rotation()
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
wait(50, MSEC)
reset_heading#
reset_heading จะรีเซ็ตทิศทางปัจจุบันของหุ่นยนต์เป็น 0 องศา
หลังจากใช้วิธีนี้แล้ว ทิศทางปัจจุบันของหุ่นยนต์จะกลายเป็นทิศทาง 0 องศาใหม่
Usage:
robot.inertial.reset_heading()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Turn the robot around using a new 90 degree heading
robot.turn_to(90)
wait(1, SECONDS)
robot.inertial.reset_heading()
robot.turn_to(90)
set_heading#
ทิศทาง (Heading) คือทิศทางที่หุ่นยนต์หันหน้าไป โดยวัดเป็นองศาตั้งแต่ 0 ถึง 359.99 คำสั่ง set_heading จะเปลี่ยนทิศทางปัจจุบันของหุ่นยนต์เป็นค่าทิศทางใหม่
ตัวอย่างเช่น หากหุ่นยนต์หันไปทางขวา การตั้งค่าทิศทางเป็น 0 องศา จะทำให้ตำแหน่งที่หันไปทางขวานั้นกลายเป็น 0 องศาใหม่ จากนั้นหุ่นยนต์จะสามารถติดตามทิศทางอื่นๆ โดยอิงจากทิศทางใหม่นั้นได้
Usage:
robot.inertial.set_heading(heading)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ค่าทิศทาง (หน่วยเป็นองศา) ที่จะตั้งค่าให้กับหุ่นยนต์ ค่านี้สามารถเป็นได้ตั้งแต่ 0 ถึง 359.99 |
# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)
ชน#
crashed#
crashed ลงทะเบียนฟังก์ชันที่จะถูกเรียกเมื่อหุ่นยนต์ตรวจพบแรงกระแทกหรือการชนอย่างกะทันหัน
วิธีใช้:
robot.inertial.crashed(callback, arg)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
A function that is previously defined to execute when a collision is detected. |
|
ตัวเลือกเสริม ทูเปิลที่มีอาร์กิวเมนต์ที่จะส่งไปยังฟังก์ชันเรียกกลับ ดู การใช้ฟังก์ชันที่มีพารามิเตอร์ สำหรับข้อมูลเพิ่มเติม |
# Define what happens when a crash occurs
def crash_detected():
# Stop all movement and indicate a crash occurred
robot.screen.print("Crash detected")
robot.stop_all_movement()
robot.inertial.crashed(crash_detected)
# Drive forward until crash
robot.move_at(0, 100)
set_crash_sensitivity#
set_crash_sensitivity ปรับระดับความเร่งฉับพลันที่จำเป็นเพื่อให้หุ่นยนต์ตรวจจับการชนได้
Usage:
robot.inertial.set_crash_sensitivity(sensitivity)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ระดับความไวในการตรวจจับการชน:
|
def crashed_callback():
robot.stop_all_movement()
robot.sound.play(CRASH)
# system event handlers
robot.inertial.crashed(crashed_callback)
# add 15ms delay to make sure events are registered correctly.
wait(15, MSEC)
# Detect a crash at a slow velocity.
robot.set_move_velocity(35, PERCENT)
robot.inertial.set_crash_sensitivity(HIGH)
robot.move_at(0)
การเคลื่อนไหว#
get_acceleration#
ความเร่ง คือ อัตราเร็วที่หุ่นยนต์เร่งความเร็วหรือชะลอความเร็วลง ฟังก์ชัน get_acceleration จะส่งคืนค่าความเร่งของหุ่นยนต์บนแกนที่เลือก ตั้งแต่ -4.00 G ถึง 4.00 G ในรูปแบบทศนิยม
G คือหน่วยที่ใช้ในการวัดความเร่ง 1 G คือความเร่งประมาณที่คุณรู้สึกจากแรงโน้มถ่วงขณะนั่งอยู่เฉยๆ
ค่าที่ได้อาจเป็นบวกหรือลบ ขึ้นอยู่กับทิศทางของการเร่งความเร็วบนแกนที่เลือก ในโปรแกรม AIM ตัวเลือกแกนจะตั้งชื่อตามทิศทางของหุ่นยนต์: FORWARD, RIGHTWARDและ DOWNWARD

วิธีใช้:
robot.inertial.get_acceleration(type)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
แกนที่ใช้วัดความเร่ง:
|
# Display the acceleration as the robot begins to move
robot.screen.set_cursor(4,1)
sitting_accel = robot.inertial.get_acceleration(RIGHTWARD)
robot.screen.print(f"Resting: {sitting_accel:.2f}")
wait(0.5, SECONDS)
robot.screen.next_row()
robot.move_at(90, 100)
wait(0.1, SECONDS)
robot.screen.print(f"Startup: {robot.inertial.get_acceleration(RIGHTWARD):.2f}")
get_turn_rate#
อัตราการหมุนคือความเร็วในการหมุนของหุ่นยนต์ get_turn_rate จะส่งคืนอัตราการหมุนของหุ่นยนต์ในหน่วยองศาต่อวินาที \(dps\) ในรูปแบบทศนิยม ตั้งแต่ -1000.00 ถึง 1000.00 dps
ค่าที่ได้อาจเป็นบวกหรือลบ ขึ้นอยู่กับทิศทางการหมุนของหุ่นยนต์บนแกนที่เลือก ภาพด้านล่างใช้ลูกศรแสดงทิศทางการหมุนที่เป็นบวกสำหรับมุมม้วน (roll), มุมเงย (pitch) และมุมหัน (yaw)

Usage:
robot.inertial.get_turn_rate(axis)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
เลือกทิศทางการกลับสู่ตำแหน่งเดิม:
|
# Display the gyro rate as the robot is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_turn_rate(YAW))
wait(50, MSEC)
การสอบเทียบ#
การปรับเทียบช่วยให้เซ็นเซอร์วัดแรงเฉื่อยวัดการหมุนได้อย่างถูกต้อง โดยการวัดและชดเชยสัญญาณรบกวนและการเบี่ยงเบนของเซ็นเซอร์ในช่วงเวลา 2 วินาที ในระหว่างนี้ หุ่นยนต์จะต้องอยู่นิ่งสนิทบนพื้นผิวที่มั่นคง การเคลื่อนไหวในระหว่างการปรับเทียบอาจทำให้ได้ผลลัพธ์ที่ไม่ถูกต้อง
หุ่นยนต์ VEX จะพยายามปรับเทียบตัวเองโดยอัตโนมัติเมื่อเริ่มต้นทำงาน โดยจะรอจนกว่าจะตรวจไม่พบการเคลื่อนไหวใดๆ อย่างไรก็ตาม หากหุ่นยนต์ถูกยกหรือเคลื่อนย้ายในระหว่างการเริ่มต้นทำงาน เซ็นเซอร์อาจไม่สามารถปรับเทียบได้อย่างถูกต้อง หรืออาจให้ผลการปรับเทียบที่ไม่ถูกต้อง
หากโปรเจ็กต์ของคุณต้องอาศัยทิศทางที่แม่นยำ หรือหากคุณต้องการการเลี้ยวที่สม่ำเสมอและทำซ้ำได้ การเรียกใช้คำสั่ง calibrate ในตอนต้นของโค้ดจะช่วยได้ ควรแสดงข้อความเช่น “Calibrating…” บนหน้าจอของหุ่นยนต์ระหว่างการปรับเทียบ จากนั้นอัปเดตเป็น “Calibration complete” หลังจากนั้น เพื่อเตือนคุณ (และทุกคนที่ใช้หุ่นยนต์) ว่าหุ่นยนต์ต้องอยู่นิ่งในระหว่างช่วงเวลานี้
calibrate#
calibrate ปรับเทียบไจโรสโคป การปรับเทียบช่วยให้เซ็นเซอร์วัดแรงเฉื่อยวัดการหมุนได้อย่างถูกต้องโดยการวัดและชดเชยสัญญาณรบกวนและการเบี่ยงเบนของเซ็นเซอร์ในช่วงเวลา 2 วินาที ในระหว่างนี้ หุ่นยนต์ต้องอยู่นิ่งสนิทบนพื้นผิวที่มั่นคง การเคลื่อนไหวในระหว่างการปรับเทียบอาจทำให้ได้ผลลัพธ์ที่ไม่ถูกต้อง
หุ่นยนต์ VEX จะพยายามปรับเทียบตัวเองโดยอัตโนมัติเมื่อเริ่มต้นทำงาน โดยจะรอจนกว่าจะตรวจไม่พบการเคลื่อนไหวใดๆ อย่างไรก็ตาม หากหุ่นยนต์ถูกยกหรือเคลื่อนย้ายในระหว่างการเริ่มต้นทำงาน เซ็นเซอร์อาจไม่สามารถปรับเทียบได้อย่างถูกต้อง หรืออาจให้ผลการปรับเทียบที่ไม่ถูกต้อง
Usage:
robot.inertial.calibrate()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Calibrate the gyro before moving
robot.inertial.calibrate()
robot.screen.show_emoji(THINKING)
wait(2, SECONDS)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)
is_calibrating#
is_calibrating ส่งคืนค่าบูลีนที่ระบุว่าเซ็นเซอร์ความเฉื่อยกำลังทำการปรับเทียบอยู่หรือไม่
True— เซ็นเซอร์วัดความเฉื่อยกำลังปรับเทียบFalse— เซ็นเซอร์วัดความเฉื่อยไม่ได้รับการปรับเทียบ
Usage:
robot.inertial.is_calibrating()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Move after the calibration is completed
robot.inertial.calibrate()
while robot.inertial.is_calibrating():
robot.screen.show_emoji(THINKING)
wait(50, MSEC)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)