# ตรวจ mission ที่ส่งเข้า SITL ก่อนทดลองบิน

ผลตรวจ 28 กันยายน 2026: ArduCopter 4.7.1, pymavlink 2.4.50, Ubuntu/WSL ภายใน network namespace ที่มีเฉพาะ loopback ใช้ process ชั่วคราวจำกัดเวลา 50 วินาที ไม่ส่งคำสั่ง arm หรือเริ่มบิน

## ขั้นตอนที่ตรวจจริง

1. เปิด SITL พร้อม official Copter defaults ในโฟลเดอร์ชั่วคราว รอออกจาก BOOT ก่อนส่ง mission การส่งเร็วเกินไปในรอบแรกได้ MISSION_ACK type=4 (NO_SPACE) จึงไม่สรุปว่าไฟล์ใหญ่เกินจากรหัสนี้เพียงอย่างเดียว
2. ขอ HOME_POSITION และรอได้รับ เพราะรายการลำดับ 0 ของ ArduPilot อ่าน home จาก AHRS ไม่ใช่พิกัดที่เราอัปโหลดทับได้
3. อ่านไฟล์ QGC WPL 110 ของชุดฝึก จำนวน 11 รายการ รวม home, takeoff, แนวสำรวจและ land ส่ง MISSION_COUNT แล้วตอบลำดับที่ autopilot ขอด้วย MISSION_ITEM_INT
4. ตรวจ MISSION_ACK=ACCEPTED จากนั้นส่ง MISSION_REQUEST_LIST ตรวจ count และขอ MISSION_REQUEST_INT ทีละลำดับจนครบ ส่ง ACK ปิดการดาวน์โหลด
5. เทียบลำดับ command, frame, พารามิเตอร์และพิกัดทุกจุด พร้อมตรวจ heartbeat ว่ายังไม่ armed

## เหตุใดไม่เทียบไฟล์แบบ byte ต่อ byte

ซอร์ส AP_Mission.cpp ของ tag Copter-4.7.1 แสดงพฤติกรรมต่อไปนี้ ซึ่งพบในผลรันจริงด้วย:

- ส่ง frame 5/6 (GLOBAL_INT / GLOBAL_RELATIVE_ALT_INT) แล้วอ่านกลับเป็น 0/3 ซึ่งมีความหมายระดับอ้างอิงเดียวกัน พิกัดใน MISSION_ITEM_INT ยังเป็น integer หน่วย degree × 10^7
- รายการ 0 ใช้ home จาก AHRS จึงเทียบกับ HOME_POSITION ที่ได้รับ และคงความต่างกับไฟล์ต้นฉบับในรายงาน
- NAV_LAND param4 จาก 0 เป็น 1: ทางแปลงกลับใน firmware เขียนค่าจาก loiter_ccw เป็น -1 หรือ 1 โดยซอร์สระบุใช้สำหรับ plane deepstall ห้ามนำกฎนี้ไปเหมารวมกับ flight stack/รุ่นอื่น

รายการความต่างดิบยังอยู่ใน JSON การผ่านหมายถึงเทียบตามพฤติกรรมเฉพาะรุ่นที่อธิบายไว้ ไม่ได้ซ่อนความต่างหรือรับรองว่าไฟล์เหมือนเดิมทุก byte

## ขอบเขตผล

ยืนยันการจัดเก็บและอ่านกลับ 11 รายการเท่านั้น ไม่ยืนยันเส้นทางบิน การหลบสิ่งกีดขวาง ระดับความสูงจริง ระยะเวลาบิน หรือความปลอดภัย ต้องทดสอบ mission execution แยกต่างหากภายใน simulator ก่อนพิจารณาข้อมูลจากอุปกรณ์จริง

## เอกสารทางการ

- https://mavlink.io/en/services/mission.html
- https://ardupilot.org/dev/docs/mavlink-mission-upload-download.html
- https://github.com/ArduPilot/ardupilot/blob/Copter-4.7.1/libraries/AP_Mission/AP_Mission.cpp (read_cmd_from_storage และ mission_cmd_to_mavlink_int)

หลักฐาน: `/downloads/projects/sitl-mission-readback-2026-09-28.json` มี hash ของ binary/ไฟล์ mission, expected/readback, ACK และรายการความต่าง
