รู้ได้อย่างไรว่าตำแหน่งที่ได้เชื่อถือได้

วิศวกรเปรียบเทียบเส้นทางบนสองหน้าจอข้างชิ้นส่วนโดรน
ภาพประกอบแนวคิดสร้างด้วย AI

กราฟสวยยังไม่พอ

ตรวจเงื่อนไขก่อนเปรียบเทียบเส้นทาง: เวลา หน่วย และ frame ตรงกัน; ระบุ alignment และข้อมูลอ้างอิง; คำนวณ error และอ่านกรณีล้มเหลว

ก่อนเทียบเส้นทางให้ตรวจหน่วย frame เวลา และความหมาย ground truth การขยับกราฟให้ซ้อนกันอาจลด error ที่รายงาน จึงต้องบอกว่าทำ alignment แบบใด และมีการปรับ scale หรือไม่

ตัวชี้วัด ช่วยตอบอะไร
APE ความต่างของ pose กับข้อมูลอ้างอิงตาม association/alignment ที่กำหนด
RPE ความต่างของการเคลื่อนที่สัมพัทธ์ในช่วงที่กำหนด
Tracking loss ช่วงที่ระบบไม่มีผลประมาณที่ใช้ได้
Runtime / latency ภาระและความล่าช้าภายใต้เครื่องและวิธีรันนั้น

APE เทียบจุดต่อจุด เทียบกับ RPE เทียบช่วงเลื่อน: APE เชื่อมตำแหน่งคู่ตรงกันแต่ละจุดด้วยเส้นตั้งฉากสั้น ๆ ส่วน RPE เทียบระยะที่เคลื่อนที่ของทั้งสองเส้นทางภายในหน้าต่างเวลาคงที่

เปรียบเทียบทีละปัจจัย

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

evo รองรับการประเมิน trajectory หลายรูปแบบและมีเอกสาร Windows/Linux อ่าน options ให้ตรงกับรูปแบบข้อมูลก่อนรัน ค่าตัวเลขจากแบบฝึกตำแหน่งอย่างง่ายไม่เท่ากับ full-pose APE/RPE จาก evo

ผลทดลอง evo กับเส้นทางตัวอย่างจริง

เส้นทางอ้างอิงและเส้นทางประมาณหลังจัดแนว พร้อมกราฟความคลาดเคลื่อนจาก evo

เราใช้ evo 1.37.1 ประเมินคู่ไฟล์ตัวอย่าง V102 ที่โครงการ evo เผยแพร่ จับคู่ได้ 798 ตำแหน่งภายในเกณฑ์เวลา 0.01 วินาที แล้วจัดแนวแบบ SE(3) โดย ไม่ปรับ scale ผล APE ด้านตำแหน่งมี RMSE ประมาณ 0.09173 เมตร ส่วน RPE ช่วง 10 เฟรมที่จับคู่แล้วมี RMSE ประมาณ 0.05752 เมตร จาก 79 คู่ ช่วงเวลาจริงอยู่ประมาณ 0.9–1.0 วินาที จึงไม่เรียกว่า RPE หนึ่งวินาทีอย่างเคร่งครัด

ผลนี้เป็นการประเมินไฟล์เส้นทางที่มีอยู่แล้ว ไม่ใช่การรันตัวประมาณ VIO ใหม่ และไม่ใช่ค่าความแม่นยำของโดรนของผู้เรียน อ่าน คู่มือและคำสั่งทำซ้ำ กับ หลักฐาน ตัวเลือก และ hash ต้นทาง ก่อนเปรียบเทียบผลของตนเอง

ผลประเมิน Basalt: จากเส้นทางที่รันได้ สู่การวัดความคลาดเคลื่อน

ความคลาดเคลื่อนตำแหน่งตลอดช่วง 29.95 วินาทีจาก 600 poses หลังจัดแนว SE3 ไม่ปรับสเกล เส้นประแสดง RMSE 2.20 เซนติเมตร

วันที่ 30 กันยายน 2569 เรานำ trajectory ที่ได้จาก replay จริง มาเทียบกับ ground truth ของ TUMVI room4 โดยไม่รัน estimator ซ้ำ ผลนี้ใช้ตัวคำนวณแยกจาก diagnostic ของ Basalt และผ่านการตรวจทานสูตร กรอบพิกัด และแฮชข้อมูลแล้ว ไม่ใช่ผลจาก evo ในตัวอย่างด้านบน

