# ห้องทดลองวิเคราะห์และเปรียบเทียบโปรแกรมเดินตามเส้น

เพิ่มเมื่อ 17 ตุลาคม 2569 · รูปแบบผล `nkw-line-matrix` schema 1 · researchVersion `line-research-1`

ใช้ตัวแก้ไขบล็อกทางเลือกและตัวประมวลผลเดิม ไม่ใช่การเชื่อม Microsoft MakeCode และยังไม่รับรองการ build หรือดาวน์โหลดไปหุ่นจริง

## 1. วิเคราะห์เหตุหลุดเส้นจากหลักฐาน

ทดลองโปรแกรมแล้วกดพักหรือหยุด เปิดหัวข้อ “วิเคราะห์เหตุหลุดเส้นจากหลักฐาน” และกดวิเคราะห์ สามารถใช้ไฟล์เล่นย้อนหลังที่เปิดอยู่ได้เช่นกัน ปุ่ม “ดูย้อนหลังตรงเหตุ” เปิดบันทึกต้นทางและเลื่อนไปยังเวลาเหตุ ไม่รันโปรแกรมปัจจุบันทับหลักฐาน

แต่ละเหตุแสดงค่าเซนเซอร์ เกณฑ์ตรวจเส้น มอเตอร์ และ Error ก่อนเหตุ/เฟรมใกล้เหตุ พร้อมคำสั่งและค่าเซนเซอร์ที่คำสั่งอ่าน แยกข้อมูลที่บันทึกได้ออกจากข้อเสนอให้ทดลอง เช่น ลดความเร็ว ตรวจการอิ่มตัวของ PID หรือปรับเกณฑ์ทีละตัวแปร ข้อเสนอเหล่านี้ไม่ใช่ข้อพิสูจน์สาเหตุและไม่เปลี่ยนโปรแกรมอัตโนมัติ

“หลุดเส้น” หมายถึงไม่มีเซนเซอร์ตัวใดตรวจพบสีเส้นที่เลือก ไม่ได้หมายความว่าหุ่นทั้งคันอยู่นอกสนาม เฟรมปกติห่างประมาณ 50ms จึงอาจไม่พบสัญญาณสั้นระหว่างเฟรม เวลาเฟรมกับเวลาเหตุแสดงแยกกัน ถ้าไม่มีเฟรมก่อนหน้าหรือบันทึกถูกตัด ระบบแจ้งข้อจำกัด แสดงเหตุล่าสุดสูงสุด 200 เหตุ และส่งออกหลักฐาน JSON ได้

เงื่อนไขสังเกตเพื่อเสนอการทดลอง ได้แก่ |Error| ตั้งแต่ 6, คำสั่งมอเตอร์ตั้งแต่ 80%, มอเตอร์เท่ากันขณะ |Error| ตั้งแต่ 4, คำสั่ง PID ถึงขอบเขตที่ตั้ง, PID ไม่อัปเดตเกิน 0.15s, ค่าแสงห่างเกณฑ์ไม่เกิน 5 และ Error สลับเครื่องหมายอย่างน้อย 3 ครั้งในเฟรมช่วง 0.5s ก่อนเหตุ ควรอ่านร่วมกับคำสั่งและบริบท ไม่ใช้เป็นการตัดสินว่าโปรแกรมผิดโดยอัตโนมัติ

## 2. ทดสอบความทนทานหลายสนาม

เปิด “ทดสอบหลายสนาม · เปรียบเทียบโปรแกรม A/B” เลือกสนาม 1–8 สนาม จำนวน seed 1–10 และเวลาจำลองสูงสุด 5–180 วินาทีต่อรอบ ค่าเริ่มต้นเลือกสนามวงรอบทั้งสี่ สนามจากภาพที่ยังไม่ยืนยันจุดตรวจใช้ทดสอบพฤติกรรมได้ แต่ไม่ได้เวลาครบรอบที่รับรอง

ใช้โปรแกรมปัจจุบันเป็น A และค่าหุ่นเริ่มต้นจากโครงงานปัจจุบัน ทุกครั้งใช้ LineSim และ LineRunner เดิมแยกคนละอินสแตนซ์ ไม่บังคับหุ่นติดเส้น ไม่ป้อนเส้นทางล่วงหน้าให้โปรแกรม และไม่รบกวนสนามหลัก ใช้เวลาจำลองคงที่ จบเมื่อครบรอบหรือครบเวลาที่กำหนด โดยเปิดหยุดอัตโนมัติเมื่อจบรอบสำหรับชุดทดลอง

