Lecture 4 — Stability và PD Control

Chương A** · thêm “phanh” (D) và ngôn ngữ ổn định — nền cascade PID firmware

Lecture 4 — Stability và PD Control

Chương A · thêm “phanh” (D) và ngôn ngữ ổn định — nền cascade PID firmware


Khung 6 câu hỏi

# Câu hỏi Trả lời ngắn
1 Tại sao cần? P (Lec 3) lắc mãi / lệch tĩnh. Cần định nghĩa ổn định và khâu D (phanh).
2 So với cái khác? Vs P: có damping. Vs LQR: PD chỉnh tay ít kênh; LQR tối ưu đa kênh từ \(Q,R\). Vs RL: PD là prior cấu trúc; reward smooth ≈ D.
3 Giải quyết gì & thế nào? \(u=k_p e - k_d v\); kiểm tra ổn định bằng eigenvalue của \(A\); \(\zeta\) chỉnh under/critical/over.
4 Kết quả ra sao? Hệ về đích êm hơn; nền cho cascade PID trên firmware và cho residual RL.
5 Nên dùng khi nào? Hover/bám 1–vài kênh; vòng attitude trong; baseline trước RL.
6 Không nên khi nào? Đừng tăng \(k_p\) mãi (nhiễu, bão hòa); đừng suy ổn định toàn cục chỉ từ tuyến tính hóa.

🖼️ Hình nhanh: Viên bi — đáy chén / mặt bàn / đỉnh mũ; D = mật ong trong chén.

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.

Ba kiểu đáp ứng theo damping ζ.
Ba kiểu đáp ứng theo damping ζ.HiếuTC · gốc
PD nằm trên vòng feedback.
PD nằm trên vòng feedback.HiếuTC · gốc
  Ổn định tiệm cận     Ổn định biên        Bất ổn định
      \_/  bi           ______ bi            /\  bi
       ★ về đáy          ★ đứng chỗ mới      ★ lăn tuột

  PD = kéo về (P) + phanh theo tốc độ (D)
       ζ < 1: ╱╲╱‾‾   ζ = 1: ╱‾‾‾   ζ > 1: ╱⎯⎯⎯ (chậm)

0. Mục tiêu học

  1. Phân biệt ổn định Lyapunov / tiệm cận / biên / bất ổn bằng ví dụ viên bi.
  2. Tiêu chuẩn eigenvalue: mọi Re\((\lambda)<0\).
  3. Chỉnh PD qua \(\omega_n=\sqrt{k_p}\), \(\zeta=k_d/(2\sqrt{k_p})\).
  4. Biết vai trò I (khử lệch tĩnh) và rủi ro windup; chạy demo 3 chế độ damping.

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

Thả viên bi — và nghĩ luôn tới máy đang bám một điểm trên sườn chè:

  • đáy chén → đẩy nhẹ, bi lăn về đáy: ổn định tiệm cận
  • mặt bàn phẳng → đẩy, bi ở chỗ mới: ổn định biên
  • đỉnh mũ úp ngược → đẩy nhẹ, bi lăn tuột: bất ổn định

Khâu D = ma sát nhân tạo: không chỉ nhìn “đang lệch bao nhiêu” mà nhìn “đang lao nhanh cỡ nào” để phanh sớm. Bi trong chén có mật ong thì về đáy êm không lắc.

Trên ruộng chè gió mạnh: P kéo drone về waypoint như lò xo không dầu — lắc ngang hàng chè; D như giảm chấn giúp bám êm, tốn ít năng lượng sửa sai hơn.

🇻🇳 Chuyện thật (sân A): \(\zeta\) (damping ratio) quá nhỏ trên đồi chè Thái Nguyên: máy “say sóng” — dao động ngang luống như người say tàu, ảnh chồng lệch, sidelap vỡ.
P kéo mạnh về waypoint; thiếu D thì mỗi cú gió là một nhịp lắc mới, pin tiêu vào sửa sai thay vì phủ.
Tăng D vừa phải (như mật ong trong chén) → về điểm êm, quỹ đạo bám được để đo năng lượng \(E\) trung thực.
Chốt: PD + \(\zeta\) đúng = trên chuyến bay, ổn định tiệm cận không chỉ “không rơi” mà còn không lắc hết pin. Chi tiết sân: ../00C.


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

2.1 Định nghĩa

Điểm cân bằng \(x^*\) (nơi \(f(x^*,u^*)=0\)):

  • Ổn định (Lyapunov): xuất phát đủ gần thì mãi ở gần.
  • Ổn định tiệm cận: gần + hội tụ về \(x^*\) khi \(t\to\infty\).

2.2 Tiêu chuẩn eigenvalue

Hệ \(\dot{x}=Ax\): ổn định tiệm cận mọi eigenvalue có phần thực âm.

Phần Ý nghĩa
Re\((\lambda)\) tốc độ tắt (càng âm càng nhanh)
Im\((\lambda)\) tần số dao động (càng lớn càng lắc)

Hệ phi tuyến: linearize rồi xét \(A\) — kết luận cục bộ.

2.3 PD trên double integrator

