โมดูล 1/5 · สัปดาห์ 1–3 · 27 ชม.

ระบบควบคุมและแบบจำลอง

UAT 206 ระบบควบคุมและออโตไพลอตเบื้องต้น

เวลาเรียนประมาณ 80 นาทีร่าง รอตรวจปรับปรุงล่าสุด 28 กันยายน 2569

บทเรียน

เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ

  1. อธิบายส่วนประกอบของระบบควบคุมวงปิดด้วยผังบล็อก
  2. สร้างแบบจำลองอันดับหนึ่งของมอเตอร์และหาค่าคงตัวเวลาจากข้อมูลผลตอบสนองแบบขั้น
  3. เขียนสมการพลวัตแนวดิ่งของมัลติคอปเตอร์และทำให้เป็นเชิงเส้นรอบจุดลอยนิ่ง
  4. อ่านฟังก์ชันถ่ายโอนอันดับหนึ่งและอันดับสอง

ความรู้พื้นฐานที่ควรมี: UAT 314 โมดูล 3 (การควบคุมป้อนกลับและ PID เบื้องต้น) · UAT 101 (แคลคูลัสเบื้องต้น)

ทำไมต้องรู้

ตัวควบคุมการบินต้องตัดสินใจหลายร้อยครั้งต่อวินาทีว่าจะเร่งมอเตอร์แต่ละตัวเท่าใด ถ้าไม่เข้าใจว่าโดรนตอบสนองต่อคำสั่งอย่างไร การปรับค่าควบคุมจะกลายเป็นการเดาสุ่ม UAT 314 สอนหลักการป้อนกลับและ PID ไปแล้ว วิชานี้จะลงลึกไปที่ แบบจำลอง ผลตอบสนอง การนำ PID ไปใช้จริง และโครงสร้างของออโตไพลอต PX4 และ ArduPilot

ทั้งวิชาใช้กรณีสมมติเดียว: แล็บปรับจูนควอดคอปเตอร์ฝึกหัดหนัก 1.5 kg ใน SITL ก่อนบินจริง ตัวเลขทั้งหมดเป็นข้อมูลสมมติสำหรับฝึก โค้ด Python ของทุกโมดูลดาวน์โหลดได้ที่ /downloads/uat-206/

ผังบล็อกของวงปิด

ระบบควบคุมวงปิด (closed-loop) วัดผลลัพธ์ แล้วเทียบกับค่าที่ต้องการ ได้ ค่าผิดพลาด ตัวควบคุมใช้ คำนวณคำสั่ง ส่งให้อากาศยาน ซึ่งถูก สิ่งรบกวน เช่น ลม กระทำอยู่ด้วย เซนเซอร์วัดผลแล้วป้อนกลับมาเทียบใหม่ เปรียบเหมือนคนขับรถที่มองถนนแล้วหมุนพวงมาลัยแก้ตลอดเวลา (Åström และ Murray, 2021)

ผังบล็อก ค่าที่ต้องการ r เข้าวงกลมรวมสัญญาณ ได้ค่าผิดพลาด e เข้าตัวควบคุม ได้คำสั่ง u เข้าอากาศยานซึ่งมีลูกศรสิ่งรบกวนจากลมชี้ลงมา ผลลัพธ์ y ออกทางขวา และแยกลงไปผ่านเซนเซอร์ย้อนกลับมาที่วงกลมรวมสัญญาณด้วยเครื่องหมายลบ
ภาพที่ 1 ผังบล็อกของระบบควบคุมวงปิด

แบบจำลองอันดับหนึ่งของมอเตอร์

เมื่อสั่งเร่งมอเตอร์ทันที ใบพัดไม่ได้หมุนเร็วขึ้นในพริบตา เพราะมีความเฉื่อย แรงยกจึงค่อย ๆ เพิ่มขึ้นแบบ อันดับหนึ่ง โดย คือ ค่าคงตัวเวลา ซึ่งเป็นเวลาที่ผลตอบสนองขึ้นถึง 63.2% ของค่าสุดท้าย ในรูป ฟังก์ชันถ่ายโอน (transfer function) เขียนเป็น ซึ่งเป็นวิธีเขียนความสัมพันธ์ของอินพุตกับเอาต์พุตในโดเมนลาปลาซ (Nise, 2019)

กราฟแรงยกเป็นนิวตันตามเวลา 0 ถึง 0.3 วินาที เส้นสีฟ้าโค้งขึ้นจาก 0 เข้าหา 6 นิวตัน เส้นประสีเทาแนวนอนที่ 6 นิวตัน จุดสีชมพูที่ 63.2 เปอร์เซ็นต์ของค่าสุดท้าย เส้นประจากจุดนี้ลงไปแกนเวลาที่ tau
ภาพที่ 2 ผลตอบสนองแบบขั้นของมอเตอร์อันดับหนึ่ง

