เฉื่อย#

การแนะนำ#

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

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

หน้านี้ใช้ brain_inertial เป็นตัวอย่างชื่อเซ็นเซอร์วัดแรงเฉื่อย โปรดแทนที่ด้วยชื่อที่คุณกำหนดเองตามต้องการ

ด้านล่างนี้คือรายการวิธีการทั้งหมดที่มีให้เลือกใช้:

การวางแนว — อ่านและควบคุมทิศทาง การหมุน และการปรับเทียบเซ็นเซอร์

  • heading — ส่งคืนทิศทางที่เซ็นเซอร์หันไป ตั้งแต่ 0 ถึง 359.99 องศา

  • rotation — ส่งคืนระยะทางที่เซ็นเซอร์หมุนไป

  • calibrate — ปรับเทียบเซ็นเซอร์เฉื่อย

  • set_heading — ตั้งค่าทิศทางปัจจุบันของเซ็นเซอร์ความเฉื่อยเป็นค่าทิศทางใหม่

  • set_rotation — ตั้งค่าการหมุนปัจจุบันของเซ็นเซอร์ความเฉื่อยเป็นค่าการหมุนใหม่

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

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

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

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

การเคลื่อนที่ — วัดความเร่ง ความเร็วในการหมุน และมุมเอียง

  • acceleration — ส่งคืนอัตราเร็วที่เซ็นเซอร์เร่งความเร็วหรือชะลอความเร็วบนแกนที่เลือก

  • gyro_rate — ส่งคืนความเร็วในการหมุนของเซ็นเซอร์บนแกนที่เลือก

  • orientation — ส่งคืนมุมม้วน มุมเงย หรือมุมหันเหของเซ็นเซอร์เฉื่อย

ตัวสร้าง — กำหนดค่าและตั้งค่าเซ็นเซอร์วัดความเฉื่อยด้วยตนเอง

  • Inertial — สร้างเซ็นเซอร์เฉื่อย

ปฐมนิเทศ#

heading#

ทิศทาง (Heading) คือทิศทางที่เซ็นเซอร์หันไป โดยวัดเป็นองศาตั้งแต่ 0 ถึง 359.99 องศา ค่า Heading heading ซึ่งแสดงทิศทางปัจจุบันของเซ็นเซอร์

ทิศทางเริ่มต้นคือ 0 องศา หากเซ็นเซอร์หมุนเลย 359.99 องศา ทิศทางจะวนกลับไปที่ 0 องศา

Usage:
brain_inertial.heading(units)

พารามิเตอร์

คำอธิบาย

units

เลือกได้ตามต้องการ หน่วยวัด: DEGREES (ค่าเริ่มต้น) หรือ TURNS

# Display the heading after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print(brain_inertial.heading())

rotation#

Rotation is how much the sensor has turned, measured in degrees. Unlike heading, rotation can increase past 359.99 degrees or decrease below 0 degrees. At the beginning of a project, the rotation value is set to 0 degrees. rotation returns the Inertial Sensor’s current rotation.

การหมุนไปทางขวาจะเพิ่มมุมการหมุน และการหมุนไปทางซ้ายจะลดมุมการหมุน ตัวอย่างเช่น การหมุนไปทางขวาครบสองรอบจะทำให้ได้มุมการหมุน 720 องศา การหมุนไปทางซ้ายครบหนึ่งรอบจาก 0 องศาจะทำให้ได้มุมการหมุน -360 องศา

Usage:
brain_inertial.rotation(units)

พารามิเตอร์

คำอธิบาย

units

เลือกได้ตามต้องการ หน่วยการหมุน: DEGREES (ค่าเริ่มต้น) หรือ TURNS

# Display the rotation value after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print(brain_inertial.rotation())

calibrate#

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

ภาพจำลองสมอง IQ โดยหน้าจอเอียงไปทางขวา แกน x, y และ z แสดงด้วยลูกศรที่เริ่มต้นจากกึ่งกลางหน้าจอและชี้ออกไปด้านนอก ลูกศรสีแดงที่กำกับด้วยตัวอักษร x ชี้ไปทางขวา ลูกศรสีเขียวที่กำกับด้วยตัวอักษร y ชี้ไปข้างหน้า และลูกศรสีน้ำเงินที่กำกับด้วยตัวอักษร z ชี้ลงด้านล่างภาพเดียวกันกับภาพก่อนหน้า แต่คราวนี้หน้าจอสมองเอียงไปทางซ้าย และลูกศร x, y, z ยังคงอยู่ในทิศทางเดิมภาพเดียวกันกับภาพก่อนหน้า แต่คราวนี้หน้าจอสมองหันขึ้นด้านบน ราวกับวางราบอยู่บนพื้นผิว การวางแนวแกน x, y, z ยังคงเหมือนเดิม

