โมดูล 2/5 · สัปดาห์ 4–6 · 27 ชม.

IMU และแมกนีโตมิเตอร์

UAT 205 เซนเซอร์และระบบเครื่องมือวัด

เวลาเรียนประมาณ 90 นาทีร่าง รอตรวจปรับปรุงล่าสุด 27 กันยายน 2569

บทเรียน

เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ

  1. อธิบายหลักการของไจโรสโคปและแอกเซเลอโรมิเตอร์แบบ MEMS และแบบจำลองความคลาด bias, scale factor และสัญญาณรบกวน
  2. สอบเทียบแอกเซเลอโรมิเตอร์ด้วยวิธีหกท่า
  3. อ่านกราฟ Allan deviation เพื่อหา angle random walk และ bias instability
  4. แก้ hard iron ของแมกนีโตมิเตอร์และอธิบายผลต่อทิศหัว

ความรู้พื้นฐานที่ควรมี: UAT 205 โมดูล 1

ทำไมต้องรู้

IMU (inertial measurement unit) คือหัวใจของตัวควบคุมการบิน ประกอบด้วย ไจโรสโคป วัดอัตราหมุน และ แอกเซเลอโรมิเตอร์ วัดความเร่ง ตัวควบคุมอ่าน IMU หลายร้อยถึงหลายพันครั้งต่อวินาทีเพื่อรักษาท่าทาง ส่วน แมกนีโตมิเตอร์ วัดสนามแม่เหล็กโลกเพื่อบอกทิศหัว ถ้าเซนเซอร์เหล่านี้คลาดเล็กน้อย โดรนจะเอียงค้าง ลอยไหล หรือบินผิดทิศ

MEMS และแบบจำลองความคลาด

เซนเซอร์ในโดรนเกือบทั้งหมดเป็น MEMS (micro-electro-mechanical systems) โครงสร้างกลไกขนาดไมโครเมตรบนชิปซิลิคอน แอกเซเลอโรมิเตอร์มีมวลเล็ก ๆ แขวนด้วยสปริง เมื่อเร่ง มวลเคลื่อนและค่าความจุไฟฟ้าเปลี่ยน ส่วนไจโร MEMS มีมวลที่สั่นอยู่ตลอด เมื่อหมุน แรงคอริออลิสทำให้มันสั่นในอีกแกนหนึ่ง (Groves, 2013)

แต่ละแกนมีแบบจำลองความคลาดพื้นฐาน โดย คือ scale factor คือ bias และ คือ สัญญาณรบกวน ของจริงยังมีแกนเอียงไม่ตั้งฉาก (misalignment) และการเปลี่ยนตามอุณหภูมิ datasheet บอกระดับสัญญาณรบกวน เช่น ICM-42688-P ของ TDK ระบุสัญญาณรบกวนไจโร 2.8 mdps/√Hz และแอกเซเลอโรมิเตอร์ 70 µg/√Hz

กราฟค่าที่อ่านเทียบค่าจริง เส้นทึบสีเข้มคือเส้นในอุดมคติผ่านจุดกำเนิด เส้นประสีชมพูขนานแต่เลื่อนขึ้นคือมี bias เส้นประจุดสีฟ้าผ่านจุดกำเนิดแต่ชันกว่าคือ scale factor ผิด
ภาพที่ 1 แบบจำลองความคลาดของเซนเซอร์

สอบเทียบแอกเซเลอโรมิเตอร์หกท่า

เมื่อวางนิ่ง แอกเซเลอโรมิเตอร์วัดแรงโน้มถ่วงได้ขนาด พอดี วางให้แต่ละแกนชี้ขึ้นและชี้ลงรวมหกท่า จะได้ค่า และ ของทุกแกน จากสองค่านี้หา bias และ scale factor ได้ทันที คู่มือ ArduPilot ใช้หกท่านี้ (ระดับ ตะแคงขวา ตะแคงซ้าย หัวลง หัวขึ้น และคว่ำ) และมาตรฐาน IEEE 1293-2018 อธิบายการทดสอบแบบพลิก (tumble) ของแอกเซเลอโรมิเตอร์โดยละเอียด

ตัวอย่างที่ 1 หา bias และ scale factor จากหกท่า

ค่าเฉลี่ยของการวางนิ่งแต่ละท่า (m/s²) เป็นค่าสมมติ

import math

G = 9.80665
readings = {"x": (9.93, -9.69), "y": (9.85, -9.77), "z": (9.62, -10.02)}   # m/s² แกนชี้ขึ้น, ชี้ลง

cal = {}
for axis, (up, down) in readings.items():
    bias = (up + down) / 2
    scale = (up - down) / (2 * G)
    cal[axis] = (bias, scale)
    print(f"{axis}: bias {bias:+.3f} m/s^2, scale factor {scale:.4f}")

