เฉื่อย#

การแนะนำ#

หุ่นยนต์เขียนโปรแกรม 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)

หุ่นยนต์เขียนโปรแกรม VEX AIM มีลูกศรสีฟ้าชี้ลงจากจุดศูนย์กลางของหุ่นยนต์ รอบๆ ลูกศรสีฟ้า มีลูกศรโค้งสีดำชี้ตามเข็มนาฬิกา แสดงทิศทางการหมุนรอบแกนแนวดิ่ง (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)

หุ่นยนต์เขียนโปรแกรม VEX AIM มีลูกศรสีเขียวพุ่งออกมาจากด้านหน้าของหุ่นยนต์ ตรงกลางของเซ็นเซอร์ AI Vision รอบๆ ลูกศรสีเขียว มีลูกศรสีดำโค้งทวนเข็มนาฬิกา แสดงทิศทางบวกสำหรับการหมุน (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 องศาในรูปแบบทศนิยม

ภาพด้านล่างใช้ลูกศรเพื่อแสดงทิศทางการหมุนบวกของมุมเงย

หุ่นยนต์เขียนโปรแกรม VEX AIM มีลูกศรสีแดงยื่นออกมาจากด้านข้างของหุ่นยนต์ใต้โลโก้ VEX รอบๆ ลูกศรสีแดง มีลูกศรสีดำโค้งทวนเข็มนาฬิกา แสดงทิศทางบวกสำหรับมุมเงย (pitch)

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)

พารามิเตอร์

คำอธิบาย

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)

พารามิเตอร์

คำอธิบาย

callback

A function that is previously defined to execute when a collision is detected.

arg

ตัวเลือกเสริม ทูเปิลที่มีอาร์กิวเมนต์ที่จะส่งไปยังฟังก์ชันเรียกกลับ ดู การใช้ฟังก์ชันที่มีพารามิเตอร์ สำหรับข้อมูลเพิ่มเติม

# 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)

พารามิเตอร์

คำอธิบาย

sensitivity

ระดับความไวในการตรวจจับการชน:

  • HIGH — ไวที่สุด ตรวจจับการชนเล็กน้อยและเริ่มทำงานที่ 1G
  • NORMAL — ระดับความไวเริ่มต้น ตรวจจับการชนปานกลางและเริ่มทำงานที่ 1.5G
  • LOW — ไวน้อยที่สุด ตรวจจับการชนที่รุนแรงและเริ่มทำงานที่ 2G

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

หุ่นยนต์เขียนโค้ด VEX AIM ที่มีลูกศรบอกทิศทางยื่นออกมาจากจุดศูนย์กลางของหุ่นยนต์ ลูกศรสีเขียวที่ระบุว่า "ไปข้างหน้า" ยื่นออกมาจากด้านหน้าของหุ่นยนต์ ลูกศรสีฟ้าที่ระบุว่า "ลงล่าง" ยื่นออกมาจากด้านล่างของหุ่นยนต์ และลูกศรสีแดงที่ระบุว่า "ไปทางขวา" ยื่นออกมาจากด้านข้างของหุ่นยนต์ใต้โลโก้ VEX

วิธีใช้:

robot.inertial.get_acceleration(type)

พารามิเตอร์

คำอธิบาย

type

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

  • DOWNWARD — วัดความเร่งตามแนวตั้งของหุ่นยนต์
  • FORWARD — วัดความเร่งตามทิศทางจากหน้าไปหลังของหุ่นยนต์
  • RIGHTWARD — วัดความเร่งตามทิศทางจากด้านข้างของหุ่นยนต์

# 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)

หุ่นยนต์เขียนโค้ด VEX AIM ที่มีลูกศรบอกทิศทางยื่นออกมาจากจุดศูนย์กลางของหุ่นยนต์ ลูกศรสีเขียวที่มีป้ายกำกับว่า Roll ยื่นออกมาจากด้านหน้าของหุ่นยนต์ โดยมีลูกศรโค้งสีดำชี้ทวนเข็มนาฬิกาอยู่รอบๆ ลูกศรสีน้ำเงินที่มีป้ายกำกับว่า Yaw ยื่นออกมาจากด้านล่างของหุ่นยนต์ โดยมีลูกศรโค้งสีดำชี้ตามเข็มนาฬิกาอยู่รอบๆ และลูกศรสีแดงที่มีป้ายกำกับว่า Pitch ยื่นออกมาจากด้านข้างของหุ่นยนต์ใต้โลโก้ VEX โดยมีลูกศรโค้งสีดำชี้ทวนเข็มนาฬิกาอยู่รอบๆ

Usage:
robot.inertial.get_turn_rate(axis)

พารามิเตอร์

คำอธิบาย

axis

เลือกทิศทางการกลับสู่ตำแหน่งเดิม:

  • YAW
  • ROLL
  • PITCH
# 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)