ระบบควบคุมและแบบจำลอง
UAT 206 ระบบควบคุมและออโตไพลอตเบื้องต้น
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- อธิบายส่วนประกอบของระบบควบคุมวงปิดด้วยผังบล็อก
- สร้างแบบจำลองอันดับหนึ่งของมอเตอร์และหาค่าคงตัวเวลาจากข้อมูลผลตอบสนองแบบขั้น
- เขียนสมการพลวัตแนวดิ่งของมัลติคอปเตอร์และทำให้เป็นเชิงเส้นรอบจุดลอยนิ่ง
- อ่านฟังก์ชันถ่ายโอนอันดับหนึ่งและอันดับสอง
ทำไมต้องรู้
ตัวควบคุมการบินต้องตัดสินใจหลายร้อยครั้งต่อวินาทีว่าจะเร่งมอเตอร์แต่ละตัวเท่าใด ถ้าไม่เข้าใจว่าโดรนตอบสนองต่อคำสั่งอย่างไร การปรับค่าควบคุมจะกลายเป็นการเดาสุ่ม UAT 314 สอนหลักการป้อนกลับและ PID ไปแล้ว วิชานี้จะลงลึกไปที่ แบบจำลอง ผลตอบสนอง การนำ PID ไปใช้จริง และโครงสร้างของออโตไพลอต PX4 และ ArduPilot
ทั้งวิชาใช้กรณีสมมติเดียว: แล็บปรับจูนควอดคอปเตอร์ฝึกหัดหนัก 1.5 kg ใน SITL ก่อนบินจริง ตัวเลขทั้งหมดเป็นข้อมูลสมมติสำหรับฝึก โค้ด Python ของทุกโมดูลดาวน์โหลดได้ที่ /downloads/uat-206/
ผังบล็อกของวงปิด
ระบบควบคุมวงปิด (closed-loop) วัดผลลัพธ์ แล้วเทียบกับค่าที่ต้องการ ได้ ค่าผิดพลาด ตัวควบคุมใช้ คำนวณคำสั่ง ส่งให้อากาศยาน ซึ่งถูก สิ่งรบกวน เช่น ลม กระทำอยู่ด้วย เซนเซอร์วัดผลแล้วป้อนกลับมาเทียบใหม่ เปรียบเหมือนคนขับรถที่มองถนนแล้วหมุนพวงมาลัยแก้ตลอดเวลา (Åström และ Murray, 2021)
แบบจำลองอันดับหนึ่งของมอเตอร์
เมื่อสั่งเร่งมอเตอร์ทันที ใบพัดไม่ได้หมุนเร็วขึ้นในพริบตา เพราะมีความเฉื่อย แรงยกจึงค่อย ๆ เพิ่มขึ้นแบบ อันดับหนึ่ง โดย คือ ค่าคงตัวเวลา ซึ่งเป็นเวลาที่ผลตอบสนองขึ้นถึง 63.2% ของค่าสุดท้าย ในรูป ฟังก์ชันถ่ายโอน (transfer function) เขียนเป็น ซึ่งเป็นวิธีเขียนความสัมพันธ์ของอินพุตกับเอาต์พุตในโดเมนลาปลาซ (Nise, 2019)
ตัวอย่างที่ 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 ระบุหน่วยของทุกสัญญาณ
ข้อผิดพลาดที่พบบ่อย
ระวัง
- คิดว่ามอเตอร์ตอบสนองทันที
- ใช้แบบจำลองเชิงเส้นไกลจากจุดลอยนิ่ง
- ลืมว่าน้ำหนักบรรทุกเปลี่ยนคันเร่งลอยนิ่ง
- ปนหน่วยในผังบล็อก
- ทดสอบมอเตอร์โดยไม่มีการ์ดกันใบพัด
สรุป
- วงปิดวัดผลลัพธ์ เทียบกับค่าที่ต้องการ แล้วแก้คำสั่งต่อเนื่อง โดยมีสิ่งรบกวนกระทำอยู่ด้วย
- มอเตอร์ประมาณได้ด้วยแบบจำลองอันดับหนึ่ง คือเวลาถึง 63.2% ของค่าสุดท้าย
- พลวัตแนวดิ่ง และแรงยก ทำให้เป็นเชิงเส้นรอบจุดลอยนิ่ง
- ระบบอันดับสองกำหนดด้วย และ
แบบฝึกตรวจความเข้าใจ
- ระบบอันดับหนึ่งมี s ผลตอบสนองถึง 63.2% ของค่าสุดท้ายเมื่อใด
- ที่เวลา ผลตอบสนองถึงกี่เปอร์เซ็นต์ของค่าสุดท้าย
- โดรน 2 kg สี่มอเตอร์ แรงยกลอยนิ่งต่อมอเตอร์เท่าใด
- ถ้า และแรงยกลอยนิ่งต่อมอเตอร์ 2 N คันเร่งลอยนิ่งเท่าใด
- ทำไมต้องทำให้แบบจำลองเป็นเชิงเส้นรอบจุดลอยนิ่ง
เฉลย
- ที่ 0.1 s
- N
- เครื่องมือออกแบบตัวควบคุมส่วนใหญ่ใช้กับระบบเชิงเส้น และโดรนทำงานรอบจุดลอยนิ่งเป็นหลัก
สรุปสูตรสำคัญ
| แบบจำลองอันดับหนึ่ง | |
| พลวัตแนวดิ่ง | |
| แรงยกของมอเตอร์และการทำให้เป็นเชิงเส้น |
แหล่งอ้างอิงหลัก
- Nise, N. S. (2019). Control systems engineering (8th ed.). Wiley. link
- Åström, K. J., & Murray, R. M. (2021). Feedback systems: An introduction for scientists and engineers (2nd ed.). Princeton University Press. link
- Ogata, K. (2010). Modern control engineering (5th ed.). Pearson.
- Beard, R. W., & McLain, T. W. (2012). Small unmanned aircraft: Theory and practice. Princeton University Press. link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย
หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz