เริ่มตัวอย่างสะสมมุม · กลับบทกรองมุมกับเวลา
วัตถุประสงค์และพื้นฐานที่ใช้
ฝึกเปลี่ยนอัตราหมุนเป็นการเปลี่ยนมุม โดยใช้ timestamp จริงและอธิบายสมมติฐานที่ใช้ระหว่างจุดได้ เหมาะกับการอ่าน Log และตรวจขั้น prediction ก่อนผสาน IMU ใช้เครื่องคิดเลข PC หรือกระดาษ ไม่ต้องมีบอร์ด อ่าน มุมตามเวลา และ การคาลิเบรต IMU ก่อนทำ
ภาพเสมือนจริงต้นบทสร้างด้วย AI ใช้โมดูล IMU บัตรว่าง เข็มและนาฬิกาเป็นสื่อแนวคิด ไม่ใช่อุปกรณ์วัดมุมที่รับรอง ตัวเลขทั้งหมดสมมติ หนึ่งแกน ไม่มีมุมจริงให้เปรียบเทียบ ไม่มีการรัน SciPy เฟิร์มแวร์ หรือทดลอง IMU
ระบุค่าเริ่มต้นและวิธีคำนวณระหว่างจุด
อัตราหน่วย deg/s คูณเวลาหน่วย second ให้มุม degree เช่น 10 deg/s × 0.02 s = 0.2° การสะสมให้การเปลี่ยนมุม ส่วนมุมอ้างอิงต้องมี theta0: ในโจทย์นี้ประกาศเริ่มที่ 5° ไม่ได้หา 5° จาก gyro จุดแรก ถ้าไม่มีอ้างอิงเริ่มต้น จะรายงานได้เพียงมุมเปลี่ยนสัมพัทธ์ภายใต้แบบจำลอง
กำหนด dt = (t_now − t_previous) / 1000 สำหรับ timestamp หน่วย ms จาก clock/session เดียวกัน แล้วเลือกวิธี:
- ยึดค่าต้นช่วง:
delta_left = rate_previous × dtเป็นพื้นที่สี่เหลี่ยม ใช้แบบจำลองอัตราคงที่จากต้นช่วงจนก่อนจุดถัดไป - สี่เหลี่ยมคางหมู:
delta_trap = (rate_previous + rate_now) × dt / 2ใช้อัตราเฉลี่ยสองปลาย เป็นพื้นที่ภายใต้แบบจำลองเส้นตรงระหว่างจุด
ทั้งสองวิธีสะสม theta_now = theta_previous + delta และให้ผลต่างกันได้ การเลือกวิธีเป็นสมมติฐานเกี่ยวกับช่วงที่ไม่ได้วัดทั้งหมด ไม่ใช่หลักฐานว่าการเคลื่อนที่จริงคงที่หรือเป็นเส้นตรง สี่เหลี่ยมคางหมูคำนวณได้เมื่อมีข้อมูลปลายช่วงแล้ว ไม่พร้อมใช้ก่อน sample นั้นมา
เอกสาร SciPy cumulative_trapezoid อธิบายการสะสมแบบสี่เหลี่ยมคางหมูและการส่งพิกัด x แทน spacing คงที่ บทนี้คำนวณเอง หากนำไปใช้กับ API ต้องส่งเวลาเป็น second และแยก theta0 ออกจาก initial: เอกสาร API รับ initial เป็น 0 หรือ None ไม่ใช้ initial = 5 เพื่อแทนมุมเริ่มต้น ให้บวก theta0 กับผลสะสมภายหลังตามหน่วยที่ประกาศ
สะสมสี่จุดด้วยช่วงเวลาจริง
กำหนด: timestamp ของ sample ใหม่ทุกจุดใน clock/session เดียวกัน ไม่มี reset; ตั้งใจให้ช่วงเวลาห่างไม่เท่ากันตามตาราง ไม่ประกาศว่ามี sample อื่นระหว่างจุด ใช้ degree, second และ deg/s เริ่ม theta0 = 5° สำหรับทั้งสองวิธี
| Sample (ms) | rate (deg/s) |
|---|---|
| 0 | 0 |
| 10 | 10 |
| 30 | 20 |
| 70 | 10 |
| ช่วง (ms) | dt (s) | delta ต้นช่วง (°) | delta คางหมู (°) |
|---|---|---|---|
| 0→10 | 0.01 | 0 | 0.05 |
| 10→30 | 0.02 | 0.2 | 0.3 |
| 30→70 | 0.04 | 0.8 | 0.6 |
ช่วง 10→30 ms: dt = 0.02 s วิธียึดค่าต้นช่วงได้ 10 × 0.02 = 0.2° ส่วนคางหมูได้ (10 + 20) × 0.02 / 2 = 0.3° ไม่ใช้ dt = 0.01 s ทุกแถวเพียงเพราะจุดสองจุดแรกห่าง 10 ms
| Sample (ms) | theta ต้นช่วง (°) | theta คางหมู (°) |
|---|---|---|
| 0 | 5 | 5 |
| 10 | 5 | 5.05 |
| 30 | 5.2 | 5.35 |
| 70 | 6 | 5.95 |
ที่ 70 ms การเปลี่ยนมุมสะสมคือ 1° หรือ 0.95° ตามวิธี ไม่ใช่มุมเริ่มจากศูนย์ หากฝืนใช้ dt = 0.01 s ทั้งสามช่วง จะได้ theta คางหมู 5.35° แทน 5.95° จากช่วงเวลาจริง ผลต่างของสองวิธีไม่ได้บอกว่าแบบใดใกล้มุมจริงกว่า เพราะโจทย์ไม่ได้ประกาศมุมหรือเส้นทางการเคลื่อนที่จริง
Matplotlib จากตัวเลขสมมติ เส้นระหว่าง rate แสดงแบบจำลองที่เลือก ส่วนเส้นเชื่อม theta ให้อ่านลำดับผลปลายช่วง ไม่ใช่ waveform หรือมุมจริงที่วัด เปิดกราฟสะสมมุมและ Bias ขนาดเต็ม
Bias คงที่สะสมตามเวลาที่ผ่านไป
แยกโจทย์ใหม่: เพิ่ม offset คงที่ +1 deg/s ทุก rate เดิม ได้ 1, 11, 21, 11 deg/s โดยคง theta0 และวิธีคางหมูเดิม การเปลี่ยนผลสะสมจากชุดเดิมเป็น offset × elapsed_time เพราะทุกช่วงเพิ่มพื้นที่ 1 × dt
ที่ t = 10, 30, 70 ms ผลคางหมูใหม่คือ 5.06, 5.38, 6.02° ต่างจากชุดเดิม +0.01, +0.03, +0.07° ตามลำดับ ตัวเลขเหล่านี้แสดงผลของ offset ที่ประกาศในแบบจำลอง ไม่ใช่ bias ที่วัดจากชิปหรือค่าที่ควรตั้งจริง เมื่อลบ offset ที่รู้ตรงตามโจทย์จะได้ผลเดิม แต่ข้อมูลจริงยังต้องตรวจที่มาและสถานะการชดเชยก่อนลบ
การเฉลี่ยสามจุด ไม่ลบ bias คงที่เพียงเพราะผลเรียบขึ้น ค่าเริ่มต้นผิดก็เลื่อนมุมทั้งชุดได้ แยก bias, noise, หน่วยและทิศแกนก่อนเลือกวิธีแก้ อ่าน การคาลิเบรต IMU และต่อยอด Complementary Filter เมื่อต้องอธิบายการทำนายและการปรับมุมด้วยข้อมูลอีกชนิด
ตรวจ Clock ข้อมูลขาด และขอบเขตหนึ่งแกน
เมื่อ dt ≤ 0 ให้ตรวจ duplicate, ordering, clock และ reset ก่อนสะสม ไม่สร้าง dt เพื่อให้สูตรรันได้ ถ้า clock/session เปลี่ยน ให้แยกช่วงและระบุอ้างอิงเริ่มต้นใหม่ที่ยังรู้หรือไม่รู้ อ่าน อายุข้อมูลที่จุดใช้
ช่วงยาวที่ทราบ timestamp ยังคิดพื้นที่ตามแบบจำลองได้ แต่ถ้าเกิดข้อมูลขาดโดยไม่ทราบอัตราระหว่างนั้น การต่อด้วยค่าปลายไม่เรียกคืนการเคลื่อนที่ที่หายไป อย่าทำให้สมมติฐานกลายเป็นผลยืนยัน หากนโยบายใช้งานไม่อนุญาตให้ต่อช่วง ให้ทำเครื่องหมาย unresolved และเก็บข้อมูลดิบ/ขอบเขตช่วง แยกออกจากช่วงที่ตรวจได้
หลังกรอง rate ให้ตรวจเวลาที่ผลหมายถึงและเวลาพร้อมใช้ ไม่จับคู่ผลที่อ้างถึงต่างช่วงโดยไม่ประกาศวิธีเทียบเวลา แบบฝึกนี้ไม่มี input ที่กรองแล้วและไม่มี gap จึงไม่รับรองนโยบายสำหรับกรณีเหล่านั้น
การสะสม scalar หนึ่งแกนไม่ใช่ estimator ท่าทางสามมิติ การอินทิเกรต body gyro แต่ละแกนตรง ๆ แล้วเรียกว่า Euler roll/pitch/yaw ใช้ไม่ได้ทุกท่า ต้องมีนิยาม frame และการอัปเดต orientation ที่เหมาะสมตาม ข้อจำกัดในบทผสาน IMU ชุดเลขนี้ไม่ใช้ปรับ controller หรือรับรองการบิน
ขั้นตอนฝึกและคำแนะนำเบื้องต้น
- อ่าน คู่มือชุดสะสมมุม ทำสำเนา ใบวางแผนสะสมมุมว่าง ระบุแกน หน่วย clock/session และ theta0 พร้อมที่มา
- ทำ โจทย์สะสมมุมและ Bias เขียน dt จริงและพื้นที่ทีละช่วง แยกมุมเปลี่ยนจากมุมหลังบวกค่าเริ่มต้น
- เพิ่ม offset ตามโจทย์ แล้วตรวจผลต่างกับเวลาที่ผ่านไปก่อนเปิด เฉลยสะสมมุม ระบุข้อสรุปที่ยังต้องมี reference จริง
- หากต่อยอดฮาร์ดแวร์ เก็บ raw/config/timestamp/reference และสถานะการชดเชยตาม คู่มือเตรียมบอร์ดจริง การตรงเฉลยเลขไม่แทนผลวัด IMU
เริ่มด้วยหน่วยและเวลาให้ถูกก่อนเปลี่ยนวิธีคำนวณ เก็บค่าเต็มไว้ก่อนปัด และไม่สรุปความแม่นยำจากกราฟที่เรียบ ไม่มีคะแนนใหม่ในแบบประเมินเดิม และไม่มีผลอุปกรณ์หรือค่าจูนบินใหม่
ตัวเลขและแหล่งอ้างอิงชุดสะสมมุม · รายการแฮชชุดสะสมมุม · กลับภาพรวม MCU