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

VIO และ SLAM

UAT 307 การมองเห็นด้วยคอมพิวเตอร์และเทคโนโลยีการรับรู้

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

บทเรียน

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

  1. แยก VIO, VIN และ SLAM ตามบทบาทของกล้อง IMU และแผนที่
  2. คำนวณความลึกจากกล้องสเตอริโอและความคลาดเคลื่อนของความลึก
  3. อธิบายปัญหามาตราส่วนของกล้องตัวเดียว และประมาณมาตราส่วนจาก IMU
  4. เลือกเซนเซอร์รับรู้ให้เหมาะกับระยะและสภาพแวดล้อม

ความรู้พื้นฐานที่ควรมี: UAT 307 โมดูล 1–3 · UAT 366 โมดูล 2 (SLAM และ sensor fusion)

ทำไมต้องรู้

หน่วยความรู้เรื่อง VIN, VIO และ SLAM ของคลังความรู้โดรนอธิบายบทบาทของกล้อง IMU และการรวมข้อมูล ก่อนเลือกเครื่องมือทดลองการนำทาง VIO (visual-inertial odometry) ประมาณการเคลื่อนที่ต่อเนื่องจากกล้องกับ IMU SLAM สร้างแผนที่และหาตำแหน่งในแผนที่ไปพร้อมกัน ซึ่งปิดวงเพื่อลดการลอยได้ UAT 366 ใช้แนวคิด SLAM ในอาคารแล้ว โมดูลนี้เน้น ความลึก และ มาตราส่วน ซึ่งเป็นสองเรื่องที่ทำให้ระบบนำทางด้วยภาพผิดบ่อยที่สุด

ความลึกจากสเตอริโอ

กล้องสองตัววางห่างกันเป็นระยะฐาน เห็นจุดเดียวกันที่ตำแหน่งต่างกันในภาพ ความต่างนี้เรียกว่า disparity ความลึกคือ เมื่อ คือความยาวโฟกัสหน่วยพิกเซล เพราะ แปรผกผันกับ ความคลาดเคลื่อนของ disparity เพียงเล็กน้อยทำให้ความลึกที่ระยะไกลผิดมาก ความคลาดเคลื่อนของความลึกโตตามกำลังสองของระยะ ตามความสัมพันธ์ ที่ Keselman และคณะ (2017) ใช้อธิบายกล้องความลึกแบบสเตอริโอของ Intel RealSense

ตัวอย่างที่ 1 กล้องสเตอริโอขนาดเล็กบนโดรน

ความยาวโฟกัส 640 พิกเซล ระยะฐาน 95 mm ความคลาดเคลื่อนของ disparity 0.25 พิกเซล (ค่าสมมติ)

F_PX, BASE, DD = 640, 0.095, 0.25               # พิกเซล, m, พิกเซล
for z in (2, 5, 10, 20):
    d = F_PX * BASE / z
    dz = z * z / (F_PX * BASE) * DD
    print(f"range {z:>2} m: disparity {d:5.2f} px, depth error about {dz:.3f} m ({dz / z:.1%})")
range  2 m: disparity 30.40 px, depth error about 0.016 m (0.8%)
range  5 m: disparity 12.16 px, depth error about 0.103 m (2.1%)
range 10 m: disparity  6.08 px, depth error about 0.411 m (4.1%)
range 20 m: disparity  3.04 px, depth error about 1.645 m (8.2%)

ที่ 2 m ความลึกผิดเพียงไม่กี่เซนติเมตร แต่ที่ 20 m ผิดเกินหนึ่งเมตร กล้องสเตอริโอขนาดเล็กจึงเหมาะกับการหลบสิ่งกีดขวางระยะใกล้ ถ้าต้องการความลึกที่ระยะไกลต้องเพิ่มระยะฐาน เพิ่มความละเอียด หรือใช้ LiDAR

กราฟความคลาดเคลื่อนของความลึกตามระยะ 0 ถึง 20 เมตร เส้นสีฟ้าโค้งขึ้นแบบกำลังสอง จุดสีชมพูที่ 2 5 10 และ 20 เมตร ค่าราว 0.02 0.10 0.41 และ 1.64 เมตร
ภาพที่ 1 ความคลาดเคลื่อนของความลึกจากสเตอริโอตามระยะ

มาตราส่วนของกล้องตัวเดียว

กล้องตัวเดียวรู้ทิศทางการเคลื่อนที่แต่ไม่รู้ มาตราส่วน ภาพของบ้านจริงที่อยู่ไกลกับบ้านจำลองที่อยู่ใกล้อาจเหมือนกัน VIO แก้ปัญหานี้ด้วย IMU ซึ่งวัดความเร่งในหน่วยจริง เมื่อเทียบระยะเคลื่อนที่จากภาพ (ไม่มีหน่วย) กับระยะจากการอินทิเกรต IMU ในช่วงสั้น จะได้ตัวคูณมาตราส่วน ต้องมีความเร่งพอให้ IMU วัดได้ชัด การบินความเร็วคงที่นาน ๆ จึงประมาณมาตราส่วนได้ยาก

ตัวอย่างที่ 2 ประมาณมาตราส่วนด้วยกำลังสองน้อยที่สุด

ระยะเคลื่อนที่ในหกช่วงสั้นจาก IMU (เมตร) และจากภาพ (ไม่มีหน่วย) มาตราส่วนจริง 3.2 (ข้อมูลจำลอง)

import numpy as np