raw = (0.12, 0.04, -10.02)            # ลอยนิ่งในแนวระดับจริง แกน z ชี้ลง
fixed = [(r - cal[a][0]) / cal[a][1] for a, r in zip("xyz", raw)]
tilt = lambda v: math.degrees(math.atan2(math.hypot(v[0], v[1]), -v[2]))
print(f"apparent tilt before {tilt(raw):.2f} deg, after {tilt(fixed):.2f} deg")
x: bias +0.120 m/s^2, scale factor 1.0003
y: bias +0.040 m/s^2, scale factor 1.0003
z: bias -0.200 m/s^2, scale factor 1.0014
apparent tilt before 0.72 deg, after 0.00 deg

ก่อนสอบเทียบ ตัวควบคุมจะคิดว่าโดรนเอียงอยู่ราวสามในสี่องศาทั้งที่วางราบ และจะพยายามแก้จนโดรนไหลไปด้านหนึ่ง

Allan deviation

การวางนิ่งนาน ๆ แล้วคำนวณ Allan deviation ตามช่วงเวลาเฉลี่ย แยกชนิดสัญญาณรบกวนได้ บันทึกการใช้งาน AN5087 ของ NXP และงานของ El-Sheimy และคณะ (2008) อธิบายการอ่านกราฟลอการิทึมนี้

  • ช่วงที่เส้นลดลงด้วยความชัน −1/2 คือสัญญาณรบกวนขาว ค่าบนเส้นนี้ที่ s คือ angle random walk (ARW)
  • บริเวณที่เส้นแบนก่อนเพิ่มขึ้นคือ bias instability บอกว่า bias ลอยได้น้อยที่สุดเท่าใด AN5087 อ่านค่าต่ำสุดโดยตรง ส่วนมาตรฐาน IEEE สำหรับไจโรหารค่าต่ำสุดด้วย 0.664 เวลารายงานต้องบอกว่าใช้วิธีใด

ค่าเหล่านี้ใช้ตั้งพารามิเตอร์สัญญาณรบกวนของ EKF และเทียบเซนเซอร์สองรุ่นก่อนซื้อ

แมกนีโตมิเตอร์และ hard iron

แมกนีโตมิเตอร์วัดสนามแม่เหล็กโลกซึ่งอ่อนมาก ชิ้นส่วนเหล็กและกระแสไฟในโดรนจึงรบกวนได้ง่าย hard iron คือสนามคงที่จากแม่เหล็กถาวรหรือชิ้นส่วนที่มีอำนาจแม่เหล็ก ทำให้ข้อมูลเมื่อหมุนรอบตัวเป็นวงกลมที่ เลื่อนศูนย์กลาง ส่วน soft iron จากวัสดุที่นำสนามแม่เหล็กทำให้วงกลมกลายเป็นวงรี การสอบเทียบเข็มทิศใน ArduPilot หรือ PX4 จึงให้หมุนโดรนหลายทิศเพื่อเก็บข้อมูลให้ครบ และ ArduPilot มีขั้นตอน CompassMot สำหรับแก้ผลของกระแสมอเตอร์

ตัวอย่างที่ 2 แก้ hard iron แล้วเทียบทิศหัว

สนามแนวราบสมมติ 35 µT มีออฟเซ็ต hard iron (12, −8) µT หมุนครบรอบทุก 10° ใช้แบบจำลองสองมิติอย่างง่าย โดยวัดทิศจากแกน mx

import math

OFF, H = (12.0, -8.0), 35.0          # µT ออฟเซ็ต hard iron และสนามแนวราบสมมติ
samples = [(d, H * math.cos(math.radians(d)) + OFF[0], H * math.sin(math.radians(d)) + OFF[1])
           for d in range(0, 360, 10)]

def worst_error(off):
    errs = []
    for d, mx, my in samples:
        head = math.degrees(math.atan2(my - off[1], mx - off[0]))
        errs.append(abs((head - d + 180) % 360 - 180))
    return max(errs)

est = ((max(s[1] for s in samples) + min(s[1] for s in samples)) / 2,
       (max(s[2] for s in samples) + min(s[2] for s in samples)) / 2)
print(f"worst heading error without calibration: {worst_error((0, 0)):.1f} deg")
print(f"estimated offset ({est[0]:.1f}, {est[1]:.1f}) uT")
print(f"worst heading error after hard-iron correction: {worst_error(est):.1f} deg")
worst heading error without calibration: 24.3 deg
estimated offset (12.0, -8.0) uT
worst heading error after hard-iron correction: 0.0 deg

ออฟเซ็ตที่ขนาดราวสองในห้าของสนามทำให้ทิศหัวผิดได้เกิน 20° ซึ่งมากพอให้โดรนบินวนหาจุดหมาย (toilet bowling) ในงานจริงต้องแก้ soft iron ด้วยการปรับวงรีเป็นวงกลม และต้องสอบเทียบใหม่เมื่อย้ายอุปกรณ์หรือเปลี่ยนแบตเตอรี่ใกล้เข็มทิศ

แผนภาพแกน mx และ my จุดสีชมพูเรียงเป็นวงกลมที่ศูนย์กลางเลื่อนไปทางขวาและลงคือข้อมูลก่อนแก้ จุดสีเขียวเรียงเป็นวงกลมที่ศูนย์กลางอยู่ที่จุดกำเนิดคือหลังแก้ hard iron ลูกศรจากจุดกำเนิดชี้ไปศูนย์กลางของวงสีชมพูคือออฟเซ็ต 12 และลบ 8 ไมโครเทสลา
ภาพที่ 2 ข้อมูลแมกนีโตมิเตอร์ที่ศูนย์กลางเลื่อนเพราะ hard iron

