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

ติดตั้ง FC GNSS และเซนเซอร์

UAT 302 การติดตั้งและประกอบรวมระบบอากาศยานไร้คนขับ

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

บทเรียน

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

  1. ประมาณสนามแม่เหล็กรบกวนจากสายกำลัง และกำหนดระยะติดตั้งเข็มทิศ
  2. ตั้งค่าทิศทางการติดตั้งของบอร์ดและเข็มทิศให้ตรงกับการติดตั้งจริง
  3. คำนวณผลของระยะห่างเสาอากาศ GNSS จาก IMU และตั้งค่าชดเชย
  4. ตรวจระดับการสั่นของตัวควบคุมการบินตามเกณฑ์ของ ArduPilot

ความรู้พื้นฐานที่ควรมี: UAT 302 โมดูล 1 · UAT 205 (IMU และแมกนีโตมิเตอร์)

ทำไมต้องรู้

ตัวควบคุมการบินรู้ท่าทางและทิศของอากาศยานจากเซนเซอร์ ถ้าติดตั้งผิดทิศ ผิดตำแหน่ง หรือใกล้แหล่งรบกวน โดรนจะบินผิดทั้งที่ทุกชิ้นส่วนปกติ อาการคลาสสิกคือโดรนบินวนเป็นวงก้นหอยในโหมดคงตำแหน่ง (toilet bowl) เพราะเข็มทิศถูกรบกวน UAT 205 เรียนหลักการของเซนเซอร์และการสอบเทียบไปแล้ว โมดูลนี้เน้น การติดตั้งและตั้งค่า หน่วยความรู้เรื่อง IMU และแมกนีโตมิเตอร์ของคลังความรู้โดรนย้ำเรื่อง bias สัญญาณรบกวน และการสั่นสะเทือน

เข็มทิศกับสายกำลัง

กระแสในสายไฟสร้างสนามแม่เหล็ก สายตรงยาวที่มีกระแส สร้างสนาม ที่ระยะ (OpenStax University Physics) โดย N/A² (CODATA 2022) ถ้าสายไปและกลับวางชิดกันห่าง สนามของทั้งสองหักล้างกันเกือบหมด เหลือราว เมื่อ มากกว่า มาก เข็มทิศวัดสนามแนวราบของโลก ซึ่งที่กรุงเทพฯ ต้นปี 2569 มีค่าราว 41,168 nT (41.2 µT) มุมเอียง 16.3° ลง และมุมเบี่ยงเบน 0.68° ตะวันตก ตามแบบจำลอง WMM2025 ผ่านบริการของ British Geological Survey

ตัวอย่างที่ 1 ติดเข็มทิศห่างสายแบตเตอรี่เท่าใด

สายแบตเตอรี่มีกระแสขณะลอยตัว 30 A ทีมต้องการให้สนามรบกวนไม่เกิน 5% ของสนามแนวราบของโลก

import math

MU0 = 1.25663706127e-6                         # N/A² (CODATA 2022)
H_EARTH = 41_168e-9                            # T แนวราบ กรุงเทพฯ 2026 (WMM2025)
I = 30.0                                       # A

def b_single(i, r):
    return MU0 * i / (2 * math.pi * r)

def b_pair(i, s, r):                           # สายไปกลับห่าง s ใช้ได้เมื่อ r >> s
    return MU0 * i * s / (2 * math.pi * r ** 2)

print(f"single wire at 5 cm: {b_single(I, 0.05) * 1e6:.1f} uT ({b_single(I, 0.05) / H_EARTH:.1f} x Earth's horizontal field)")
for s in (0.005, 0.02):
    for r in (0.10, 0.20):
        b = b_pair(I, s, r)
        err = math.degrees(math.atan(b / H_EARTH))
        print(f"pair {s * 1000:.0f} mm apart at {r * 100:.0f} cm: {b * 1e6:5.2f} uT = {b / H_EARTH:5.1%} of H, heading error up to {err:.1f} deg")
    r_min = math.sqrt(MU0 * I * s / (2 * math.pi * 0.05 * H_EARTH))
    print(f"  distance for 5% of H with pair {s * 1000:.0f} mm apart: {r_min * 100:.0f} cm")