VEX Brain จะพยายามปรับเทียบเซ็นเซอร์วัดความเฉื่อยในตัวโดยอัตโนมัติเมื่อเริ่มต้นทุกโครงการ อย่างไรก็ตาม หากหุ่นยนต์ถูกยกหรือเคลื่อนย้ายในระหว่างการเริ่มต้นโครงการ เซ็นเซอร์อาจไม่สามารถปรับเทียบได้อย่างถูกต้องหรือให้ค่าการปรับเทียบที่ไม่ถูกต้อง

Usage:
brain_inertial.calibrate()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Start calibration
brain_inertial.calibrate()
# Print after calibration
while brain_inertial.is_calibrating():
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Inertial Sensor")
    brain.screen.next_row()
    brain.screen.print("Calibrating")
    wait(50, MSEC)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")

set_heading#

ทิศทาง (Heading) คือทิศทางที่เซ็นเซอร์หันไป โดยวัดเป็นองศาตั้งแต่ 0 ถึง 359.99 คำสั่ง set_heading() จะเปลี่ยนทิศทางปัจจุบันของเซ็นเซอร์วัดความเฉื่อยเป็นค่าทิศทางใหม่

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

Usage:
brain_inertial.set_heading(value, units)

พารามิเตอร์

คำอธิบาย

value

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

units

เลือกได้ตามต้องการ หน่วยวัด: DEGREES (ค่าเริ่มต้น) หรือ TURNS

# Turn the robot around
brain_inertial.set_heading(180)
drivetrain.turn_to_heading(0)

set_rotation#

การหมุนคือจำนวนองศาที่เซ็นเซอร์หมุนไป ต่างจากทิศทาง การหมุนสามารถเพิ่มขึ้นเกิน 359.99 องศา หรือลดลงต่ำกว่า 0 องศาได้ ในตอนเริ่มต้นโครงการ ค่าการหมุนจะถูกตั้งไว้ที่ 0 องศา คำสั่ง set_rotation() จะเปลี่ยนค่าการหมุนปัจจุบันของเซ็นเซอร์ความเฉื่อยเป็นค่าใหม่

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

Usage:
brain_inertial.set_rotation(value, units)

พารามิเตอร์

คำอธิบาย

value

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

units

เลือกได้ตามต้องการ หน่วยการหมุน: DEGREES (ค่าเริ่มต้น) หรือ TURNS

# Turn the robot around
brain_inertial.set_rotation(-180)
drivetrain.turn_to_rotation(0)

is_calibrating#

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

  • True — เซ็นเซอร์วัดความเฉื่อยกำลังปรับเทียบ

  • False — เซ็นเซอร์วัดความเฉื่อยไม่ได้รับการปรับเทียบ

Usage:
brain_inertial.is_calibrating()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Start calibration
brain_inertial.calibrate()
# Print while waiting for calibration
while brain_inertial.is_calibrating():
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Inertial Sensor")
    brain.screen.next_row()
    brain.screen.print("Calibrating")
    wait(50, MSEC)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")

reset_heading#

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

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

Usage:
brain_inertial.reset_heading()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Turn the robot before and after resetting the heading
drivetrain.turn_to_heading(90, DEGREES)
wait(0.5, SECONDS)
brain_inertial.reset_heading()
drivetrain.turn_to_heading(90, DEGREES)

reset_rotation#

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

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

Usage:
brain_inertial.reset_rotation()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Turn the robot before and after resetting the rotation
drivetrain.turn_to_rotation(-90, DEGREES)
wait(0.5, SECONDS)
brain_inertial.reset_rotation()
drivetrain.turn_to_rotation(-90, DEGREES)

changed#

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

Usage:
brain_inertial.changed(callback, arg)

พารามิเตอร์

คำอธิบาย

callback

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

arg

ไม่บังคับ: ชุดอาร์กิวเมนต์ที่จะส่งไปยังฟังก์ชันเรียกกลับ

def heading_changed():
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_screen()
    brain.screen.print("my heading ")
    brain.screen.next_row()
    brain.screen.print("has changed!")
    wait(0.1, SECONDS)
# Call the function when the inertial heading is changed
wait(1, SECONDS)
drivetrain.turn_for(RIGHT, 90, DEGREES, wait=False)
brain_inertial.changed(heading_changed)
wait(15, MSEC)

การเคลื่อนไหว#

acceleration#