\[ u = k_p(p^\star-p) - k_d\, v \quad\Rightarrow\quad \ddot{p} + k_d\dot{p} + k_p p = k_p p^\star \]

\[ \omega_n=\sqrt{k_p},\qquad \zeta=\frac{k_d}{2\sqrt{k_p}} \]

  ζ < 1  underdamped   : vọt lố rồi lắc tắt      ╱╲╱‾‾
  ζ = 1  critical      : về nhanh không vọt lố   ╱‾‾‾
  ζ > 1  overdamped    : về từ từ                ╱⎯⎯⎯

Tuning thực dụng: chọn \(k_p\) theo tốc độ đáp ứng, rồi \(k_d\approx 2\sqrt{k_p}\) (critical), tinh chỉnh.

2.4 PID và windup (Sơ đồ cascade UAV)

Khâu I cộng dồn sai số → khử lệch tĩnh (gió hằng, pin yếu). Rủi ro: vọt lố, windup khi \(u\) bão hòa.

  position loop (ngoài) ──► attitude setpoint
         │
         ▼
  attitude PID (trong, ~500Hz) ──► motor
         ★ firmware: PX4 / Crazyflie kiểu cascade

3. Demo — quét ba chế độ damping

"""
Cố định kp (ω_n=3), đổi kd để tạo ζ <1, =1, >1.
Quan sát overshoot và giá trị cuối.
"""
import numpy as np

dt, T, kp = 0.01, 6.0, 9.0  # ω_n = sqrt(9) = 3 rad/s

def simulate_pd(kd):
    p = v = 0.0
    hist = []
    for _ in range(int(T / dt)):
        u = kp * (1.0 - p) - kd * v   # PD: kéo về 1.0, phanh theo v
        v += u * dt
        p += v * dt
        hist.append(p)
    return np.asarray(hist)

# kd = 2*ζ*ω_n = 2*ζ*3 → ζ≈0.25, 1, 2.3 với kd=1.5, 6, 14
cases = [(1.5, "under (ζ≈0.25)"), (6.0, "critical (ζ≈1)"), (14.0, "over (ζ≈2.3)")]
for kd, name in cases:
    tr = simulate_pd(kd)
    print(f"{name:22s}  kd={kd:4.1f}  overshoot={tr.max()-1:+.3f}  p(T)={tr[-1]:.3f}")

🧪 Kỳ vọng demo:
- under: overshoot dương rõ (+0.xxx).
- critical: overshoot ≈ 0, về 1 nhanh.
- over: overshoot nhỏ, \(p(T)\) có thể chưa kịp chạm 1 nếu T ngắn — cảm giác “bò”.
★ D đổi hành vi rõ ràng; không chỉ tăng \(k_p\).


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

  • Eigenvalue = ngôn ngữ hỏi “policy kín có ổn định không” (stability-certified RL).
  • Reward phạt \(\|v\|\), \(\|\Delta u\|\) ≈ “cài \(k_d\)” vào policy — thiếu thì giật như P thuần.
  • Thực tế tốt: giữ PID/LQR attitude trong, RL xuất setpoint ngoài — ổn định được “bảo hành”.
  • Năng lượng: overshoot/lắc = bay thừa mét + motor làm việc thừa → metric pin xấu dù path hình học ngắn.
  • Gió: I khử lệch tĩnh; nhớ anti-windup khi sat thrust.

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

✅ Nên ❌ Không
Kiến trúc PID attitude trong, RL setpoint ngoài RL motor thuần khi chưa có tầng ổn định
Reward Phạt \(\|v\|\), \(\|\Delta u\|\) Chỉ sparse goal trên hệ quán tính
Tuning \(\zeta\approx 0.7\)–1 cho bám êm Tăng \(k_p\) mãi → nhiễu & bão hòa
Kết luận ổn định Eigenvalue cục bộ quanh hover Suy ổn định toàn cục từ linearize

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

  • ⚠️ Tăng \(k_p\) mãi để “bám chặt” — khuếch đại nhiễu đo, motor bão hòa.
  • ⚠️ Nhầm ổn định tuyến tính hóa với ổn định toàn cục hệ phi tuyến.
  • ⚠️ Bật I không anti-windup khi \(u\) chạm trần thrust trong gió mạnh.

7. Checklist

  1. Ba kiểu viên bi ↔ ổn định tiệm cận / biên / bất ổn?
  2. Tiêu chuẩn eigenvalue? Re và Im cho biết gì?
  3. \(\zeta\) critical khoảng nào nếu muốn không vọt lố mà về nhanh?
  4. Khâu I chữa gì và gây rủi ro gì (windup)?
  5. Demo: D thay đổi overshoot ra sao?

Nhớ một câu: PD = lò xo + giảm chấn; ổn định tuyến tính ⇔ mọi eigenvalue nằm nửa trái; \(\zeta\) chỉnh độ êm.

🔗 Sang bài sau mang theo: PD tay khó scale 12 state → Lec 5 LQR chọn khẩu vị \(Q,R\) rồi toán trả \(K\); cầu nối Riccati ↔ Bellman.


Trước: Lec03 · Sau: Lec05 — LQR