สิ่งที่วัด RMSE มัธยฐาน สูงสุด
APE ตำแหน่ง · 600 poses 2.20 ซม. 1.85 ซม. 3.70 ซม.
APE มุมหมุน · 600 poses 0.504° 0.459° 1.433°
RPE ตำแหน่ง · 580 คู่ 1.00 ซม. 0.71 ซม. 2.56 ซม.
RPE มุมหมุน · 580 คู่ 0.439° 0.349° 1.466°

อ่านตัวเลขอย่างไร: APE บอกว่าเส้นทางสองชุดต่างกันเท่าไรหลังหมุนและเลื่อนให้ตรงกัน ส่วน RPE บอกว่าการเคลื่อนที่ระหว่างสองเวลาต่างกันเท่าไร รอบนี้ใช้คู่ห่าง 20 เฟรม ช่วงเวลาจริง 0.998821–1.001040 วินาที จึงเป็นช่วง ประมาณหนึ่งวินาที และคู่เหล่านี้ซ้อนทับกัน ไม่ใช่การทดลองอิสระ 580 ครั้ง

ก่อนคำนวณ ต้องทำให้เวลาและกรอบพิกัดตรงกัน

Ground truth ของชุด calibrated อยู่ในกรอบ IMU และปรับเวลาแล้ว จึงไม่ใส่ extrinsic หรือ clock offset ของข้อมูลดิบซ้ำ เราคร่อมเวลาแต่ละ pose ด้วย ground truth สองจุด แทรกตำแหน่งแบบเส้นตรงและทิศทางแบบ SLERP ซึ่งเลือกเส้นทางหมุนสั้นที่สุด ไม่มี extrapolation และไม่มีการค้นหา time offset เพื่อทำให้ผลดีขึ้น

ครอบคลุมครบ 600 poses; ช่องว่าง ground truth มากที่สุด 8.334 ms ต่ำกว่าเกณฑ์ 20 ms ที่กำหนดก่อนรัน จากนั้น fit การจัดแนว SE(3) หนึ่งชุดด้วยข้อมูลทั้งหมด โดย ตรึง scale = 1 ไม่ใช้ Sim(3) ที่อาจซ่อน scale error

สมการ APE และ RPE

ให้ Tᵢ เป็น pose อ้างอิง และ T̂ᵢ เป็น pose ประมาณ ซึ่งแปลงจาก IMU ไป world ของแต่ละระบบ ส่วน S เป็น rigid transform สำหรับจัดแนวโลกทั้งสองเข้าหากัน

  • APE: Eᵢ = Tᵢ⁻¹ S T̂ᵢ แล้ววัดความยาวเวกเตอร์ translation ของ Eᵢ เป็นเมตร
  • RPE: Eᵢⱼ = (Tᵢ⁻¹ Tⱼ)⁻¹ (T̂ᵢ⁻¹ T̂ⱼ), โดย j = i + 20 แล้ววัด translation และมุมหมุนแยกกัน
  • RMSE: √(Σ eᵢ² / N) ไม่รวมค่าหน่วยเมตรกับองศาในค่าเดียว

ตัวอย่าง error 1, 2, 3 ซม. ให้ RMSE ≈ 2.16 ซม. ตัวอย่างนี้ใช้สอนสูตรเท่านั้น ส่วนค่าทดลองในตารางคำนวณจากข้อมูลจริง รายละเอียด rotation matrix และสูตรมุมอยู่ใน F31 ด้านล่าง

ขอบเขตที่ตัวเลขนี้ยังตอบไม่ได้

เป็นข้อมูลอุปกรณ์ถือมือในห้องเพียงช่วงต้น 29.95 วินาที ไม่ใช่ผลบินโดรน การจัดแนว fit และวัด error บนชุดเดียวกันจึงเป็น best-fit comparison ไม่ใช่การรับรองตำแหน่งโลกแม่นยำ 2.20 ซม. ยังไม่ได้รวม uncertainty ของ ground truth/interpolation หรือทดสอบกับแรงสั่นและสภาพกลางแจ้ง ไม่มีเกณฑ์ผ่านด้านการบิน จึงไม่สรุปว่า “พร้อมบิน”

อ่านคู่มือพร้อมสูตรและแผนภาพ · ดาวน์โหลดผลตัวเลขเต็ม · ตัวคำนวณ Python/NumPy · ตรวจ SHA256

อ้างอิงวิธีและกรอบข้อมูล: TUMVI ทางการ, Basalt 0.1.7: T_w_i และการส่งออก quaternion, evo: ความหมาย metrics และ alignment — ตรวจวันที่ 30 กันยายน 2569; TUMVI โดย Schubert และคณะ ใช้ CC BY 4.0