เลือกส่งสัญญาณ Start 250ms ได้ หากไม่ส่ง โปรแกรมที่รอปุ่มอาจยังคงรอ กำหนด seed ร่วมกันทุกฝ่าย; ถ้า noise=0 และความคลาดเคลื่อนอื่นคงที่ เปลี่ยน seed แล้วผลอาจเหมือนเดิม ควรปรับ noise อย่างมีเหตุผลก่อนเริ่มชุด ไม่ควรตีความว่าการทดลองหลาย seed มีความแปรปรวนเสมอ

ชุดทดลองใช้สนามปกติ ไม่ใช้สถานการณ์ฝึกย่อย ยกเลิกได้โดยเก็บเฉพาะรอบที่บันทึกครบ สนามเปิดไม่ได้จะบันทึกเหตุผลและข้ามทั้งสองโปรแกรมสำหรับสนามนั้น คำสั่งที่ไม่รองรับบันทึกเป็น runtime error ไม่ข้ามเงียบ ๆ

## 3. เปรียบเทียบโปรแกรม A/B

1. เปิดโปรแกรมฐานแล้วกด “เก็บโปรแกรมปัจจุบันเป็น B” หรือเปิดไฟล์โครงงานเป็น B
2. ปรับโปรแกรมใน Workspace ให้เป็น A แล้วเลือกเปรียบเทียบ A/B
3. เลือกสนาม ชุด seed เวลา และการส่ง Start แล้วเริ่มชุดทดลอง
4. อ่านผลรายสนามและคู่ seed เดียวกัน ทดลองเปลี่ยนทีละตัวแปรและบันทึกข้อสังเกต

B ใช้เฉพาะโปรแกรม ส่วนสนามและค่าหุ่นเริ่มต้นใช้จาก A ร่วมกัน คำสั่งปรับเทียบภายในแต่ละโปรแกรมอาจเปลี่ยนค่าเกณฑ์ของอินสแตนซ์นั้นได้ตามโปรแกรม ข้อมูลค่าเริ่มและค่าท้ายบันทึกไว้ตรวจสอบ

แสดงอัตราครบรอบ เวลาเฉลี่ย เวลาดีที่สุด ส่วนเบี่ยงเบนมาตรฐานแบบประชากร (SD) จำนวน/เวลาหลุด และข้อผิดพลาด แยกตามสนามและโปรแกรม อัตราครบรอบใช้ทุกรอบที่บันทึกเป็นตัวหารรวม runtime error; เวลาเฉลี่ยและ SD ใช้เฉพาะรอบผ่านจุดตรวจครบ ไม่เฉลี่ยเวลาข้ามสนาม ผลต่างเวลา A−B ใช้เฉพาะคู่ที่ครบรอบทั้งสอง ถ้าคู่ไม่ครบเพราะยกเลิกจะไม่จับคู่ และไม่ประกาศผู้ชนะอัตโนมัติ

## บันทึก ส่งออก และข้อจำกัด

เก็บ B และชุดผลล่าสุดในเครื่อง เปิด JSON กลับได้ ส่งออก JSON/CSV และพิมพ์สรุปพร้อมข้อสังเกต “พบปัญหาอะไร–ปรับอะไร–ผลเปลี่ยนอย่างไร” ได้ หากพื้นที่เก็บเต็มควรส่งออกทันที การนำเข้าผลไม่เปลี่ยน Workspace หรือค่าหุ่นปัจจุบัน

ผล JSON เก็บสำเนาโปรแกรม สนาม ค่าหุ่น seed รุ่นโมดูล/กติกา/researchVersion และ commit อ้างอิงฮาร์ดแวร์ ผลรายรอบเก็บเหตุการณ์ล่าสุด 100 รายการ ไม่เก็บเฟรมเล่นย้อนหลังครบทุก matrix run การเล่นย้อนหลังแบบเต็มยังใช้การทดลองหลักตามปกติ

ไฟล์นำเข้าตรวจรูปแบบ รุ่น ขอบเขตข้อมูล ผลซ้ำ ความสอดคล้องของเวลา/จุดตรวจและค่าเริ่มคู่ A/B แต่ไม่ได้ลงลายมือชื่อดิจิทัล จึงไม่ใช่หลักฐานรับรองว่าไฟล์ไม่เคยถูกแก้ไข

พิกัดฟิสิกส์บางส่วนยังเป็นค่าประมาณของระบบเดิม ไม่ใช่ผลทดสอบฮาร์ดแวร์ ฟังก์ชันหลักผ่านการทดสอบ Node กับ Blockly จริง runtime และ physics จริง ส่วนการกดหน้าจอ WebGL Console การพิมพ์และ responsive ในเบราว์เซอร์ยังไม่ได้ตรวจโดยตรง ดู RESEARCH_TEST_RESULTS.md

พัฒนาระบบโดย ครูอิสระพงษ์ วงศ์วีระพันธุ์ โรงเรียนโนนกุงวิทยาคม