ทิศหัวที่ได้จากเข็มทิศเป็นทิศเหนือแม่เหล็ก ต่างจากทิศเหนือจริงเท่ากับ มุมเดคลิเนชัน (declination) ซึ่งเปลี่ยนตามสถานที่และเวลา ArduPilot มีแบบจำลองสนามแม่เหล็กโลกในตัวจึงตั้งค่าให้อัตโนมัติได้ ถ้าต้องการตรวจค่า ให้ใช้เครื่องคำนวณ World Magnetic Model ฉบับ WMM2025 ของ NOAA

ปฏิบัติการประจำโมดูล

ปฏิบัติการ: สอบเทียบ IMU และเข็มทิศ

  1. สอบเทียบแอกเซเลอโรมิเตอร์หกท่าด้วย Mission Planner หรือ QGroundControl แล้วอ่านค่า offset และ scale ที่ได้
  2. บันทึกค่าดิบหกท่าเองแล้วคำนวณด้วยโค้ดตัวอย่างที่ 1 เทียบกับผลของโปรแกรม
  3. วาง IMU นิ่งอย่างน้อยหนึ่งชั่วโมง บันทึกไจโรแล้วคำนวณ Allan deviation ด้วยไลบรารี เช่น AllanTools หาค่า ARW และ bias instability
  4. หมุนบอร์ดเข็มทิศรอบตัว บันทึก mx และ my แล้วใช้โค้ดตัวอย่างที่ 2 หา hard iron
  5. วางไขควงเหล็กใกล้เข็มทิศแล้วสังเกตวงกลมที่เปลี่ยน บันทึกลงสมุดปฏิบัติการ

ข้อผิดพลาดที่พบบ่อย

ระวัง

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

สรุป

  • IMU แบบ MEMS มีความคลาด bias, scale factor และสัญญาณรบกวน
  • การสอบเทียบหกท่าหา bias และ scale factor จากค่า ±g ของทุกแกน
  • Allan deviation แยก angle random walk และ bias instability ได้จากข้อมูลวางนิ่ง
  • hard iron เลื่อนศูนย์กลางวงกลมข้อมูลเข็มทิศ ทำให้ทิศหัวผิดมาก ต้องสอบเทียบและระวังแหล่งรบกวน

แบบฝึกตรวจความเข้าใจ

  1. แกนหนึ่งอ่าน +9.90 และ −9.70 m/s² bias เท่าใด
  2. จากข้อ 1 scale factor เท่าใด (g = 9.80665)
  3. ช่วงความชัน −1/2 ในกราฟ Allan deviation แทนสัญญาณรบกวนชนิดใด
  4. mx อ่านได้ระหว่าง −20 ถึง 40 µT ออฟเซ็ต hard iron แกนนี้เท่าใด
  5. hard iron กับ soft iron ทำให้ข้อมูลเข็มทิศเปลี่ยนรูปต่างกันอย่างไร
เฉลย
  1. m/s²
  2. สัญญาณรบกวนขาว อ่านเป็น angle random walk
  3. µT
  4. hard iron เลื่อนศูนย์กลางวงกลม soft iron ทำให้วงกลมกลายเป็นวงรี

สรุปสูตรสำคัญ

แบบจำลองความคลาดของแต่ละแกน
สอบเทียบหกท่า
ศูนย์กลาง hard iron

แหล่งอ้างอิงหลัก

  1. Groves, P. D. (2013). Principles of GNSS, inertial, and multisensor integrated navigation systems (2nd ed.). Artech House. link
  2. TDK InvenSense. ICM-42688-P high precision 6-axis MEMS motion sensor (Datasheet DS-000347). link
  3. Freescale Semiconductor. (2015). Allan variance: Noise analysis for gyroscopes (Application Note AN5087, Rev. 0). link
  4. El-Sheimy, N., Hou, H., & Niu, X. (2008). Analysis and modeling of inertial sensors using Allan variance. IEEE Transactions on Instrumentation and Measurement, 57(1), 140–149. link
  5. IEEE. (2019). IEEE standard specification format guide and test procedure for linear single-axis, nongyroscopic accelerometers (IEEE Std 1293-2018). link
  6. ArduPilot Dev Team. Accelerometer calibration. ArduPilot Copter documentation. link
  7. ArduPilot Dev Team. Advanced compass setup (CompassMot). ArduPilot Copter documentation. link
  8. NOAA National Centers for Environmental Information. (2024). The World Magnetic Model (WMM2025). link

อ่านเพิ่มเติม

ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล

ในชั้นเรียน / ภาคสนาม

ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย

หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz

แบบทดสอบประจำโมดูล

แบบทดสอบนี้ใช้ตรวจความเข้าใจ (formative) ไม่ใช่การสอบเก็บคะแนน

โดเมนความรู้: เซนเซอร์และระบบสมองกลฝังตัว · การควบคุม ออโตไพลอต และการนำทาง