# อ่านผล Basalt จากภาพและ IMU จริง

ทดลองวันที่ 29 กันยายน 2569 ด้วย Basalt 0.1.7 และ TUMVI room4 แบบ stereo 512×512, 16-bit ได้ trajectory 600 poses จากข้อมูลช่วง 29.95 วินาที ตัว estimator รันหนึ่งครั้ง ใช้เวลา 17.4 วินาทีและจบด้วย exit 0 ภายใต้ CPU 2, RAM 4 GiB และเพดานเวลา 300 วินาที เวลาประมวลผลนี้เป็นผลของสภาพแวดล้อมครั้งนี้ ไม่ใช่การรับรอง real-time บนอุปกรณ์อื่น

## เปิดไฟล์ใดก่อน

1. `trajectory-xy.svg` แสดงเส้นทางบนระนาบ x–y ใช้มาตราส่วนเท่ากันทั้งสองแกน วงกลมคือจุดเริ่ม สามเหลี่ยมคือจุดจบ
2. `height-time.svg` แสดงพิกัด z เทียบเวลาที่ผ่านไป พิกัดทั้งหมดอยู่ในกรอบเริ่มต้นของ estimator หน่วยเมตร ค่า z ไม่ใช่ความสูงเหนือพื้นหรือระดับน้ำทะเล
3. `trajectory.txt` คือผลดิบแบบ TUM: `timestamp tx ty tz qx qy qz qw` เวลาเป็นวินาที ตำแหน่งเป็นเมตร ไม่ได้จัดแนวกับ ground truth หรือทำเส้นให้เรียบเพื่อวาดกราฟ
4. `result.json` สรุปเงื่อนไขและผลตรวจ ส่วน `manifest.json` ระบุแหล่งข้อมูลและ SHA256 ของไฟล์ดาวน์โหลด

## เหตุใดจึงเริ่มจากภาพคู่ที่สอง

ภาพคู่แรกมาก่อน IMU ตัวแรก 3.273404 ms จึงไม่ผ่านเงื่อนไข coverage ที่กำหนดไว้ก่อนรัน เราเก็บ CSV ต้นฉบับไว้ แล้วใช้สำเนา CSV ของกล้องทั้งสองที่ตัดเฉพาะแถวภาพคู่แรกออก ภาพและ IMU ไม่ถูกเปลี่ยนค่า ไม่มีการสร้าง IMU เพิ่ม การรันจำกัด 600 คู่ จึงเลือก source indices 1..600 เมื่อเริ่มนับที่ 0

ใน archive มีลิงก์สะดวกใช้สำหรับ DSO สองรายการ เราข้าม DSO ทั้งส่วน และใช้เฉพาะไฟล์ปกติใน mav0 โดยไม่สร้างหรือตามลิงก์ ก่อนรันได้ตรวจ SHA256/MD5 ของ archive, timestamp, calibration double-sphere ทางการ และ PNG headers 1,200 ภาพ ผลหยุดก่อนรันสองครั้งถูกเก็บแยกจาก estimator ซึ่งรันจริงเพียงครั้งเดียว

## อ่านจำนวนข้อมูลอย่างไร

CSV กล้องที่ส่งให้โปรแกรมมี 2,227 คู่ และ IMU มี 22,212 แถว แต่กำหนด `--max-frames 600` ได้ผล 600 poses และ log ระบุ 600 measurements มี IMU 5,971 แถวอยู่ในช่วงภาพที่เลือก จำนวนนี้เป็นจำนวนข้อมูลในช่วง ไม่ใช่ตัวนับว่า estimator ใช้ IMU ภายในจริงกี่แถว เพราะ binary ไม่มีตัวนับนั้น

ผลทั้ง 600 แถวเป็นค่าจำกัด เวลาเพิ่มตามลำดับและตรงกับภาพภายใน 1 microsecond; quaternion มี norm ต่างจาก 1 ไม่เกิน 1e-5 เกณฑ์เหล่านี้ตรวจความถูกต้องของผลลัพธ์ ไม่ใช่ความคลาดเคลื่อนตำแหน่งเทียบข้อมูลอ้างอิง ไม่มีการใช้ ground truth เริ่มสถานะ ส่วนค่า alignment diagnostic ที่โปรแกรมพิมพ์อัตโนมัติยังไม่ได้ตรวจเป็นการประเมินอิสระ จึงไม่เผยแพร่เป็นผลความแม่นยำ

## แบบฝึกจากผลจริง

- นับแถวที่ไม่ใช่ comment ใน trajectory แล้วตรวจว่าได้ 600 แถว
- ลบเวลาแถวสุดท้ายด้วยแถวแรก ควรได้ประมาณ 29.95 วินาที แยกค่านี้ออกจากเวลาประมวลผล 17.4 วินาที
- เปรียบเทียบช่วงที่กราฟ x–y เคลื่อนที่น้อยกับกราฟ z แล้วอธิบายว่าทำไมมองกราฟเพียงระนาบเดียวอาจพลาดการเคลื่อนที่
- ก่อนรายงาน APE/RPE ให้กำหนดกรอบพิกัด การจับคู่เวลา วิธี alignment และช่วง ground truth ที่ใช้ให้ชัดเจน

## ที่มาและขอบเขต

ข้อมูล [TUM Visual-Inertial Dataset โดย Schubert et al.](https://cvg.cit.tum.de/data/datasets/visual-inertial-dataset) ใช้สัญญาอนุญาต [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) เป็นชุดบันทึกจากอุปกรณ์ถือด้วยมือ ไม่ใช่การบินโดรน กราฟเป็นผลงานต่อยอดจาก trajectory ที่คำนวณด้วย [Basalt 0.1.7](https://gitlab.com/VladyslavUsenko/basalt/-/releases/0.1.7) และ [config ทางการสำหรับ TUMVI](https://gitlab.com/VladyslavUsenko/basalt/-/raw/0.1.7/doc/VioMapping.md)

ชุดดาวน์โหลดนี้ไม่รวม dataset หรือ binary และไม่อ้างผล OpenVINS ความแม่นยำที่ประเมินอิสระ หรือความพร้อมบินจริง อ่านต่อ [วิธีประเมิน trajectory](https://drone.pk-research.work/knowledge/visual-inertial/evaluation/)