ก่อนส่งเข้า flight controller

จาก VIO/SLAM สู่ Flight Controller: estimator ผ่านจุดตรวจ frame transform, timestamp-delay compensation และ sensor-offset correction ก่อนเข้าสู่ EKF ของ flight controller — SITL ผ่านหนึ่งชุด ไม่เท่ากับพร้อมบินจริง

การเชื่อม external vision ต้องตรวจ frame timestamp delay และ sensor offset ตามเวอร์ชัน flight stack ควรเริ่มตรวจข้อมูลและ SITL ก่อนฮาร์ดแวร์ ผล replay ผ่านเพียงชุดเดียวไม่รับรองความพร้อมบิน

ทดลอง error จากข้อมูลสังเคราะห์ →

แหล่งอ้างอิงและขอบเขต

ตรวจแหล่งข้อมูล 7 กันยายน 2569 เรียบเรียงประกอบองค์ความรู้ที่ DTI เอื้อเฟื้อ

กิตติกรรมประกาศและที่มา

F31: วัด position RMSE พร้อมเปิดเผย alignment

วัด position RMSE พร้อมเปิดเผย alignment; แผนภาพประกอบโมเดลการเรียนรู้

ตัวแปร ความหมายและหน่วยเข้า → ออก ช่วง/แหล่งค่า
p_est,i, p_ref,i ตำแหน่งประมาณ/อ้างอิงที่จับคู่เวลา (เข้า) m finite3แกน, datum/frame ที่ประกาศ
n จำนวนคู่ที่ผ่านกติกา (เข้า) คู่ ≥1; การ fit rotation ต้องมี geometry เพียงพอ
R, t rigid alignment หนึ่งชุด (เข้า/fit) ไร้หน่วย, m RᵀR=I, detR=+1; scale=1
RMSE_pos RMS ของระยะ residual (ออก) m ≥0; รายงาน raw และ aligned แยกกัน
R_ref, R_est rotation body→world ของคู่เวลาเดียวกัน (เข้า) ไร้หน่วย SO(3), frame เดียวกัน; alignment=I ในตัวอย่างมุม
θ, θ_deg principal relative rotation angle (ออก) rad,deg 0–π rad หรือ0–180°; แยกจาก error หน่วยm

ระดับขั้นสูง · แบบจำลองเพื่อการเรียนรู้ · คำถาม: เส้นทางต่างกันเพราะ origin หรือเพราะรูปร่างเส้นทางผิด และการจัดแนวซ่อนอะไรได้บ้าง?

RMSE_pos = √(Σᵢ ||R p_est,i + t − p_ref,i||² / n)

Raw ใช้ R=I,t=0; aligned เลือก rigid R,t ชุดเดียวเพื่อลดผลรวมกำลังสอง ห้าม scale correction โดยไม่ประกาศ เพราะจะซ่อน scale error นี่เป็น position-only RMSE ไม่ใช่ full pose APE/RPE และตัว position RMSE ไม่วัด orientation ความคลาดเคลื่อนมุมต้องมี pose convention กับ metric เพิ่ม ไม่รวมองศากับเมตรเป็น RMS เดียว

ก่อนคำนวณต้องประกาศ clock offset, tolerance ในการจับคู่, interpolation และจำนวนคู่ที่ตัดออก ตัวอย่างนี้มีเวลา0,1,2 s ตรงกันพอดี ใช้คู่1:1 ไม่ interpolate สำหรับข้อมูลอื่นให้เรียงเวลา ตรวจเวลาซ้ำ เลือกคู่ไม่ซ้ำที่ห่างไม่เกิน tolerance ที่กำหนดก่อนดูผล และทิ้งคู่ที่ไม่ผ่าน; ไม่มีคู่ให้ไม่มีค่า ไม่ใช่0 หากใช้ evo ต้องบันทึกรุ่น/arguments และผลจำนวนคู่ ไม่อ้างว่าบทนี้ได้รัน evo

มุมหมุนแยกจากความคลาดตำแหน่ง

สำหรับคู่เวลาเดียวกัน ให้ R_ref และ R_est แปลง body ไป world เดียวกัน โดยตัวอย่างนี้ alignment=I ทั้งคู่ต้องอยู่ใน SO(3) ก่อน: RᵀR=I และ detR=+1 กำหนด R_err=R_refᵀR_est และ θ=acos(clip((trace(R_err)−1)/2,−1,1)) มีช่วง0ถึงπ rad; θ_deg=θ×180/π ตาม principal rotation angle การ clip แก้ roundoff เล็กน้อย ไม่ใช้ซ่อม matrix ที่ไม่ใช่ rotation หากใช้ alignment R_align ที่ไม่ใช่I ต้องใช้ R_align R_est ก่อนเทียบ

