Lecture 9 — Differential Flatness & Min-Snap

Chương B** · vì sao quadrotor plan được “dễ” hơn vẻ ngoài 12 chiều

Lecture 9 — Differential Flatness & Min-Snap

Chương B · vì sao quadrotor plan được “dễ” hơn vẻ ngoài 12 chiều


Khung 6 câu hỏi

# Câu hỏi Trả lời ngắn
1 Tại sao cần? RRT (Lec 8) cho polyline gấp khúc — bay xấu, dễ vượt snap/attitude. Cần quỹ đạo mượt suy ra được attitude + thrust.
2 So với cái khác? Vs plan 12D thô: chỉ plan 4D flat \((x,y,z,\psi)\). Vs kinodynamic RRT (Lec 10): flat+min-snap nhanh hơn khi bay không cực đoan.
3 Giải quyết gì & thế nào? Flat output đủ mượt → đại số ra attitude/thrust; min-snap QP nối waypoint bằng spline bậc cao.
4 Kết quả ra sao? Pipeline RRT → min-snap → LQR/PID track; action space RL (spline/flat ref) khả thi hơn.
5 Nên dùng khi nào? Quadrotor chuẩn; cinematography/racing baseline; làm mượt path đa mục tiêu trước khi track.
6 Không nên khi nào? Model lệch mạnh (drag lớn, hỏng cánh) mà không residual; polyline không qua lớp mượt mà vẫn claim “tôn trọng dynamics”.

🖼️ Hình nhanh: polyline gấp khúc ≠ quỹ đạo bay được
RRT waypoints: ●────●────────●────● (gãy góc, jerk/snap nổ) Min-snap: ●⌒⌒⌒⌒●⌒⌒⌒⌒⌒⌒⌒●⌒⌒⌒● (mượt tới bậc 4) │ flatness map (đại số) ▼ θ(t), ω(t), F(t), M(t) khả thi

🇻🇳 Chuyện thật (sân A): Cuối mỗi luống chè Mộc Châu / Thái Nguyên, path boustrophedon hay đòi “quẹo 90° cứng” như góc thước kẻ trên bản đồ.
Máy không phải xe trên ray: snap và attitude nổ, nghiêng quá làm GSD nhiễu, hoặc đơn giản là không bay nổi đoạn cua đó.
Differential flatness + min-snap biến polyline thành spline đủ mượt — rồi mới giao LQR/PID track.
Chốt: góc 90° trên giấy ≠ quỹ đạo khả thi; flat output \((x,y,z,\psi)\) đủ mượt mới suy ra attitude/thrust bằng đại số. ../00C.

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.

Polyline gấp khúc vs quỹ đạo min-snap.
Polyline gấp khúc vs quỹ đạo min-snap.HiếuTC · gốc
Cuối luống chè hay đòi góc 90° cứng.
Cuối luống chè hay đòi góc 90° cứng.Generated for ebook · seminar OK

0. Mục tiêu học

  1. Phát biểu: quadrotor là hệ differentially flat với flat output \((x,y,z,\psi)\).
  2. Giải thích vì sao plan trong 4D thay vì 12D.
  3. Nắm pipeline RRT → min-snap → tracking.
  4. Nhìn thấy số: attitude/thrust “rơi ra” từ đạo hàm quỹ đạo — không giải ODE ngược.

1. Trực giác

Phát hiện đẹp nhất về quadrotor: chỉ cần vẽ quỹ đạo vị trí đủ mượt
\( (x(t), y(t), z(t), \psi(t)) \), thì góc nghiêng, tốc độ góc, tổng lực đẩy
suy ra bằng công thức đại số từ quỹ đạo và các đạo hàm của nó.

Ví dụ cảm nhận: drone bay vòng tròn đều — nó phải nghiêng vào tâm một góc
xác định (như xe máy ôm cua). Góc đó không phải lựa chọn tự do: quỹ đạo đã
quy định. Flatness tổng quát hóa: quỹ đạo vị trí quy định mọi thứ.

Vì sao đúng (mức trực giác):

  quỹ đạo r(t) ──► ÿ, z̈ (gia tốc) ──► vector lực cần m(a+ge₃)
                                           │
                                           ▼
                              hướng lực = hướng trục thân
                                           │
                                           ▼
                              θ, φ suy ra; F = ‖lực‖
                     (jerk, snap → ω, mô-men)

2. Cốt lõi + sơ đồ

2.1. Flat output

Khái niệm Nghĩa với quadrotor
Flat output \((x,y,z,\psi)\) — vị trí + yaw
Flatness State \(x\) và input \(u\) là hàm đại số của flat output + đạo hàm hữu hạn
Hệ quả planning Plan spline 4D → map ngược ra 12-state + lệnh motor/attitude

2.2. Vì sao cần snap (đạo hàm bậc 4)?

Input mô-men dính đến đạo hàm bậc 4 của vị trí → quỹ đạo phải khả vi tới bậc 4.
Thực dụng: dùng polynomial spline bậc 7 nối qua các waypoint (đủ bậc tự do để khớp vị trí + vận tốc + gia tốc + jerk tại nút).

2.3. Minimum-snap (Mellinger & Kumar)

Tối thiểu \(\displaystyle\int \|\mathrm{snap}\|^2\,dt\) qua các waypoint — bài QP giải nhanh.
Chuẩn công nghiệp cho drone racing / cinematography.

2.4. Pipeline kinh điển

  ┌─────────┐    waypoints thô     ┌──────────┐     σ(t) mượt     ┌─────────┐
  │   RRT   │ ──────────────────► │ min-snap │ ───────────────► │ tracker │
  │ (Lec 8) │                     │   (QP)   │                  │ LQR/PID │
  └─────────┘                     └────┬─────┘                  └────┬────┘
                                       │ flatness map                 │
                                       ▼                              ▼
                              θ,ω,F,M khả thi              u gửi xuống firmware

So sánh trực quan polyline vs smooth:

  polyline (x,y):          min-snap (x,y):
       ●                     ●
       │                    ╱ ╲
       ●───●               ●   ●───●
           │                    ╲
           ●                     ●
  (góc nhọn → a vô hạn)   (cong liên tục → a, jerk hữu hạn)
Tiêu chí Polyline waypoint Min-snap spline
Va chạm hình học Có thể OK Cần check lại sau làm mượt
Attitude khả thi ❌ thường không ✅ nếu ràng buộc QP đúng
Năng lượng / rung Cao (giật) Thấp hơn (snap nhỏ)
Nghĩa với gió Gió + giật = dễ lệch track Quỹ đạo mượt → tracker còn “đầu” chống gió

3. Demo — flatness map (không giải ODE)

"""
Quỹ đạo phẳng: y(t)=sin(t), z(t)=0.5·sin(2t).
Flatness: suy góc nghiêng θ và tổng lực F từ gia tốc — không tích phân ngược.
"""
import numpy as np

m, g = 0.03, 9.81  # ~Crazyflie
print("t    theta(deg)   F(mN)     # F≈mg khi gần hover")
for t in np.linspace(0, 3, 7):
    ay = -np.sin(t)              # ÿ
    az = -2.0 * np.sin(2 * t)    # z̈
    # lực thế giới cần: m*(a + g·e_z); hướng lực = hướng thân
    theta = np.arctan2(-ay, az + g)
    F = m * np.hypot(ay, az + g)
    print(f"{t:3.1f}  {np.degrees(theta):9.2f}  {F * 1e3:8.2f}")

🧪 Kỳ vọng demo: \(\theta\) đổi dấu theo gia tốc ngang; \(F\) (mN) quanh \(mg\approx 294\) khi chuyển động nhẹ, tăng khi vừa nâng vừa tạo lực ngang. Không có vòng odeint nào — attitude “rơi ra” từ đạo hàm.


4. Gắn RL–UAV / đa mục tiêu

  • Action space thông minh: policy ra hệ số / control point spline trong flat space thay vì motor thô → action dễ khả thi, sample-efficient hơn.
  • Năng lượng: snap/jerk lớn ≈ tiêu thụ + rung cao — min-snap là proxy cổ điển trước khi bạn tối ưu energy trong RL.
  • Độ phủ / quỹ đạo: planner đa mục tiêu có thể xuất waypoint thô (A/RRT trên cost map gió–phủ); lớp này chỉ làm bay được*.
  • Gió: flatness giả định model; gió mạnh = residual — chỗ RL/disturbance observer có đất.
  • Baseline paper: RRT+min-snap+LQR là baseline trung thực để so policy.

5. Ưu / nhược

✅ Nên ❌ Không / chống chỉ định ≈ Gần đúng
Quadrotor chuẩn, bay hiền→trung bình Drag lớn / hỏng cánh mà vẫn tin flat map tuyệt đối Dùng flat ref + residual RL
Baseline path→traj cho paper Polyline + claim “đã tôn trọng dynamics” Min-snap rồi check va chạm lại
Action = waypoint/spline 4D Plan 12D sampling khi chưa thử flat Timing lại dưới gió mạnh

Nghĩa với năng lượng / gió / độ phủ: làm mượt giảm giật (năng lượng); không tự tối ưu phủ — phủ nằm ở tầng waypoint/cost map.


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

⚠️ Lỗi hay gặp: Plan polyline gấp khúc rồi bảo “đã tôn trọng dynamics” — chưa, nếu chưa qua lớp làm mượt / flatness map.
⚠️ Quên ràng buộc snap → lệnh mô-men bất khả thi.
⚠️ Làm mượt xong quên collision-check lại (spline có thể “cắt góc” vào vật cản).
⚠️ Nhầm yaw \(\psi\) với attitude đầy đủ — roll/pitch suy ra, không plan tự do như \(\psi\).


7. Checklist

  1. Flat output của quadrotor là gì? Flatness phát biểu điều gì?
  2. Vì sao quỹ đạo vị trí cần mượt tới đạo hàm bậc 4 (snap)?
  3. Vẽ lại pipeline RRT → min-snap → tracking (3 hộp).
  4. Trong nghiên cứu đa mục tiêu của bạn: lớp nào chọn waypoint, lớp nào làm mượt?

Nhớ một câu: Quadrotor plan trong \((x,y,z,\psi)\) đủ mượt — phần còn lại suy ra bằng đại số (flatness), không mò 12D.

🔗 Sang bài sau mang theo: Pipeline decouple (hình học → mượt → track) chỉ đủ khi bay không quá gắt; Lec 10 hỏi đường bay được dưới ràng buộc \(f(x,u)\) và cửa sổ MPC.

  ★ Hình nhớ mãi:
  polyline ●─●─●  →  min-snap ●⌒⌒●⌒⌒●  →  θ,F từ đạo hàm  →  tracker

Trước: Lec08 · Sau: Lec10