single wire at 5 cm: 120.0 uT (2.9 x Earth's horizontal field)
pair 5 mm apart at 10 cm:  3.00 uT =  7.3% of H, heading error up to 4.2 deg
pair 5 mm apart at 20 cm:  0.75 uT =  1.8% of H, heading error up to 1.0 deg
  distance for 5% of H with pair 5 mm apart: 12 cm
pair 20 mm apart at 10 cm: 12.00 uT = 29.1% of H, heading error up to 16.3 deg
pair 20 mm apart at 20 cm:  3.00 uT =  7.3% of H, heading error up to 4.2 deg
  distance for 5% of H with pair 20 mm apart: 24 cm

สายเส้นเดียวที่ระยะ 5 cm สร้างสนามแรงกว่าสนามโลกเกือบสามเท่า เข็มทิศจึงใช้ไม่ได้เลย การวางสายไปกลับชิดกันหรือพันเกลียวลดสนามลงมาก แต่ถ้าสายแยกห่าง 2 cm ต้องติดเข็มทิศไกลขึ้นเป็นสองเท่า นี่คือเหตุผลที่โดรนส่วนใหญ่ติด GNSS กับเข็มทิศบนเสาสูง ArduPilot มีการทดสอบ compassmot ซึ่งวัดสนามรบกวนเทียบกับกระแสจริง ค่าต่ำกว่า 30% ยอมรับได้ 31–60% ก้ำกึ่ง และเกิน 60% ต้องย้ายตำแหน่งหรือใช้เข็มทิศภายนอก

กราฟสนามรบกวนเป็นเปอร์เซ็นต์ของสนามแนวราบโลกตามระยะ 5 ถึง 30 เซนติเมตร เส้นสีชมพูสายคู่ห่าง 20 มิลลิเมตรลดลงช้ากว่าเส้นสีฟ้าสายคู่ห่าง 5 มิลลิเมตร เส้นประสีทองที่ 5 เปอร์เซ็นต์ เส้นสีฟ้าตัดที่ประมาณ 12 เซนติเมตร เส้นสีชมพูตัดที่ประมาณ 24 เซนติเมตร
ภาพที่ 1 สนามรบกวนจากสายกำลังตามระยะห่าง

ทิศทางการติดตั้ง

ถ้าต้องติดตัวควบคุมการบินหมุนไปจากแนวหัวเครื่อง ต้องบอกซอฟต์แวร์ ใน ArduPilot ใช้ AHRS_ORIENTATION ซึ่งหมุนค่าของ IMU และเข็มทิศภายในตามมุมติดตั้ง แล้วต้องทำ level ใหม่และรีบูต เข็มทิศภายนอกตั้งแยกด้วย COMPASS_ORIENT ส่วน PX4 ใช้ SENS_BOARD_ROT การตรวจที่ได้ผลคือเอียงโดรนด้วยมือแล้วดูว่าท่าทางบนหน้าจอ GCS เอียงไปทางเดียวกันทุกแกน และหันโดรนแล้วดูว่าทิศหัวเครื่องเปลี่ยนถูกทาง

ตำแหน่งเสาอากาศ GNSS

GNSS บอกตำแหน่งของ เสาอากาศ ไม่ใช่ของ IMU ถ้าเสาอากาศอยู่ห่าง IMU เมื่อโดรนเอียงหรือหมุน ตำแหน่งที่วัดได้จะขยับไปทั้งที่ตัวโดรนไม่ได้เคลื่อนที่ ArduPilot ให้ใส่ระยะนี้ใน GPS1_POS_X/Y/Z หน่วยเมตร แกน X ไปหน้า Y ไปขวา Z ลงล่าง วัดจาก IMU (หรือจาก CG ถ้าตั้งตำแหน่ง IMU ไว้) ส่วน PX4 รุ่นใหม่ใช้ SENS_GPS0_OFFX/Y/Z แทน EKF2_GPS_POS_X/Y/Z ของรุ่นก่อน ตรวจชื่อพารามิเตอร์กับเอกสารของรุ่นเฟิร์มแวร์ที่ใช้จริงเสมอ

ตัวอย่างที่ 2 ผลของระยะห่างเสาอากาศ

เสาอากาศอยู่หน้า IMU 0.12 m และสูงกว่า 0.10 m (แกน Z ชี้ลง จึงเป็น −0.10)

import math

X, Z = 0.12, -0.10                             # m, GPS1_POS_X และ GPS1_POS_Z
for roll in (10, 25):
    shift = abs(Z) * math.sin(math.radians(roll))
    print(f"roll {roll} deg: antenna moves sideways {shift * 100:.1f} cm while the IMU stays put")
yaw_rate = math.radians(60)                    # rad/s
print(f"yaw at 60 deg/s: antenna velocity {yaw_rate * X:.3f} m/s from rotation alone")
print(f"set GPS1_POS_X = {X}, GPS1_POS_Y = 0, GPS1_POS_Z = {Z}")
roll 10 deg: antenna moves sideways 1.7 cm while the IMU stays put
roll 25 deg: antenna moves sideways 4.2 cm while the IMU stays put
yaw at 60 deg/s: antenna velocity 0.126 m/s from rotation alone
set GPS1_POS_X = 0.12, GPS1_POS_Y = 0, GPS1_POS_Z = -0.1

ตำแหน่งขยับหลายเซนติเมตรเมื่อเอียง และความเร็วที่วัดได้คลาดเกือบ 0.13 m/s เมื่อหมุนหัวเร็ว สำหรับ GNSS ทั่วไปที่คลาดเคลื่อนระดับเมตรอาจไม่เห็นผล แต่สำหรับ RTK ระดับเซนติเมตรมีผลชัดเจน จึงต้องวัดและใส่ค่าชดเชยทุกครั้ง

ตรวจการสั่นของตัวควบคุมการบิน

เอกสาร ArduPilot เรื่องการวัดการสั่นกำหนดว่า ค่าการสั่นต่ำกว่า 30 m/s² ถือว่าปกติ 30–60 m/s² อาจเกิดปัญหา และเกิน 60 m/s² มักทำให้การคงตำแหน่งและความสูงผิดพลาด ตัวนับ clipping (แอกเซเลอโรมิเตอร์อิ่มตัวที่ 16 g) ควรเป็นศูนย์หรือน้อยมาก วิธีติดตั้งที่แนะนำคือวางบอร์ดบนโฟมหรือเจลที่มุม เพื่อตัดการสั่นความถี่สูงแต่ยังให้บอร์ดตามการเคลื่อนที่ช้าของโครงได้

มุมมองด้านข้างของโดรน IMU อยู่กลางโครง เสาอากาศ GNSS อยู่บนเสาด้านหน้าสูงขึ้น ลูกศรสีฟ้าแกน X ชี้ไปหน้า ลูกศรสีชมพูแกน Z ชี้ลง ระยะ 0.12 เมตรตามแนวหน้า และ 0.10 เมตรตามแนวดิ่ง
ภาพที่ 2 ระยะของเสาอากาศ GNSS จาก IMU ในแกนของอากาศยาน

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

ปฏิบัติการ: ติดตั้งและตรวจเซนเซอร์

  1. วัดระยะจากเข็มทิศถึงสายกำลังที่ใกล้ที่สุด ประมาณสนามรบกวนด้วยตัวอย่างที่ 1
  2. ติดตั้งตัวควบคุมการบินบนฐานกันสั่น ตั้ง AHRS_ORIENTATION และ COMPASS_ORIENT แล้วตรวจด้วยการเอียงและหมุน
  3. วัดระยะเสาอากาศ GNSS ตั้ง GPS1_POS_X/Y/Z ตามตัวอย่างที่ 2
  4. สอบเทียบเข็มทิศ แล้วทำ compassmot ภายใต้การกำกับของอาจารย์ บันทึกผลเป็นเปอร์เซ็นต์
  5. บินลอยตัว อ่านค่าการสั่นและ clipping จาก log เทียบเกณฑ์ของ ArduPilot

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

ระวัง

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

สรุป

  • สนามจากสายกำลังลดลงตามระยะ และลดลงมากเมื่อวางสายไปกลับชิดกัน ควรต่ำกว่าส่วนเล็ก ๆ ของสนามแนวราบของโลก (ราว 41 µT ที่กรุงเทพฯ)
  • ตั้งทิศการติดตั้งด้วย AHRS_ORIENTATION และ COMPASS_ORIENT แล้วตรวจด้วยการเอียงจริง
  • ระยะเสาอากาศ GNSS จาก IMU ใส่ใน GPS1_POS_X/Y/Z สำคัญมากกับ RTK
  • การสั่นต่ำกว่า 30 m/s² และ clipping ใกล้ศูนย์คือเกณฑ์ของ ArduPilot

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

  1. สายเส้นเดียวกระแส 20 A ที่ระยะ 10 cm สร้างสนามเท่าใด
  2. สนามรบกวน 4 µT ตั้งฉากกับสนามแนวราบ 41 µT ทำให้ทิศหัวเครื่องคลาดได้ราวกี่องศา
  3. compassmot ได้ 45% ควรทำอย่างไร
  4. เสาอากาศอยู่สูงกว่า IMU 0.1 m ค่า GPS1_POS_Z ควรเป็นบวกหรือลบ
  5. ค่าการสั่น 45 m/s² อยู่ในช่วงใดตามเกณฑ์ของ ArduPilot
เฉลย
  1. µT
  2. อยู่ในช่วงก้ำกึ่ง ควรย้ายเข็มทิศให้ห่างแหล่งรบกวนหรือจัดสายใหม่ แล้วทดสอบซ้ำ
  3. ลบ เพราะแกน Z ชี้ลง
  4. 30–60 m/s² อาจเกิดปัญหา ควรปรับฐานกันสั่นหรือแก้ต้นเหตุ

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

สนามแม่เหล็กจากสายตรงยาว
สนามจากสายคู่ไฟไปกลับ (r ≫ s)
ความคลาดเคลื่อนทิศหัวเครื่อง

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

  1. Ling, S. J., Sanny, J., & Moebs, W. (2016). University physics volume 2. OpenStax. link
  2. National Institute of Standards and Technology. CODATA value: vacuum magnetic permeability (CODATA 2022). link
  3. British Geological Survey. Geomagnetism web service: World Magnetic Model WMM2025 and IGRF-14. link
  4. ArduPilot Dev Team. Advanced compass setup (CompassMot). ArduPilot Copter documentation. link
  5. ArduPilot Dev Team. Sensor position offset compensation. ArduPilot Copter documentation. link
  6. ArduPilot Dev Team. Parameter list (Copter stable V4.6.3). ArduPilot Copter documentation. link
  7. PX4 Autopilot. Parameter reference. PX4 user guide (main). link
  8. ArduPilot Dev Team. Measuring vibration. ArduPilot Copter documentation. link

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

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

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

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

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

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

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

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