ตัวอย่าง R_ref=I, R_est=[[√3/2,−1/2,0],[1/2,√3/2,0],[0,0,1]] จึง trace=1+√3 ได้ θ=π/6=0.523598776 rad หรือ30° ยอมรับ ±0.000001 ในหน่วยที่รายงาน นี่เป็นมุมหนึ่งคู่ แยกจาก position RMSE ไม่ใช่ full pose APE/RPE หรือ trajectory rotational RMSE

กติกาจับคู่ตัวอย่างข้อมูลจริงที่ออกแบบเพื่อฝึก: หลังชดเชย offset ที่ทราบล่วงหน้า ใช้ tolerance0.01 s จับคู่ใกล้สุดแบบ1:1และไม่ interpolate แล้วรายงานจำนวนคู่/คู่ที่ทิ้ง ค่า0.01 s นี้เป็นสมมติฐานการฝึก ไม่ใช่ค่าเหมาะสมสากลหรือ default ของ evo; timestamps ที่ห่าง0.02 s ต้องทิ้งตามกติกานี้

ตัวอย่างแทนค่า

reference=(0,0,0),(1,0,0),(0,1,0) m และ estimated=(1,0,0),(2,0,0),(1,1,0) m ตามเวลาเดียวกัน residual raw ทั้งสาม=(1,0,0) m จึง √((1+1+1)/3)=1 m หลัง R=I,t=(−1,0,0) m ได้0 m การ fit กับชุดที่ประเมินนี้บอก residual หลังจัดแนว ไม่ใช่ผลทดสอบอิสระ และ0ไม่ได้รับรองตำแหน่ง absolute

แบบฝึกเปลี่ยนค่า

เปลี่ยน estimated เป็นสองเท่าของ reference: (0,0,0),(2,0,0),(0,2,0) m ใช้ rigid alignment ที่ scale=1 แล้ว raw/aligned RMSE เท่าใด?

เปิดเฉลย F31

Raw=√(2/3)=0.816496581 m; rigid ที่ดีที่สุดคือ R=I,t=(−1/3,−1/3,0) m ได้ผลรวม squared residual4/3 m² ดังนั้น aligned=√(4/9)=2/3 m ยอมรับ ±0.000001 m ห้ามคูณscale0.5แล้วรายงาน0โดยไม่เปิดเผย

อ้างอิง: evo v1.30.0 PosePath3D.align (P4A04), timestamp association (P4A08); evo v1.30.0 relative_so3/so3_log_angle (P4A10), Modern Robotics v1.1.1 MatrixLog3 (P4A11); ตรวจ26กันยายน2569 ตัวเลขทั้งหมดเป็นโจทย์สังเคราะห์

เชื่อมความรู้กับภารกิจและข้อมูล

มี trajectory จริง 600 poses จาก Basalt/TUMVI room4 ให้ดาวน์โหลด พร้อม ผลประเมิน APE/RPE อิสระและเงื่อนไข แล้ว อย่านำค่า alignment diagnostic ของโปรแกรมมาใช้แทนขั้นตอนประเมินที่ประกาศวิธีจับคู่และกรอบพิกัดชัดเจน

รายงานวิธีจัดแนว trajectory กรอบพิกัด หน่วย และช่วงเวลาที่นำมาเทียบ พร้อมสถานะของข้อมูลอ้างอิง เมื่อผลไม่ตรงให้แยกการตั้งเวลา พิกัด และข้อจำกัดเซนเซอร์ก่อนสรุปว่าอัลกอริทึมผิด อ่านแหล่งอ้างอิง: OpenVINS — Documentation

ฝึกตรวจความเข้าใจ: เปรียบเทียบสองผลโดยเก็บเงื่อนไขเดิม แล้วเขียนว่าข้อสรุปครอบคลุมเฉพาะข้อมูลใด ไม่อ้างเป็นผลบินภาคสนาม

อ่านต่อ บทที่ใช้ความรู้นี้ในงานจำลอง · ทบทวนแหล่งข้อมูล 26 กันยายน 2569

ดาวน์โหลดชุดฝึกการนำทางและภารกิจขั้นสูง (CSV/JSON พร้อมเฉลย) · แบบจำลองสังเคราะห์พร้อมสมมติฐานและข้อจำกัด

โดรนvisual-inertial