Lecture 3 — Feedback Control

Chương A** · chữa open-loop mong manh của Lec 2 — đo sai số, chỉnh liên tục

Lecture 3 — Feedback Control

Chương A · chữa open-loop mong manh của Lec 2 — đo sai số, chỉnh liên tục


Khung 6 câu hỏi

# Câu hỏi Trả lời ngắn
1 Tại sao cần? Model lệch, gió, nhiễu — open-loop (Lec 2) vỡ. Cần đo sai số và chỉnh liên tục.
2 So với cái khác? Vs open-loop: có vòng đo. Vs LQR (Lec 5): P đơn giản hơn, chưa tối ưu đa kênh. Vs RL: P là policy tuyến tính tay; RL học policy φ tuyến từ dữ liệu.
3 Giải quyết gì & thế nào? \(u=k_p e\), \(e=x_{des}-x\). Đóng vòng plant–controller–sensor.
4 Kết quả ra sao? Hệ chống được nhiễu ở mức cơ bản; nhưng P thuần vẫn dao động + lệch tĩnh → cần D/I (Lec 4).
5 Nên dùng khi nào? Sanity check 1D; baseline cực tối thiểu; hiểu reward \(-\|e\|^2\).
6 Không nên khi nào? Đừng kỳ vọng P đủ cho quadrotor nhiều kênh; đừng train/deploy không nhiễu rồi claim robust.

🖼️ Hình nhanh: Rót nước không nhìn cốc (open-loop) vs vừa rót vừa nhìn (feedback).

Hình minh họa (seminar-ready)

Hình gốc hoặc minh họa cho ebook — không cắt từ slide Princeton. Dùng Present: bật Slide · F toàn màn.

Feedback đóng vòng với plant.
Feedback đóng vòng với plant.HiếuTC · gốc
  Open-loop:   kế hoạch ──► u ──► plant ──► x     (không nhìn lại)
                      gió (~) ──┘   ★ dễ tràn / trôi

  Feedback:    x_des ──►(+) e ──► [P] ──► u ──► plant ──► x
                       ▲ –                          │
                       └──────── đo lường ◄─────────┘

0. Mục tiêu học

  1. Phân biệt open-loop và closed-loop bằng một câu + một sơ đồ.
  2. Viết luật P; giải thích vì sao P dao động trên double integrator.
  3. Nêu steady-state error dưới gió hằng.
  4. Chạy demo: open-loop trôi vs P lệch/lắc quanh target.

1. Trực giác — nói bằng lời thường

Open-loop = “tính trước rồi nhắm mắt chạy”. Như rót nước không nhìn cốc: kế hoạch đúng đến mấy, chỉ cần gió thổi hoặc bàn xê là tràn — trên đồi chè thì “cốc” chính là luống bạn định bám.

Feedback = “vừa rót vừa nhìn”: đo sai số giữa muốn và có, rồi hành động theo sai số. Cái hay: bạn không cần model hoàn hảo — sai số tự nói phải kéo hướng nào.

Demo Lec 2 đã cho thấy hover open-loop chết vì lệch 1%. Feedback là thuốc chữa — nhưng P thuần chưa đủ “phanh” (Lec 4).

🇻🇳 Chuyện thật (sân A): Chiều trên đồi chè Bảo Lộc / Mộc Châu, gió sườn đổi hướng từng phút — đúng lúc bạn đang quét luống.
File lệnh open-loop tối qua (hover + dịch ngang cố định) sáng nay bay lệch khỏi hàng chè như người đi theo chỉ đường cũ khi đường đã sửa.
Chỉ cần đóng vòng: đo lệch so với luống / waypoint → kéo lại; model không cần hoàn hảo, sai số đủ để cứu chuyến.
Chốt: feedback \(u=k_p e\) = trên chuyến bay, máy sống nhờ nhìn lại thế giới, không nhờ kịch bản offline. Chi tiết sân: ../00C.


2. Cốt lõi kỹ thuật

2.1 Luật P

\[ e = x_{des} - x, \qquad u = k_p\, e \]

Lệch nhiều kéo mạnh, lệch ít kéo nhẹ.

2.2 Vì sao P dao động trên hệ quán tính

Với \(\ddot{p}=u\) và \(u=k_p(p_{des}-p)\):

\[ \ddot{p} + k_p\, p = k_p\, p_{des} \]

Dao động điều hòa không ma sát — lắc quanh đích mãi. Kéo về mà không phanh → quá đà → kéo ngược → lại quá đà.

 vị trí
   │      ╭─╮     ╭─╮     ╭─╮
 p*┤─────╱───╲───╱───╲───╱───╲──  ← P thuần: không tắt
   │    ╱     ╲_╱     ╲_╱     ╲
   └──┴──────────────────────────► t

2.3 Steady-state error dưới gió hằng