ตัวอย่างที่ 1 หาค่าคงตัวเวลาของมอเตอร์จากแท่นทดสอบ

สั่งคันเร่งแบบขั้นแล้วบันทึกแรงยกจากโหลดเซลล์ทุก 10 ms

import math

DT = 0.01
thrust = [0.0, 1.09, 1.98, 2.71, 3.3, 3.79, 4.19, 4.52, 4.79, 5.01, 5.19, 5.34, 5.46, 5.55, 5.64,
          5.7, 5.76, 5.8, 5.84, 5.87, 5.89, 5.91, 5.93, 5.94, 5.95, 5.96, 5.97, 5.97, 5.98, 5.98, 5.99]
final = thrust[-1]
target = 0.632 * final
i = next(k for k, v in enumerate(thrust) if v >= target)
t63 = (i - 1) * DT + (target - thrust[i - 1]) / (thrust[i] - thrust[i - 1]) * DT
print(f"final thrust {final:.2f} N, 63.2% = {target:.2f} N, tau from the curve = {t63 * 1000:.1f} ms")

pts = [(k * DT, math.log(1 - v / final)) for k, v in enumerate(thrust[:15])]
slope = sum(t * y for t, y in pts) / sum(t * t for t, _ in pts)
print(f"tau from a log fit of the first 0.14 s = {-1 / slope * 1000:.1f} ms")
final thrust 5.99 N, 63.2% = 3.79 N, tau from the curve = 49.9 ms
tau from a log fit of the first 0.14 s = 49.6 ms

สองวิธีให้ค่าใกล้กัน ราว 50 ms วิธีอ่านจุด 63.2% ง่ายแต่ใช้ข้อมูลไม่กี่จุด ส่วนวิธีปรับเส้นใช้ข้อมูลทั้งช่วงจึงทนสัญญาณรบกวนกว่า ค่านี้บอกว่าตัวควบคุมอัตราหมุนต้องไม่พยายามสั่งเร็วกว่าที่มอเตอร์ตามทัน

พลวัตแนวดิ่งและการทำให้เป็นเชิงเส้น

ในแนวดิ่ง โดรนมีแรงยกรวม สู้กับน้ำหนัก ได้ แรงยกของใบพัดโดยประมาณแปรตามกำลังสองของคันเร่ง ซึ่งไม่เป็นเชิงเส้น แต่เราควบคุมรอบ จุดลอยนิ่ง (hover) เป็นหลัก จึงประมาณด้วยเส้นตรงรอบจุดนั้นได้ ตำรา Beard และ McLain (2012) ใช้หลักเดียวกันกับอากาศยานไร้คนขับขนาดเล็ก

ตัวอย่างที่ 2 คันเร่งลอยนิ่งและอัตราขยายเฉพาะที่

โดรน 1.5 kg สี่มอเตอร์ แต่ละตัวให้แรงยกสูงสุด 8 N ที่คันเร่งเต็ม (ค่าสมมติ)

import math

M, G, N_MOTORS, K_MAX = 1.5, 9.80665, 4, 8.0      # kg, m/s², จำนวนมอเตอร์, N ที่คันเร่งเต็ม
t_hover = M * G / N_MOTORS
u_hover = math.sqrt(t_hover / K_MAX)
gain = N_MOTORS * 2 * K_MAX * u_hover                # N ต่อคันเร่ง 1.0 (ทุกมอเตอร์รวมกัน)
print(f"hover thrust per motor {t_hover:.2f} N, hover throttle {u_hover:.3f}")
print(f"local gain {gain:.1f} N per unit throttle -> +0.01 throttle gives {gain * 0.01 / M:.2f} m/s^2")
print(f"thrust-to-weight ratio {N_MOTORS * K_MAX / (M * G):.2f}")
hover thrust per motor 3.68 N, hover throttle 0.678
local gain 43.4 N per unit throttle -> +0.01 throttle gives 0.29 m/s^2
thrust-to-weight ratio 2.18

คันเร่งลอยนิ่งราว 0.68 เหลือช่องให้เร่งขึ้นไม่มาก ถ้าเพิ่มน้ำหนักบรรทุก คันเร่งลอยนิ่งจะสูงขึ้นและอัตราขยายเฉพาะที่เปลี่ยน ค่าควบคุมที่จูนไว้จึงอาจไม่เหมาะอีกต่อไป จึงต้องตรวจค่าคันเร่งลอยนิ่งใหม่ทุกครั้งที่เปลี่ยนน้ำหนักหรือแบตเตอรี่

