Ebook Robotics · RL–UAV
Lecture 4 — Stability và PD Control
Chương A** · thêm “phanh” (D) và ngôn ngữ ổn định — nền cascade PID firmware
Chế độ Slide · phím ← → · F toàn màn · Esc về đọc · S mở slide
Chương A** · thêm “phanh” (D) và ngôn ngữ ổn định — nền cascade PID firmware
Chương A · thêm “phanh” (D) và ngôn ngữ ổn định — nền cascade PID firmware
| # | 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 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.
Ổ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)
Thả viên bi — và nghĩ luôn tới máy đang bám một điểm trên sườn chè:
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.
Điểm cân bằng \(x^*\) (nơi \(f(x^*,u^*)=0\)):
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ộ.
\[ 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.
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
"""
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\).
| ✅ 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 |
⚡ 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