Gió = nhiễu gia tốc hằng. Ở cân bằng, cần \(u\neq 0\) để chống gió; với P thuần \(u=k_p e\) ⇒ phải giữ \(e\neq 0\). Đó là lệch tĩnh — khâu I (Lec 4) chữa.

2.4 Sơ đồ khối chuẩn (Sơ đồ)

  x_des ──►(+)──── e ────►┌────────────┐── u ──►┌───────────┐──┬──► x
            ▲ –           │ CONTROLLER │        │  PLANT f  │  │
            │             └────────────┘        └───────────┘  │
            └───────────────────── sensor ◄────────────────────┘

3. Demo — open-loop vs P dưới gió

"""
So sánh:
  - open-loop u=0: trôi theo gió
  - P-control: bám quanh target nhưng lắc + lệch tĩnh
Đây là lý do cần khâu D (Lec 4) và/hoặc I.
"""
import numpy as np

dt, T = 0.01, 8.0
target = 1.0   # muốn đưa khối lượng (double integrator) tới p=1
wind = 0.3     # nhiễu gia tốc hằng — mô phỏng gió

def simulate(controller):
    """controller(p, v) -> u (gia tốc lệnh)."""
    p, v = 0.0, 0.0
    hist = []
    for _ in range(int(T / dt)):
        u = controller(p, v)
        v = v + (u + wind) * dt
        p = p + v * dt
        hist.append(p)
    return np.asarray(hist)

traj_ol = simulate(lambda p, v: 0.0)
traj_p  = simulate(lambda p, v: 4.0 * (target - p))  # kp=4

print("Open-loop p(T) =", round(traj_ol[-1], 3),
      "  → trôi xa target vì gió, không ai sửa")
print("P-control p(T) =", round(traj_p[-1], 3),
      "  → gần target hơn nhưng lệch tĩnh + đã lắc")
print("P max (overshoot gần đúng) =", round(traj_p.max(), 3))

🧪 Kỳ vọng demo:
- Open-loop: \(p(T)\) lớn (trôi theo gió).
- P: \(p(T)\) gần 1 nhưng không đúng 1 (lệch tĩnh ~ \(wind/k_p\) nếu đơn giản hóa), và max > target (overshoot/lắc).
★ Cần D (phanh) và I (khử lệch) — Lec 4.


4. Gắn RL–UAV / path-planning đa mục tiêu của bạn

  • Policy RL \(u=\pi(x)\) về bản chất cũng là luật feedback — chỉ khác phi tuyến, học từ dữ liệu. Nhiều policy hội tụ gần PD quanh hover.
  • Reward \(-\|e\|^2\) = bảo agent “hãy trở thành feedback controller tốt”.
  • Với gió trên ruộng/phố: train không nhiễu rồi claim robust = tái tạo lỗi “P đủ dùng vì sim sạch”.
  • Path đa mục tiêu (phủ + pin): tầng cao chọn reference; tầng thấp vẫn cần vòng feedback bám — đừng kỳ vọng một policy sparse goal tự ổn định hết.

5. Ưu / nhược (câu 5–6)

Phương án ✅ Ưu ❌ Nhược Gió / năng lượng
Open-loop Đơn giản Chết khi model/gió lệch Path “đẹp giấy” vỡ ngoài trời
P Rẻ, dễ hiểu Dao động, lệch tĩnh Phạt \(\|e\|^2\) dễ tái tạo lắc
PD/PID/LQR Xử lý tốt hơn Phức tạp hơn — Lec 4–5 Baseline trước RL
RL policy Linh hoạt phi tuyến Cần data; vẫn là feedback Phải có nhiễu gió trong train

6. Lỗi thường gặp

  • ⚠️ Kết luận “P đủ dùng” chỉ vì một mô phỏng không gió / không sai model.
  • ⚠️ Reward \(-\|e\|^2\) mà không phạt đạo hàm / độ giật — tái tạo bệnh dao động của P.
  • ⚠️ Coi feedback = đã xong điều khiển UAV — quên đa kênh, bão hòa motor, tần số vòng.

7. Checklist

  1. Feedback chữa open-loop chỗ nào?
  2. Vì sao P dao động trên hệ quán tính? (viết được PT bậc hai)
  3. Steady-state error dưới gió hằng — vì sao P không khử?
  4. Output demo minh họa lỗi nào của P?

Nhớ một câu: Feedback đo sai số để sống sót khi model/gió lệch — nhưng P thuần vẫn lắc và lệch tĩnh.

🔗 Sang bài sau mang theo: Hai bệnh của P (dao động + lệch tĩnh) → Lec 4 thêm D (phanh) + ngôn ngữ ổn định eigenvalue / \(\zeta\).


Trước: Lec02 · Sau: Lec04 — Stability & PD