imu = np.array([0.52, 1.05, 1.48, 2.10, 2.47, 3.03])                 # m
vis = imu / 3.2 + np.random.default_rng(8).normal(0, 0.01, 6)        # ไม่มีหน่วย
s = (vis @ imu) / (vis @ vis)
resid = imu - s * vis
print("visual displacements:", np.round(vis, 3))
print(f"estimated scale {s:.3f} (true 3.2), residual RMS {np.sqrt(np.mean(resid ** 2)):.3f} m")
print(f"a 10-unit visual path would be {10 * s:.1f} m")
visual displacements: [0.145 0.315 0.449 0.653 0.749 0.945]
estimated scale 3.250 (true 3.2), residual RMS 0.034 m
a 10-unit visual path would be 32.5 m

มาตราส่วนที่ประมาณได้ใกล้ค่าจริง ค่าที่เหลือบอกคุณภาพการประมาณ ถ้ามาตราส่วนผิดไปเพียง 5% เส้นทาง 100 m จะผิดไป 5 m ดังนั้นระบบ VIO จึงประมาณมาตราส่วนต่อเนื่องตลอดการบิน และระบบบางแบบใช้เซนเซอร์วัดระยะหรือบารอมิเตอร์ช่วยยืนยัน

แผนภาพสามกล่อง กล้องให้ทิศทางการเคลื่อนที่แต่ไม่มีมาตราส่วน IMU ให้ความเร่งหน่วยจริงแต่ลอย ลูกศรจากทั้งสองไปกล่อง VIO ที่ให้ตำแหน่งพร้อมมาตราส่วน และลูกศรต่อไปกล่อง SLAM ที่เพิ่มแผนที่และการปิดวง
ภาพที่ 2 บทบาทของกล้อง IMU VIO และ SLAM

เลือกเซนเซอร์รับรู้

  • สเตอริโอ ให้ความลึกหนาแน่นระยะใกล้ ใช้ได้เมื่อมีพื้นผิวและแสงพอ
  • LiDAR ให้ระยะแม่นในระยะไกลกว่าและไม่ขึ้นกับแสง แต่หนักและแพงกว่า
  • กล้องตัวเดียวกับ IMU เบาและถูก แต่ต้องมีการเคลื่อนที่พอให้หามาตราส่วน
  • ทุกแบบมีปัญหากับพื้นผิวเรียบไม่มีลาย ผิวสะท้อน น้ำ และหมอก

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

ปฏิบัติการ: ความลึกและมาตราส่วน

  1. วัดความลึกจากกล้องสเตอริโอที่ระยะ 1–10 m เทียบกับระยะจริง และเทียบกับตัวอย่างที่ 1
  2. เปลี่ยนพื้นหลังเป็นผนังเรียบไม่มีลาย สังเกตความลึกที่หายไป
  3. ใช้ข้อมูลกล้องกับ IMU ที่บันทึกไว้ ประมาณมาตราส่วนด้วยตัวอย่างที่ 2
  4. เทียบมาตราส่วนช่วงที่โดรนเร่งกับช่วงที่บินความเร็วคงที่
  5. เขียนข้อเสนอการเลือกเซนเซอร์รับรู้สำหรับโดรนตรวจใต้สะพาน

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

ระวัง

  • เชื่อความลึกจากสเตอริโอที่ระยะไกล
  • ใช้กล้องตัวเดียวโดยไม่มีแหล่งมาตราส่วน
  • บินความเร็วคงที่ตลอด ทำให้ VIO หามาตราส่วนไม่ได้
  • ใช้ระบบรับรู้ด้วยภาพเหนือน้ำหรือพื้นเรียบ โดยไม่มีสำรอง
  • สับสน VIO กับ SLAM ว่าปิดวงได้

สรุป

  • VIO ประมาณการเคลื่อนที่จากกล้องกับ IMU ส่วน SLAM เพิ่มแผนที่และการปิดวง
  • ความลึกจากสเตอริโอ ความคลาดเคลื่อนโตตามกำลังสองของระยะ
  • กล้องตัวเดียวไม่รู้มาตราส่วน IMU ช่วยประมาณได้เมื่อมีความเร่งพอ
  • เลือกเซนเซอร์ตามระยะ แสง และพื้นผิวของงาน

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

  1. = 700 px, = 0.1 m, = 14 px ความลึกเท่าใด
  2. ถ้าระยะเพิ่มเป็นสองเท่า ความคลาดเคลื่อนของความลึกเพิ่มกี่เท่า
  3. ทำไมกล้องตัวเดียวจึงไม่รู้มาตราส่วน
  4. มาตราส่วนผิด 3% เส้นทาง 200 m ผิดเท่าใด
  5. SLAM ต่างจาก VIO อย่างไร
เฉลย
  1. m
  2. 4 เท่า
  3. วัตถุใหญ่ที่ไกลกับวัตถุเล็กที่ใกล้ให้ภาพเหมือนกัน
  4. 6 m
  5. SLAM สร้างแผนที่และปิดวงเมื่อกลับมาที่เดิม จึงลดการลอยสะสมได้

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

ความลึกจากสเตอริโอ
ความคลาดเคลื่อนของความลึก
มาตราส่วนจากกำลังสองน้อยที่สุด

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

  1. Szeliski, R. (2022). Computer vision: Algorithms and applications (2nd ed.). Springer. link
  2. Corke, P. (2023). Robotics, vision and control: Fundamental algorithms in Python. Springer. link
  3. Hartley, R., & Zisserman, A. (2004). Multiple view geometry in computer vision (2nd ed.). Cambridge University Press. link
  4. Keselman, L., Woodfill, J. I., Grunnet-Jepsen, A., & Bhowmik, A. (2017). Intel RealSense stereoscopic depth cameras (arXiv:1705.05548). link

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

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

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

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

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

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

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

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