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

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


Khung 6 câu hỏi

# 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 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.

Footprint và GSD phụ thuộc độ cao.
Footprint và GSD phụ thuộc độ cao.HiếuTC · gốc
Đồi chè — phủ ảnh / GSD / gió sườn.
Đồi chè — phủ ảnh / GSD / gió sườn.Generated for ebook · seminar OK

0. Mục tiêu học

  1. Giải thích vì sao phép chiếu pinhole làm mất chiều sâu \(Z\).
  2. Phân biệt intrinsic \(K\) và extrinsic \((R,t)\); nêu vì sao attitude UAV làm “phía trước trên ảnh” lệch khỏi trực giác mặt đất.
  3. Liên hệ footprint – độ cao – GSD với tradeoff độ phủ / năng lượng / quỹ đạo trong nghiên cứu đa mục tiêu.
  4. Nói rõ observation ảnh trong MDP: thiếu thông tin, thường cần stack / belief / đặc trưng có cấu trúc.

1. Trực giác

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.


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

2.1. Mô hình pinhole

\[ 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

2.2. Intrinsic và extrinsic

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

2.3. Footprint, độ cao, GSD (gắn coverage)

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)

3. Demo — hai điểm khác \(Z\) cùng một pixel

"""
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ầnu,v xa đều ≈ (0.5, 0.0) — mất \(Z\).
- GSD tăng gần tuyến tính theo h; footprint W cũng tăng theo h.
- 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.


4. Gắn RL–UAV

  • Observation ảnh: thiếu thông tin + thường không Markov nếu chỉ một frame → cần frame stack, RNN, hoặc belief (nối Lec 11–16).
  • Có thể giảm khó bằng preprocess: depth ước lượng, segmentation, optical flow — đổi raw pixel thành đặc trưng có cấu trúc.
  • Paper cần nói rõ: policy nhận RGB thô, depth, hay vector state đã qua ước lượng?
  • Với đa mục tiêu: reward/cost coverage phải gắn GSD/footprint — đừng chỉ “bay qua polygon” mà không nói độ phân giải ảnh.
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

5. Ưu / nhược

✅ 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

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

  1. Coi ảnh “đã chứa đầy đủ state” như trong một số env giả lập (privileged rendering).
  2. Quên calibration (intrinsic) khi dùng hình học (đo góc, ray, GSD tuyệt đối).
  3. Giả định camera cố định kiểu xe tự lái, trong khi UAV xoay rất mạnh → horizon và “nadir” lệch.
  4. Tối ưu coverage theo diện tích polygon mà quên ràng buộc GSD → số liệu “phủ 100%” nhưng ảnh vô dụng.
  5. Train RL với camera lý tưởng không blur / không rung rồi claim sim-to-real vision.

7. Checklist

  1. Vì sao một ảnh mất chiều sâu? Cho ví dụ hai điểm cùng \(u\).
  2. Intrinsic khác extrinsic chỗ nào? Attitude UAV đụng cái nào trước?
  3. Vì sao một frame ảnh thường chưa đủ cho điều khiển ổn định?
  4. Tăng độ cao khảo sát ảnh hưởng footprint, GSD, năng lượng thế nào?
  5. Paper của bạn sẽ khai báo obs ảnh là RGB / đặc trưng / \(\hat{x}\) — cái nào, vì sao?

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