ความเร่ง คือ อัตราเร็วที่เซ็นเซอร์เคลื่อนที่เร็วขึ้นหรือช้าลง ค่าความเร่ง acceleration ตั้งแต่ -4.0 G ถึง 4.0 G ในรูปแบบทศนิยม

G คือหน่วยที่ใช้ในการวัดความเร่ง 1 G คือความเร่งประมาณที่คุณรู้สึกจากแรงโน้มถ่วงขณะนั่งอยู่เฉยๆ

ค่าที่ได้อาจเป็นบวกหรือลบ ขึ้นอยู่กับทิศทางของการเร่งความเร็วบนแกนที่เลือก ตัวเลือกแกนได้แก่ XAXIS, YAXISและ ZAXIS

Usage:
brain_inertial.acceleration(axis)

พารามิเตอร์

คำอธิบาย

แกน

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

  • XAXIS
  • YAXIS
  • ZAXIS

# Display acceleration after moving
vexcode_brain_precision = 2
drivetrain.set_drive_velocity(100, PERCENT)
brain.screen.print("Resting: ")
brain.screen.next_row()
brain.screen.print(brain_inertial.acceleration(XAXIS))
brain.screen.next_row()
wait(1, SECONDS)
drivetrain.drive_for(FORWARD, 500, MM, wait=False)
wait(0.01, SECONDS)
brain.screen.print("Startup: ")
brain.screen.next_row()
brain.screen.print(brain_inertial.acceleration(XAXIS))

gyro_rate#

ค่า Gyro rate คือความเร็วในการหมุนของเซ็นเซอร์วัดความเฉื่อย ค่า gyro_rate gyro_rate จะแสดงความเร็วในการหมุนปัจจุบันของเซ็นเซอร์วัดความเฉื่อยในแกนที่เลือก

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

Usage:
brain_inertial.gyro_rate(axis, units)

พารามิเตอร์

คำอธิบาย

axis

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

  • XAXIS
  • YAXIS
  • ZAXIS

units

ตัวเลือกเสริม หน่วยอัตราการหมุนของไจโรสโคป:

  • DPS (ค่าเริ่มต้น) — องศาต่อวินาที
  • RPM — รอบต่อนาที
  • PERCENT

# Display the z-axis gyro rate
drivetrain.turn(RIGHT)
wait(1, SECONDS)
brain.screen.print(brain_inertial.gyro_rate(ZAXIS, RPM))
drivetrain.stop()

orientation#

ค่าการวางแนว (Orientation) คือมุมปัจจุบันของเซ็นเซอร์ความเฉื่อยบนแกนหมุนที่เลือกไว้ ค่าการวางแนว orientation ที่แสดงค่าการม้วนตัว (roll), การเอียง (pitch) หรือการหัน (yaw) ของเซ็นเซอร์ความเฉื่อย

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

Usage:
brain_inertial.orientation(axis, units)

พารามิเตอร์

คำอธิบาย

axis

มุมการวางแนวที่จะกลับมา:

  • ROLL
  • PITCH
  • YAW

units

เลือกได้ตามต้องการ หน่วยการวางแนว: DEGREES (ค่าเริ่มต้น) หรือ TURNS

# Display the roll, pitch, and yaw of the Brain as it
# is rotated by hand
while True:
    brain.screen.clear_screen()
    brain.screen.print(brain_inertial.orientation(OrientationType.ROLL))
    brain.screen.next_row()
    brain.screen.print(brain_inertial.orientation(OrientationType.PITCH))
    brain.screen.next_row()
    brain.screen.print(brain_inertial.orientation(OrientationType.YAW))
    brain.screen.next_row()
    brain.screen.set_cursor(1, 1)
    wait(0.1, SECONDS)

ผู้สร้าง#

ตัวสร้าง (Constructor) ใช้สำหรับสร้างวัตถุ Inertial ด้วยตนเอง เช่น เมื่อทำการกำหนดค่าเซ็นเซอร์วัดความเฉื่อยภายนอก VEXcode

Inertial#

Inertial สร้างเซ็นเซอร์วัดแรงเฉื่อย

Usage:
Inertial(smartport)

พารามิเตอร์

คำอธิบาย

smartport

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

# Create a new object "brain_inertial" with the
# Inertial class
brain_inertial = Inertial()
left_drive_smart = Motor(Ports.PORT1, 1.0, False)
right_drive_smart = Motor(Ports.PORT6, 1.0, True)

drivetrain = SmartDrive(left_drive_smart, right_drive_smart, brain_inertial, 200)

brain_inertial.set_heading(180)
drivetrain.turn_to_heading(0)