Ebook Robotics · RL–UAV
Lecture 17 — Nhập môn thị giác robot
Chương D** · observation trở thành ảnh — và ảnh mất chiều sâu
Chế độ Slide · phím ← → · F toàn màn · Esc về đọc · S mở slide
Chương D** · observation trở thành ảnh — và ảnh mất chiều sâu
Chương D · observation trở thành ảnh — và ảnh mất chiều sâu
| # | Câu hỏi | Trả lời ngắn |
|---|---|---|
| 1 | Tại sao cần? | Nhiều task UAV chỉ có camera; path + coverage trên đồi chè không phải lúc nào cũng có state đầy đủ / LiDAR. |
| 2 | So với cái khác? | Vs vector state/VIO: giàu ngữ nghĩa nhưng thiếu \(Z\) tường minh, một frame thường không Markov. Vs LiDAR: rẻ–nhẹ hơn, hình học yếu hơn. |
| 3 | Giải quyết gì & thế nào? | Mô hình pinhole; tách intrinsic \(K\) / extrinsic \((R,t)\); hiểu footprint ↔ độ cao ↔ GSD cho tradeoff phủ–năng lượng. |
| 4 | Kết quả ra sao? | Biết giới hạn ảnh → chọn flow / CNN / depth (Lec 18–22) làm obs RL; biết bay thấp hơn = GSD tốt hơn nhưng tốn pin / thời gian. |
| 5 | Nên dùng khi nào? | GPS-denied có camera; detection/servoing; image-based RL; khảo sát phủ mặt đất. |
| 6 | Không nên khi nào? | Coi 1 frame RGB = full state; quên calibration khi dùng hình học; giả định camera “xe tự lái cố định” trong khi UAV nghiêng mạnh. |
🖼️ Hình nhanh: Một điểm ảnh không biết gần hay xa — và bay cao hơn thì mỗi pixel “ăn” nhiều mét đất hơn.
Thế giới 3D Ảnh 2D Đồi chè (nhìn từ trên) ★ (1,0,2) ─┐ ┌──────── footprint ────────┐ ★ (2,0,4) ─┼─► cùng u=0.5 (mất Z) │ ░░░ chè ░░░ chè ░░░ │ └─ f·X/Z │ ▲ GSD = mét/pixel │ │ bay cao ↑ → footprint ↑ │ │ → GSD xấu hơn │ ★ Một pixel ≠ một state. Độ cao quyết định độ phủ vs độ nét vs năng lượng.🇻🇳 Chuyện thật (sân A): Bay cao trên đồi chè Mộc Châu thì footprint rộng, phủ xong thửa nhanh — nhưng mỗi pixel “ăn” cả mét đất: khuyết luống, chồi non, hoặc lỗ trống trở thành một vệt xám mờ.
Hạ độ cao thì GSD đẹp, phân loại được — pin và thời gian bay lại lên bàn cân với năng lượng / quỹ đạo.
Chốt: độ cao không phải nút “zoom”; nó là tradeoff phủ–độ nét–E. Chi tiết:../00C.
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.
Camera không trả về “hàng chè” hay “lối đi trống”. Nó chỉ trả về một bảng số — cường độ sáng từng pixel. Não người (hoặc thuật toán) phải dịch bảng số đó thành cạnh, dòng chảy, vật thể, khoảng cách gần đúng.
Hình dung bạn bay khảo sát đồi chè: cùng một pixel giữa khung hình có thể là ngọn chè cách 8 m hoặc rìa đồi cách 40 m — nếu chỉ nhìn một ảnh tĩnh. Đó chính là mất chiều sâu.
Thêm thực tế UAV: ảnh bị rung, đổi sáng giữa mây/nắng, motion blur khi quay gấp — khó hơn ảnh tĩnh ImageNet. Policy “ăn” RGB thô mà không hiểu giới hạn này sẽ học được pattern giả trong sim.
Với path đa mục tiêu của bạn: muốn độ phủ cao và GSD đủ để nhận hàng chè → thường phải bay thấp / dày quỹ đạo → năng lượng và thời gian tăng. Camera không chỉ là “sensor RL”; nó định nghĩa ràng buộc hình học của cost coverage.
\[ u = f \frac{X}{Z}, \qquad v = f \frac{Y}{Z} \]
Điểm 3D \((X,Y,Z)\) chiếu xuống ảnh \((u,v)\). Chiều sâu \(Z\) bị mất trong phép chiếu → suy 3D từ một ảnh 2D là bài ill-posed, trừ khi có thêm giả định kích thước vật, stereo, chuyển động (parallax), hoặc học từ dữ liệu.
Thế giới (X,Y,Z)
│ phép chiếu pinhole (chia cho Z)
▼
Ảnh (u,v) ★ mất chiều sâu
│
├─► vision cổ điển: cạnh, flow, hình học ray
└─► learning: CNN → bbox / depth / semantics
│
▼
tín hiệu cho control / planning / RL policy
| Khái niệm | Ký hiệu | Thuộc về | UAV cần nhớ |
|---|---|---|---|
| Intrinsic | \(K\) (tiêu cự, tâm ảnh, méo) | Chiếc camera | Calibration sai → góc/ray sai → servoing lệch |
| Extrinsic | \((R,t)\) | Pose camera trong thế giới | Camera gắn thân → xoay theo attitude; “xuống dưới trên ảnh” ≠ “xuống đất” khi nghiêng |
Với camera nhìn xuống (nadir) gần đúng:
\[ \text{GSD} \propto \frac{h}{f},\qquad \text{footprint} \propto h \cdot \text{FOV} \]
| Bay… | Footprint / độ phủ mỗi shot | GSD (chi tiết) | Năng lượng / thời gian khảo sát |
|---|---|---|---|
| Cao hơn | Lớn hơn → ít waypoint hơn | Xấu hơn (mỗi pixel = nhiều mét) | Thường tiết kiệm pin hơn nhưng mất chi tiết hàng chè |
| Thấp hơn | Nhỏ hơn → cần quỹ đạo dày | Tốt hơn | Tốn năng lượng + rủi ro gió gần tán cây |
Độ cao h
│
│ footprint rộng footprint hẹp
│ GSD thô GSD mịn
│ ╲ ╱
│ ╲ ╱
│ ╲ TRADEOFF ╱
│ ╲ phủ↔năng ╱
└─────────────★────────────► trục đa mục tiêu của bạn
(coverage · energy · trajectory · wind)
"""
Demo Lec17: phép chiếu pinhole mất chiều sâu + GSD tỉ lệ độ cao.
Chạy độc lập bằng numpy.
"""
import numpy as np
f = 1.0 # tiêu cự chuẩn hóa (đơn vị ảnh)
# Hai điểm thẳng hàng với tâm quang: Z khác nhau → cùng u
P_near = np.array([1.0, 0.0, 2.0]) # (X, Y, Z)
P_far = np.array([2.0, 0.0, 4.0])
def project(P, f):
X, Y, Z = P
return f * X / Z, f * Y / Z
u1, v1 = project(P_near, f)
u2, v2 = project(P_far, f)
print("u,v gần:", (u1, v1), "| u,v xa:", (u2, v2))
print("→ Cùng pixel không suy được Z từ một ảnh.")
# GSD proxy: mét/pixel ~ h / f (f cố định)
heights = np.array([10.0, 20.0, 40.0]) # mét
f_px = 800.0 # tiêu cự theo pixel (ví dụ)
gsd = heights / f_px # mét / pixel (xấp xỉ)
footprint_w = 2 * heights * np.tan(np.deg2rad(35)) # FOV nửa góc 35°
print("h (m): ", heights)
print("GSD ~ h/f: ", np.round(gsd, 4), "m/px")
print("footprint W: ", np.round(footprint_w, 1), "m")
print("→ Bay cao: phủ rộng, chi tiết kém — tradeoff coverage/energy.")
🧪 Kỳ vọng demo:
-u,v gầnvàu,v xađều ≈(0.5, 0.0)— mất \(Z\).
-GSDtăng gần tuyến tính theoh;footprint Wcũng tăng theoh.
- Kết luận mang sang paper: chọn độ cao khảo sát = chọn điểm trên Pareto phủ–năng lượng.
| Obs cho policy | Ưu | Nhược với UAV của bạn |
|---|---|---|
| RGB thô | Không cần pipeline phụ | Sample đắt; domain gap lớn; mất \(Z\) |
| Flow / depth / seg | Inductive bias; dễ debug | Phụ thuộc chất lượng estimator |
| \(\hat{x}\) từ VIO + goal | Ít sample; nối Module 3 | Mất ngữ nghĩa hàng chè nếu không có vision |
| ✅ Nên | ❌ Không nên | |
|---|---|---|
| Dùng camera làm sensor chính | GPS-denied, tracking, coverage ảnh | Cần đo khoảng cách cứng mà không có stereo/flow/depth |
| Pinhole + \(K\) | Hình học ray, servoing, GSD | Bỏ calibration rồi vẫn tin góc đo được |
| Bay cao để phủ nhanh | Khi GSD vẫn đủ task | Khi cần phân biệt chi tiết hàng chè / bệnh lá |
| Nghĩa với năng lượng / gió / độ phủ | Footprint↑ tiết kiệm thời gian bay | Gió mạnh + bay thấp gần tán → rủi ro; bay cao mất chi tiết |
⚡ Nhớ một câu: Camera cho bảng sáng 2D — mất \(Z\); độ cao chọn footprint–GSD–pin cùng lúc.
🔗 Sang bài sau mang theo: Pixel không có vận tốc tường minh → Lec 18 ước lượng optical flow và time-to-contact từ chuỗi ảnh.
Trước: Lec16 — SLAM · Sau: Lec18 — Optical Flow