RTOS และระบบฝังตัวสู่ AI
UAT 204 ไมโครคอนโทรลเลอร์และระบบสมองกลฝังตัว
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- อธิบาย task, priority และ preemption ในระบบปฏิบัติการเวลาจริง (RTOS)
- ตรวจว่าชุด task จัดตารางแบบ rate-monotonic ได้หรือไม่ด้วยขอบเขตของ Liu และ Layland และด้วยการจำลอง
- ระบุ RTOS ที่ใช้ใน PX4 และ ArduPilot และสัญญาอนุญาตของ NuttX, ChibiOS และ FreeRTOS
- อธิบายการนำโมเดล AI ขนาดเล็กขึ้น MCU (TinyML) และข้อจำกัด
ทำไมต้องรู้
ตัวควบคุมการบินต้องทำหลายงานพร้อมกัน อ่าน IMU พันครั้งต่อวินาที คำนวณท่าทาง รับ GPS บันทึก log และคุยกับสถานีภาคพื้น ถ้างานบันทึก log ทำนานเกินจนงานอ่าน IMU พลาดเวลา การควบคุมจะแย่ลงทันที RTOS (real-time operating system) จัดลำดับงานให้งานสำคัญได้ทำตรงเวลาเสมอ ส่วนหัวข้อสุดท้ายของบทพาไปถึงการนำ AI ขนาดเล็กขึ้น MCU
Task, priority และ preemption
- Task คืองานที่ทำซ้ำเป็นรอบ แต่ละงานมีคาบ และเวลาประมวลผล
- Priority ความสำคัญของงาน
- Preemption งานที่สำคัญกว่าขัดงานที่กำลังทำได้ทันที
Rate-monotonic scheduling ให้ priority สูงกับงานที่คาบสั้น Liu และ Layland (1973) พิสูจน์ว่าถ้าการใช้ CPU รวม ไม่เกิน สำหรับ งาน ทุกงานจะทันเวลาแน่นอน ค่านี้ลดลงเข้าหาประมาณ 69% เมื่อมีงานมาก เงื่อนไขนี้เป็น เงื่อนไขเพียงพอ ถ้าเกินขอบเขตก็ยังอาจทันได้ ต้องตรวจละเอียดขึ้น
ตัวอย่างที่ 1 ชุด task ของตัวควบคุมการบินสมมติ
หน่วยเวลาเป็น 0.1 ms (จำนวนเต็ม เพื่อไม่ให้ทศนิยมคลาดเคลื่อน) จำลองหนึ่งวินาทีโดยให้งานคาบสั้นได้ priority สูงกว่า
def check(tasks, horizon=10_000):
n = len(tasks)
u = sum(c / t for _, t, c in tasks)
bound = n * (2 ** (1 / n) - 1)
order = sorted(tasks, key=lambda x: x[1]) # คาบสั้นได้ priority สูง
remaining = {name: 0 for name, _, _ in order}
missed = {name: 0 for name, _, _ in order}
for t in range(horizon):
for name, period, cost in order:
if t % period == 0:
if remaining[name] > 0:
missed[name] += 1 # งานรอบก่อนยังไม่เสร็จ = พลาดเวลา
remaining[name] = cost
for name, _, _ in order:
if remaining[name] > 0:
remaining[name] -= 1
break
return u, bound, missed
base = [("IMU", 10, 2), ("attitude", 25, 5), ("logging", 200, 40), ("GPS", 1000, 50)]
for label, tasks in (("base", base), ("+ AI 6 ms/20 ms", base + [("AI", 2000, 600)]),
("+ AI 8 ms/20 ms", base + [("AI", 2000, 800)])):
u, bound, missed = check(tasks)
print(f"{label:<16} U = {u:.2f}, bound = {bound:.3f}, missed deadlines = {sum(missed.values())}")
base U = 0.65, bound = 0.757, missed deadlines = 0
+ AI 6 ms/20 ms U = 0.95, bound = 0.743, missed deadlines = 0
+ AI 8 ms/20 ms U = 1.05, bound = 0.743, missed deadlines = 4
ชุดพื้นฐานใช้ CPU 65% ต่ำกว่าขอบเขต 75.7% จึงทันเวลาแน่นอน เมื่อเพิ่มงาน AI จน ซึ่งเกินขอบเขต การจำลองกลับพบว่ายังทันทุกงาน เพราะคาบของงานเหล่านี้หารกันลงตัวเกือบทั้งหมด นี่คือเหตุที่เรียกว่าเงื่อนไขเพียงพอ แต่ถ้างาน AI หนักขึ้นจน เกิน 1 ก็พลาดเวลาแน่นอน ตัวเลขทั้งหมดเป็นค่าสมมติ ไม่ใช่เวลาจริงของ PX4 หรือ ArduPilot
RTOS ใน flight stack
- PX4 ใช้ NuttX เป็น RTOS หลักบนบอร์ดควบคุมการบิน NuttX เป็นโครงการของ Apache ใช้สัญญาอนุญาต Apache 2.0
- ArduPilot บนบอร์ด STM32 ใช้ ChibiOS ผ่านชั้น
AP_HAL_ChibiOSChibiOS/RT ใช้สัญญาอนุญาต GPL3 หรือแบบเชิงพาณิชย์ ส่วน ChibiOS/HAL ใช้ Apache 2.0 - FreeRTOS นิยมในบอร์ด MCU ทั่วไป รวมทั้ง ESP32 ตัว kernel ใช้สัญญาอนุญาต MIT
นอกจากจัดตารางงานแล้ว ระบบฝังตัวที่ปลอดภัยต้องมี watchdog ซึ่งรีเซ็ตระบบเองถ้าโปรแกรมค้างจนไม่มาแจ้งตามเวลา
จาก MCU สู่ AI
TinyML คือการรันโมเดล machine learning ขนาดเล็กบน MCU เช่น จำแนกเสียงผิดปกติของมอเตอร์หรือตรวจรูปแบบการสั่น Google เรียกเครื่องมือนี้ว่า LiteRT for Microcontrollers (เดิมชื่อ TensorFlow Lite for Microcontrollers) ทำงานได้โดยไม่ต้องมีระบบปฏิบัติการ และตัว runtime หลักใช้หน่วยความจำเพียงราว 16 KB บน Cortex-M3 งานที่ใหญ่กว่า เช่น ตรวจจับวัตถุในภาพ ต้องใช้คอมพิวเตอร์บนลำอย่างที่เรียนใน UAT 322 ส่วนเนื้อหาเจาะลึกเรื่อง Embedded AI และ ROS ในคลังความรู้ต่อยอดจากบทนี้
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: task บน FreeRTOS
- สร้างโปรเจกต์ FreeRTOS บน Pico 2 (ตามคู่มือ SDK) มีสาม task: อ่านเซนเซอร์ทุก 10 ms, ส่ง frame ทาง UART ทุก 100 ms และกะพริบ LED ทุก 500 ms
- ตั้ง priority แบบ rate-monotonic แล้ววัดเวลาจริงของแต่ละ task ด้วยการสลับขา GPIO และ logic analyzer
- เพิ่มงานหนักจำลอง (วนคำนวณ) ใน task ที่ priority ต่ำ แล้วตรวจว่างานอ่านเซนเซอร์ยังตรงเวลา
- ใส่ค่าที่วัดได้ลงโค้ดตัวอย่างที่ 1 เทียบผลการคำนวณกับการวัด
- เปิด watchdog แล้วจำลองให้ task หนึ่งค้าง สังเกตการรีเซ็ต
ข้อผิดพลาดที่พบบ่อย
ระวัง
- ให้ priority ตามความรู้สึก ไม่ใช่ตามคาบและความสำคัญด้านเวลา
- ถือว่าเกินขอบเขต Liu–Layland คือจัดตารางไม่ได้เสมอ
- ใช้ busy wait ใน task แทนการหน่วงเวลาของ RTOS
- ไม่มี watchdog ในระบบที่ต้องทำงานต่อเนื่อง
- คาดหวังให้ MCU รันโมเดลภาพขนาดใหญ่
สรุป
- RTOS จัดลำดับ task ด้วย priority และ preemption ให้งานสำคัญทันเวลา
- Rate-monotonic ให้งานคาบสั้นได้ priority สูง ขอบเขต เป็นเงื่อนไขเพียงพอ
- PX4 ใช้ NuttX, ArduPilot ใช้ ChibiOS และ FreeRTOS นิยมใน MCU ทั่วไป
- TinyML รันโมเดลขนาดเล็กบน MCU ส่วนงาน AI ใหญ่ต้องใช้คอมพิวเตอร์บนลำ
แบบฝึกตรวจความเข้าใจ
- งานคาบ 10 ms ใช้เวลา 2 ms และงานคาบ 20 ms ใช้เวลา 5 ms การใช้ CPU รวมเท่าใด
- ขอบเขต rate-monotonic สำหรับ 2 งานเท่าใด
- ชุดงานในข้อ 1 ทันเวลาแน่นอนหรือไม่
- PX4 ใช้ RTOS ใดบนบอร์ดควบคุมการบิน
- watchdog มีไว้ทำอะไร
เฉลย
- ทันแน่นอน เพราะ
- NuttX
- รีเซ็ตระบบเมื่อโปรแกรมค้างจนไม่แจ้งตามเวลา
สรุปสูตรสำคัญ
| การใช้ CPU | |
| ขอบเขตของ rate-monotonic |
แหล่งอ้างอิงหลัก
- Liu, C. L., & Layland, J. W. (1973). Scheduling algorithms for multiprogramming in a hard-real-time environment. Journal of the ACM, 20(1), 46–61. link
- PX4 Autopilot. PX4 architectural overview. PX4 user guide (main). link
- Apache Software Foundation. Apache NuttX real-time operating system. link
- ArduPilot Dev Team. Porting to a new flight controller board (ChibiOS). ArduPilot developer documentation. link
- ChibiOS. Licensing (ChibiOS/RT and ChibiOS/HAL). link
- FreeRTOS. FreeRTOS kernel (MIT license). link
- Google. LiteRT for Microcontrollers (TensorFlow Lite for Microcontrollers). link
- Warden, P., & Situnayake, D. (2020). TinyML: Machine learning with TensorFlow Lite on Arduino and ultra-low-power microcontrollers. O'Reilly Media.
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ระบบปฏิบัติการเวลาจริง (RTOS)
เนื้อหาเจาะลึก: จาก Embedded System สู่ AI Robot และ ROS
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย
หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz