Ebook Robotics · RL–UAV
MỞ ĐẦU — Nghiên cứu của tôi vs. Khóa học này
00A · Nghiên cứu ↔ khóa
Chế độ Slide · phím ← → · F toàn màn · Esc về đọc · S mở slide
00A · Nghiên cứu ↔ khóa
Đọc file này trước tiên. Nó trả lời: tôi đang làm gì, khóa này dạy gì, hai bên khớp ở đâu, hở ở đâu, và tôi làm gì tiếp.
Hồ sơ người học giả định (điều chỉnh nếu khác):
- NCS năm 1.
- Đã có paper về path planning cho UAV trong đô thị và đồi chè.
- Bài toán: tối ưu đa mục tiêu — năng lượng, độ phủ (coverage), chất lượng quỹ đạo, ảnh hưởng gió.
- Trạng thái: chưa mô phỏng động lực học, chưa build UAV thật.Neo ý nghĩa / địa chỉ thực tế: đọc kèm
00C_CaseStudy_VietNam_ThoiSu.md
(đồi chè VN · phố đặc HN/HCM · ĐBSCL · sau bão · thời sự logistics/y tế/dual-use).🖼️ Hình nhanh — hai câu hỏi nằm cạnh nhau:
BẠN HỎI KHÓA HỎI THÊM "Đường nào tốt nhất "Đường đó bay được không? theo nhiều tiêu chí?" Robot biết mình ở đâu không? │ Ai bám theo nó?" │ │ └────────── GHÉP LẠI ────────────────┘ = đóng góp luận án khả thi
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.
PARETO CỦA BẠN (trên giấy)
năng lượng ←—— × ——→ độ phủ
↑ ↑
gió / leo footprint / GSD
│ │
└────────┬───────────┘
▼
┌─────────────────────┐
│ Path / waypoint MOO │ ← bạn đang ở đây
└──────────┬──────────┘
│ còn thiếu vòng kín
┌──────────▼──────────┐
│ Dynamics → Control │ Lec 2–5
│ Plan khả thi / MPC │ Lec 9–10
│ Pose tin cậy (z≠x) │ Lec 11–16
│ Camera cho độ phủ │ Lec 17
└─────────────────────┘
Bạn đang ở lớp path / trajectory planning + tối ưu đa mục tiêu (multi-objective optimization, MOO), tầng ra quyết định hình học – chiến lược, thường trên:
Hai môi trường:
| Môi trường | Đặc trưng chi phối |
|---|---|
| Đô thị | vật cản 3D dày, no-fly zone, hẻm gió giữa tòa nhà (urban canyon), GPS multipath / mất tín hiệu |
| Đồi chè | địa hình dốc, luống chè theo đường đồng mức, cần độ phủ ảnh đồng đều, gió sườn đồi, chiều bay lên/xuống dốc tốn khác nhau |
| Mục tiêu | Bạn thường viết là | Điều cần siết cho luận án |
|---|---|---|
| Năng lượng | tổng chiều dài × hệ số, hoặc hàm chi phí tự đặt | Phải nói rõ mô hình công suất: hover + cruise + leo cao + tăng/giảm tốc |
| Độ phủ | % vùng được quét | Phải gắn với footprint camera, GSD, sidelap/frontlap, chiều luống |
| Quỹ đạo | độ dài, số lần rẽ, độ trơn | Phải gắn với khả thi động lực học (gia tốc, bán kính cua, snap) |
| Gió | hệ số phạt theo hướng gió | Phải phân biệt ground speed vs airspeed: năng lượng phụ thuộc airspeed |
| An toàn / khoảng cách vật cản | clearance | Phải nhất quán với kích thước UAV (C-space) |
Đây là những chỗ reviewer robotics hay chất vấn:
Khóa học này chính là để vá 1, 3(một phần), 4, 5 — và cho bạn ngôn ngữ để nói chuyện với cộng đồng robotics.
Introduction to Robotics (Princeton) = dựng stack tự chủ tối thiểu cho một quadrotor thật, gồm 5 khối:
Dynamics & Control → Planning → Estimation/SLAM → Vision & Learning → Ethics/Safety
(Lec 1–5) (Lec 6–10) (Lec 11–16) (Lec 17–23) (Lec 24)
Tinh thần: mọi thuật toán phải sống được trên máy có quán tính, nhiễu, trễ, tài nguyên hạn chế (lab dùng Crazyflie).
Nói thẳng để bạn không mất thời gian tìm sai chỗ:
| Chủ đề bạn cần | Khóa có dạy? | Bù ở đâu |
|---|---|---|
| Tối ưu đa mục tiêu, Pareto front, NSGA-II/MOEA-D | Không | Deb (NSGA-II), sách MOO; metric: hypervolume, IGD |
| Coverage Path Planning (boustrophedon, cell decomposition) | Gần như không | Choset (coverage survey), LaValle ch. planning |
| Mô hình năng lượng UAV (rotary-wing power) | Không | Zeng & Zhang (energy model UAV), tài liệu propulsion |
| Trường gió / điều hướng trong dòng chảy (Zermelo, Dubins-in-wind) | Không | Zermelo navigation, trochoidal paths |
| Metaheuristic (GA/PSO/ACO) | Không | Tài liệu tối ưu riêng |
| Photogrammetry / GSD / overlap ảnh | Không | Tài liệu UAV mapping / Pix4D-DJI docs |
| Chủ đề khóa dạy mà bạn đang thiếu | Vì sao cần |
|---|---|
| Dynamics & underactuation (Lec 2) | Biết đường nào bay được |
| PD/LQR (Lec 3–5) | Có bộ bám quỹ đạo → mới đo được năng lượng thật |
| A*/RRT (Lec 6–8) | Baseline chuẩn để so với GA/PSO của bạn |
| Differential flatness / min-snap (Lec 9) | Biến polyline thành quỹ đạo mượt khả thi |
| Kinodynamic / MPC (Lec 10) | Ràng buộc khả thi + re-plan khi gió đổi |
| Bayes/EKF/VIO (Lec 11–16) | Đô thị GPS kém: pose không hoàn hảo |
| Vision (Lec 17–22) | Độ phủ thực chất là bài toán camera |
| RL (Lec 23) | Nếu muốn chuyển từ “giải từng map” sang “policy tổng quát” |
Nghiên cứu của bạn: “đường nào tốt nhất theo nhiều tiêu chí?”
Khóa học này: “đường đó có bay được không, robot có biết mình ở đâu không, và ai bám theo nó?”
Ghép hai câu lại chính là đóng góp khả thi cho luận án.
[MOO path của bạn] ──┐
├──► [sim bám quỹ đạo + metric trung thực] ──► paper vững hơn
[stack khóa này] ───┘
| Thành phần trong nghiên cứu của bạn | Lecture liên quan | Bạn lấy được gì cụ thể |
|---|---|---|
| Grid/graph + tìm đường | Lec 6, 7 | C-space (phồng vật cản theo kích thước UAV), Dijkstra/A*, cost map = ngôn ngữ chuẩn cho “đa mục tiêu dạng weighted-sum” |
| Metaheuristic sinh waypoint | Lec 8 | RRT/RRT* làm baseline sampling; so completeness/optimality |
| “Quỹ đạo trơn” | Lec 9 | min-snap + flatness: biến waypoint thành quỹ đạo có \(\theta, F\) khả thi |
| Ràng buộc động lực học | Lec 2, 10 | giới hạn gia tốc/bán kính cua; kinodynamic; MPC re-plan |
| Năng lượng | Lec 2, 5, 9 | năng lượng = tích phân theo thời gian của công suất, cần \(u(t)\) từ controller → cần LQR/PID |
| Gió | Lec 3, 4, 10 | gió = nhiễu; feedback khử nhiễu; MPC/replan khi gió đổi |
| Độ phủ | Lec 17, 19 | footprint camera từ pinhole; detect/segment để xác nhận vùng đã phủ |
| Đô thị GPS kém | Lec 11–16 | \(z \neq x\); EKF/VIO; hệ quả lên planning |
| Muốn học policy tổng quát | Lec 23 | RL đặt đúng tầng + baseline công bằng |
| Viết limitation/safety | Lec 24 | phạm vi claim, fail-safe |
🖼️ Ba gap nhìn một lần:
Gap1 NĂNG LƯỢNG Gap2 GIÓ Gap3 POSE path → ??? → E cost = d×hệ số clearance cố định thiếu controller thiếu v_air/v_gnd thiếu bất định │ │ │ ▼ ▼ ▼ cần LQR + tích phân P cần airspeed trong cost cần belief / clear động (Lec 2,5,9) (Lec 3–4,7,10) (Lec 11–13,16)
Năng lượng thật là
\[
E=\int_0^T P\big(v_{air}(t),\ \dot z(t),\ a(t)\big)\,dt
\]
Muốn có \(v_{air}, a\) thì phải có quỹ đạo theo thời gian và bộ điều khiển bám. Không có controller → chỉ có “chiều dài đường × hằng số”.
Cách vá tối thiểu (2–3 tuần): Lec 2 (env) + Lec 5 (LQR) + Lec 9 (min-snap) → mô phỏng bay theo path → tích phân công suất.
Quan hệ cần dùng:
\[
\mathbf{v}_{ground}=\mathbf{v}_{air}+\mathbf{w}
\]
Năng lượng/công suất phụ thuộc \(\|\mathbf{v}_{air}\|\), còn tiến độ theo bản đồ phụ thuộc \(\mathbf{v}_{ground}\). Do đó cùng một đoạn đường, đi ngược gió và xuôi gió khác nhau về cả thời gian và năng lượng — và hướng bay tối ưu bị “lệch” so với hướng nối hai điểm (bài toán Zermelo).
Cách vá: đưa \(\mathbf{w}\) vào cost cạnh (Lec 7) và vào sim (Lec 3–4 để thấy feedback khử nhiễu), rồi MPC/replan (Lec 10) nếu gió biến thiên.
Đô thị: multipath, che chắn; đồi chè: có thể mất RTK, texture lặp (khó VIO).
Nếu path yêu cầu clearance 0.5 m nhưng sai số định vị 1.5 m → kế hoạch vô nghĩa.
Cách vá: Lec 11–13 (thêm nhiễu pose vào sim, clearance phải ≥ hàm của độ bất định), Lec 16 (drift/VIO).
Mỗi ví dụ theo khuôn: đang có → thiếu gì → dùng lecture nào → làm gì (2–4 tuần) → deliverable → trục R & level L (theo framework 06).
Đang có: path Pareto-optimal trên grid 2D/2.5D, mục tiêu {chiều dài, clearance, số lần rẽ}.
Thiếu: đường có bay được không; năng lượng chưa vật lý.
Lecture: 2 (dynamics), 9 (min-snap/flatness), 10 (kinodynamic), 5 (LQR bám).
Làm:
1. Giữ nguyên planner cũ, xuất waypoint.
2. Làm mượt bằng min-snap (hoặc spline bậc 5–7) với ràng buộc \(v_{max}, a_{max}\).
3. Mô phỏng bám quỹ đạo bằng LQR/PID trên mô hình quadrotor.
4. Báo cáo: tỉ lệ path “khả thi” trước/sau khi thêm ràng buộc, sai số bám (RMS), năng lượng tích phân.
Deliverable: bảng “Pareto trên giấy” vs “Pareto sau khi lọc khả thi” — thường Pareto co lại rõ rệt. Đây là kết quả đăng được và rất dễ bảo vệ.
R: R3 (hybrid plan↔thực thi) · L: L1.
Đang có: phủ theo boustrophedon/zigzag, chọn hướng quét theo cạnh dài của thửa.
Thiếu: ba yếu tố vật lý cùng lúc — (a) chiều luống/đường đồng mức, (b) leo/xuống dốc, (c) gió sườn.
Lecture: 6–7 (cost map có hướng), 2 (năng lượng leo cao), 9 (mượt ở đầu luống), 17 (footprint camera cho độ phủ).
Làm:
1. Rời rạc hóa thửa chè kèm DEM (bản đồ độ cao); cost cạnh gồm: quãng đường, \(\Delta h\) (leo tốn hơn), thành phần gió chiếu lên hướng đi.
2. So 3 chiến lược quét: dọc đường đồng mức, vuông góc đồng mức, theo hướng gió.
3. Ràng buộc độ phủ: footprint từ pinhole (Lec 17) + sidelap/frontlap mục tiêu.
4. Đo: năng lượng, thời gian, % phủ, số lần quay đầu.
Deliverable: kết luận định lượng “quét dọc đồng mức tiết kiệm X% năng lượng ở độ dốc ≥ Y°, nhưng tăng số lần quay đầu Z%”. Rất thực tế cho nông nghiệp.
R: R5 (generalization theo địa hình/gió) hoặc R3 · L: L1.
Đang có: cost cạnh \(= d \times (1+\alpha\cos\phi)\) với \(\phi\) là góc lệch gió.
Thiếu: tách airspeed/ground speed; do đó thời gian và năng lượng không nhất quán.
Lecture: 7 (cost cạnh), 3–4 (feedback dưới nhiễu), 10 (re-plan khi gió đổi).
Làm:
1. Với mỗi cạnh, giải \(v_{air}\) cần thiết để đạt ground speed mong muốn dưới \(\mathbf{w}\).
2. Cost cạnh = \(\int P(v_{air})\,dt\) trên cạnh đó (dùng mô hình công suất, xem Phần 6).
3. So sánh: cost heuristic cũ vs cost dựa airspeed — xem thứ tự Pareto có đổi không.
4. (Mở rộng) gió biến thiên theo ô ⇒ replan kiểu MPC.
Deliverable: hình minh họa đường đi “lệch hướng để lợi gió” (dấu hiệu Zermelo) + bảng sai lệch giữa hai mô hình cost.
R: R3/R5 · L: L1→L2.
Đang có: clearance cố định (ví dụ 1 m) trong hẻm giữa tòa nhà.
Thiếu: pose có sai số; sai số lớn hơn clearance là kế hoạch vô nghĩa.
Lecture: 11–13 (belief, KF), 16 (drift), 6 (C-space).
Làm:
1. Thêm mô hình nhiễu pose vào sim (bias + noise + mất tín hiệu từng đoạn).
2. Đặt clearance động: \(c(t) = c_0 + k\sqrt{\lambda_{\max}(P(t))}\) (nới ra khi bất định lớn).
3. So: clearance cố định vs clearance theo bất định — đo va chạm/near-miss.
Deliverable: “uncertainty-aware path planning” — bài toán rất phù hợp NCS năm 1, ít cần phần cứng, dễ ra số.
R: R2 (obs trung thực) · L: L2.
Đang có: so sánh giữa các metaheuristic.
Thiếu: baseline kinh điển của cộng đồng robotics.
Lecture: 6–8, 10.
Làm: thêm cột A* (weighted cost), RRT* (cùng số lần collision check), và (nếu được) MPC ngắn hạn. Cố định cùng cost function và cùng ngân sách tính toán.
Deliverable: bảng so sánh có kèm thời gian tính toán — nhiều paper metaheuristic bị hỏi đúng chỗ này.
R: R3 · L: L1.
Không dựng Gazebo/PX4 ngay. Làm nhỏ:
Chỉ bấy nhiêu đã đủ đổi chất một paper planning “thuần thuật toán”.
R: R1 · L: L0→L1.
Chỉ nên khi bạn đã có: env + controller + baseline planner + metric. Khi đó câu hỏi RL hợp lý cho hướng của bạn là:
“Thay vì giải lại bài đa mục tiêu cho từng thửa chè / từng khu phố, học một policy sinh hành vi phủ/né tốt trên phân phối bản đồ và phân phối gió.”
Đó là bước từ tối ưu từng trường hợp sang amortized policy — đóng góp rõ ràng, và chính là thông điệp Lec 8 & 23.
R: R3 → R5 · L: L3.
Rotary-wing (nhiều tầng, đầy đủ hơn): dạng thường dùng gồm 3 thành phần — blade profile, induced, parasite:
\[
P(V)=P_0\Big(1+\frac{3V^2}{U_{tip}^2}\Big)
+P_i\Big(\sqrt{1+\frac{V^4}{4v_0^4}}-\frac{V^2}{2v_0^2}\Big)^{1/2}
+\tfrac12 d_0\rho s A V^3
\]
(\(V\) là airspeed.) Nếu không có tham số khí động, hãy dùng bản đơn giản và nói rõ là xấp xỉ:
Xấp xỉ thực dụng:
\[
P \approx P_{hover} + k_1\|v_{air}\|^2 + k_2\max(0,\dot z) + k_3\|a\|^2
\]
Leo cao: cộng \(mg\dot z\) (công cơ học chống trọng lực) chia hiệu suất.
Kết luận thực dụng: độ phủ và năng lượng bị nối với nhau qua độ cao \(h\) — bay cao phủ nhanh nhưng GSD tệ. Đây là một trục Pareto rất “vật lý” cho luận án.
"""
Mục tiêu: cho thấy cost cạnh đổi thứ tự khi tính theo AIRSPEED thay vì chiều dài.
Bối cảnh: một cạnh đi từ p0 -> p1, gió w không đổi, muốn ground speed |vg| = vg_set.
"""
import numpy as np
# --- tham số mô hình công suất xấp xỉ (khai báo rõ trong paper!) ---
P_hover = 120.0 # W, công suất treo (ví dụ)
k1 = 3.0 # W/(m/s)^2, thành phần theo airspeed^2
eta = 0.6 # hiệu suất chuyển đổi cho leo cao
m, g = 2.0, 9.81 # kg, m/s^2
def edge_cost(p0, p1, wind, vg_set=6.0):
"""Trả về (thời gian, năng lượng) của một cạnh dưới gió.
Ý tưởng:
1. hướng đi trên mặt đất do bản đồ quyết định
2. ground velocity = airspeed vector + wind => v_air = v_ground - wind
3. công suất phụ thuộc |v_air| (KHÔNG phải |v_ground|)
"""
p0, p1, wind = map(np.asarray, (p0, p1, wind))
d_vec = p1 - p0
dist_h = np.linalg.norm(d_vec[:2]) # cự ly ngang
dz = d_vec[2] if len(d_vec) > 2 else 0.0 # thay đổi độ cao
if dist_h < 1e-9:
return 0.0, 0.0
dir_g = d_vec[:2] / dist_h # hướng ground mong muốn
v_ground = vg_set * dir_g
v_air = v_ground - wind[:2] # quan hệ then chốt
t = dist_h / vg_set # thời gian đi cạnh
P_cruise = P_hover + k1 * np.dot(v_air, v_air)
P_climb = max(0.0, dz / max(t, 1e-9)) * m * g / eta
E = (P_cruise + P_climb) * t
return t, E
# So sánh 3 cạnh cùng chiều dài 100 m nhưng khác hướng so với gió 5 m/s theo +x
wind = np.array([5.0, 0.0, 0.0])
cases = {
"xuôi gió (+x)": ([0,0,0], [100,0,0]),
"ngược gió (-x)": ([100,0,0], [0,0,0]),
"ngang gió (+y)": ([0,0,0], [0,100,0]),
"xuôi gió + leo 20m": ([0,0,0], [100,0,20]),
}
print(f"{'case':22s} {'time(s)':>8s} {'E(kJ)':>8s}")
for name, (a, b) in cases.items():
t, E = edge_cost(a, b, wind)
print(f"{name:22s} {t:8.1f} {E/1000:8.2f}")
print("\nNhận xét: cùng 100 m, năng lượng khác nhau rõ theo hướng gió và độ leo.")
print("=> cost = chiều dài × hằng số là mô hình quá thô cho claim 'tối ưu năng lượng'.")
Kết quả kỳ vọng khi chạy (gió 5 m/s theo +x, ground speed 6 m/s):
case time(s) E(kJ)
xuôi gió (+x) 16.7 2.05
ngược gió (-x) 16.7 8.05 ← gần 4× xuôi gió
ngang gió (+y) 16.7 5.05
xuôi gió + leo 20m 16.7 2.70
Cách dùng kết quả: đưa hàm edge_cost này vào A*/NSGA-II của bạn thay cho cost chiều dài, rồi báo cáo thứ tự Pareto có đổi hay không. Đó là một đóng góp nhỏ nhưng sạch.
Chú ý con số quan trọng: cùng 100 m và cùng thời gian, ngược gió tốn ~4× năng lượng so với xuôi gió. Một mô hình cost = chiều dài gán cho cả bốn trường hợp cùng một giá — đó chính là lỗ hổng của claim “tối ưu năng lượng” khi chưa có airspeed.
"""So sánh hướng quét coverage: dọc đồng mức vs vuông góc vs theo gió."""
import numpy as np
def coverage_cost(field_w, field_h, swath, heading_deg, slope_deg, wind, vg=5.0):
"""Xấp xỉ: tổng chiều dài luống + chi phí quay đầu + leo dốc + gió.
heading_deg: hướng bay của luống (0 = trục x)
slope_deg : độ dốc địa hình theo trục y (giả định)
"""
th = np.radians(heading_deg)
dir_g = np.array([np.cos(th), np.sin(th)])
# số luống ~ bề rộng vuông góc hướng bay / swath
width_perp = abs(field_w * np.sin(th)) + abs(field_h * np.cos(th))
n_lines = max(1, int(np.ceil(width_perp / swath)))
line_len = abs(field_w * np.cos(th)) + abs(field_h * np.sin(th))
# thành phần leo: nếu bay lệch khỏi đường đồng mức thì phải lên/xuống dốc
climb_frac = abs(np.sin(th)) # 0 nếu dọc đồng mức (giả định)
climb_per_line = line_len * np.tan(np.radians(slope_deg)) * climb_frac
# gió: airspeed cần lớn hơn khi ngược gió (lấy trung bình 2 chiều đi-về)
v_air_1 = np.linalg.norm(vg * dir_g - wind)
v_air_2 = np.linalg.norm(-vg * dir_g - wind)
wind_penalty = 0.5 * (v_air_1**2 + v_air_2**2) / vg**2
total_len = n_lines * line_len
turn_cost = n_lines * 8.0 # mét-tương-đương mỗi lần quay đầu
climb_cost = n_lines * climb_per_line * 3.0 # leo đắt hơn đi ngang
score = (total_len * wind_penalty) + turn_cost + climb_cost
return dict(n_lines=n_lines, total_len=round(total_len),
score=round(score), turns=n_lines)
wind = np.array([4.0, 0.0]) # gió theo +x
for hd, name in [(0, "dọc đồng mức (x)"), (90, "vuông góc (y)"), (45, "chéo 45°")]:
r = coverage_cost(200, 120, swath=12, heading_deg=hd, slope_deg=15, wind=wind)
print(f"{name:20s} luống={r['n_lines']:3d} dài={r['total_len']:6d} m score={r['score']}")
print("\nĐọc kết quả: đổi slope_deg và wind để thấy hướng quét tối ưu dịch chuyển.")
print("Đây là dạng thí nghiệm 'rẻ' nhưng ra được kết luận có ích cho đồi chè.")
Kết quả kỳ vọng khi chạy (thửa 200×120 m, swath 12 m, dốc 15°, gió 4 m/s theo +x):
dọc đồng mức (x) luống= 10 dài= 2000 m score=3360 ← tốt nhất
vuông góc (y) luống= 17 dài= 2040 m score=5121
chéo 45° luống= 19 dài= 4299 m score=9646
Đọc kết quả: quét dọc đồng mức thắng vì (a) ít luống hơn, (b) không phải leo/xuống dốc mỗi luống, (c) gió tác động đối xứng khi đi–về. Đổi slope_deg về 0 và tăng wind để thấy phương án tối ưu dịch chuyển — đó là loại kết luận định lượng bạn có thể đưa vào bài.
Lưu ý học thuật: hai demo trên là mô hình xấp xỉ để làm thí nghiệm nội bộ, không phải mô hình đã hiệu chuẩn. Khi viết bài, hoặc dùng mô hình công suất có nguồn (rotary-wing model), hoặc hiệu chuẩn từ log bay/bench test, và ghi rõ giả định.
| Tuần | Việc | Lecture | Kết quả kiểm chứng được |
|---|---|---|---|
| 1 | Env quadrotor phẳng; hiểu underactuation | 1–2 | Sim rơi/hover đúng kỳ vọng |
| 2 | PD → LQR hover & bám waypoint | 3–5 | Sai số bám RMS; plot |
| 3 | Nạp path cũ vào sim; đo khả thi + năng lượng | 2, 5, 9 | Bảng feasible/infeasible |
| 4 | Min-snap / spline có ràng buộc \(v,a\) | 9 | Pareto trước/sau khi lọc khả thi |
| 5 | Baseline A* + RRT* cùng cost | 6–8 | Bảng so với GA/PSO, kèm thời gian tính |
| 6 | Cost cạnh theo airspeed + gió | 7, 3–4 | Đường “lệch hướng lợi gió” |
| 7 | Coverage: footprint camera, sidelap, hướng quét | 17, 6–7 | %phủ vs năng lượng theo độ cao |
| 8 | Nhiễu pose + clearance theo bất định | 11–13 | Va chạm/near-miss giảm bao nhiêu |
| 9 | Gió biến thiên + replan (MPC nhẹ hoặc replan chu kỳ) | 10 | Success khi gió đổi giữa chuyến |
| 10 | (Tùy chọn) sang PX4/Gazebo hoặc gym-pybullet-drones | — | Lặp lại 1 thí nghiệm chính |
| 11 | (Tùy chọn) RL policy trên phân phối map/gió | 23 | So với planner làm oracle |
| 12 | Viết: stack diagram, baseline, metric, limitation | 24 + 05 |
Draft chương/paper |
Nếu chỉ có thời gian cho 4 tuần: làm tuần 1–4. Đó là phần đổi chất nhiều nhất so với hiện trạng.
Theo framework ở 06_CauChuyen_va_Framework_PhatTrien.md:
Tên task:
Lập quỹ đạo phủ/di chuyển đa mục tiêu cho UAV cánh quay
trong (a) hẻm đô thị và (b) thửa đồi chè dốc, có gió.
Môi trường: [x] sim thuần (giai đoạn này) [ ] sim→lab [ ] outdoor
Ràng buộc cứng:
v_max, a_max, thrust-to-weight, pin/thời gian bay,
no-fly zone, clearance tối thiểu, %phủ tối thiểu, GSD yêu cầu.
Thành công khi:
đạt %phủ ≥ P* và tới goal, không va chạm,
trong ngân sách năng lượng E*, dưới gió tới W* m/s.
Thất bại khi:
va chạm / vượt E* / %phủ < P* / vi phạm a_max.
Claim MUỐN chứng minh:
"Khi tính cost theo airspeed + ràng buộc khả thi động lực học,
tập Pareto và thứ hạng phương án đổi đáng kể so với cost chiều dài;
và hướng quét theo đường đồng mức tiết kiệm năng lượng ở độ dốc lớn."
Claim CỐ Ý KHÔNG chứng minh:
không claim kết quả trên UAV thật ngoài trời;
không claim mô hình công suất đã hiệu chuẩn phần cứng cụ thể;
không claim an toàn khi bay gần người.
Trục chính: R3 (hybrid planning ↔ thực thi/khả thi)
Trục phụ: R2 (observation/pose trung thực)
Level hiện tại: L0 → Mục tiêu 12 tuần: L2 (có thể chạm L3)
Trả lời được ba câu này bằng số liệu từ sim, bạn đã ra khỏi giai đoạn “thuật toán trên giấy”.
06_CauChuyen_va_Framework_PhatTrien.md Lectures/README.md 05_BroaderTopics_Capstone.md