ฟังก์ชันถ่ายโอนอันดับสอง

หลายระบบประกอบด้วยส่วนอันดับหนึ่งสองส่วนหรือมีมวลกับสปริง ผลตอบสนองจึงเป็น อันดับสอง รูปมาตรฐานคือ โดย คือความถี่ธรรมชาติ และ คือ อัตราส่วนความหน่วง ซึ่งกำหนดว่าผลตอบสนองจะแกว่งมากเพียงใด โมดูล 2 จะใช้รูปนี้ศึกษาผลตอบสนองและเสถียรภาพ

ปฏิบัติการประจำโมดูล

ปฏิบัติการ: แท่นทดสอบมอเตอร์

  1. ยึดมอเตอร์และใบพัดบนแท่นวัดแรงยกที่มีการ์ดกันใบพัด ทำงานตามกฎความปลอดภัยของแล็บ
  2. สั่งคันเร่งหลายระดับ บันทึกแรงยกคงที่ แล้วหาค่า ใน
  3. สั่งคันเร่งแบบขั้นแล้วบันทึกแรงยกตามเวลา ใช้โค้ดตัวอย่างที่ 1 หา
  4. ใช้โค้ดตัวอย่างที่ 2 กับค่าที่วัดได้ หาคันเร่งลอยนิ่งเมื่อมีและไม่มีน้ำหนักบรรทุก
  5. วาดผังบล็อกของตัวควบคุมความสูงที่จะใช้ในโมดูล 3 ระบุหน่วยของทุกสัญญาณ

ข้อผิดพลาดที่พบบ่อย

ระวัง

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

สรุป

  • วงปิดวัดผลลัพธ์ เทียบกับค่าที่ต้องการ แล้วแก้คำสั่งต่อเนื่อง โดยมีสิ่งรบกวนกระทำอยู่ด้วย
  • มอเตอร์ประมาณได้ด้วยแบบจำลองอันดับหนึ่ง คือเวลาถึง 63.2% ของค่าสุดท้าย
  • พลวัตแนวดิ่ง และแรงยก ทำให้เป็นเชิงเส้นรอบจุดลอยนิ่ง
  • ระบบอันดับสองกำหนดด้วย และ

แบบฝึกตรวจความเข้าใจ

  1. ระบบอันดับหนึ่งมี s ผลตอบสนองถึง 63.2% ของค่าสุดท้ายเมื่อใด
  2. ที่เวลา ผลตอบสนองถึงกี่เปอร์เซ็นต์ของค่าสุดท้าย
  3. โดรน 2 kg สี่มอเตอร์ แรงยกลอยนิ่งต่อมอเตอร์เท่าใด
  4. ถ้า และแรงยกลอยนิ่งต่อมอเตอร์ 2 N คันเร่งลอยนิ่งเท่าใด
  5. ทำไมต้องทำให้แบบจำลองเป็นเชิงเส้นรอบจุดลอยนิ่ง
เฉลย
  1. ที่ 0.1 s
  2. N
  3. เครื่องมือออกแบบตัวควบคุมส่วนใหญ่ใช้กับระบบเชิงเส้น และโดรนทำงานรอบจุดลอยนิ่งเป็นหลัก

สรุปสูตรสำคัญ

แบบจำลองอันดับหนึ่ง
พลวัตแนวดิ่ง
แรงยกของมอเตอร์และการทำให้เป็นเชิงเส้น

แหล่งอ้างอิงหลัก

  1. Nise, N. S. (2019). Control systems engineering (8th ed.). Wiley. link
  2. Åström, K. J., & Murray, R. M. (2021). Feedback systems: An introduction for scientists and engineers (2nd ed.). Princeton University Press. link
  3. Ogata, K. (2010). Modern control engineering (5th ed.). Pearson.
  4. Beard, R. W., & McLain, T. W. (2012). Small unmanned aircraft: Theory and practice. Princeton University Press. link

อ่านเพิ่มเติม

ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล

ในชั้นเรียน / ภาคสนาม

ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย

หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz

แบบทดสอบประจำโมดูล

แบบทดสอบนี้ใช้ตรวจความเข้าใจ (formative) ไม่ใช่การสอบเก็บคะแนน

โดเมนความรู้: การควบคุม ออโตไพลอต และการนำทาง · คณิตศาสตร์ ฟิสิกส์ และสถิติ