Ebook Robotics · RL–UAV
Lecture 15 — Mapping (Occupancy Grid & Log-Odds)
Chương C** · biết pose → xây map — tô free / occupied từng ô
Chế độ Slide · phím ← → · F toàn màn · Esc về đọc · S mở slide
Chương C** · biết pose → xây map — tô free / occupied từng ô
Chương C · biết pose → xây map — tô free / occupied từng ô
| # | Câu hỏi | Trả lời ngắn |
|---|---|---|
| 1 | Tại sao cần? | Không map thì không plan dài hạn / không có cost map tránh vật cản bền. |
| 2 | So với cái khác? | Vs localization: đảo vai trò. Vs SLAM: giả định pose đủ tốt. Vs semantic map: occupancy là lớp hình học tối thiểu. |
| 3 | Giải quyết gì & thế nào? | Occupancy grid + cập nhật log-odds theo inverse sensor model. |
| 4 | Kết quả ra sao? | Lưới free/occupied/unknown → planner (Ch.B) & reward RL. |
| 5 | Nên dùng khi nào? | Xây cost map local/global; phạt va chạm theo map; coverage tracking. |
| 6 | Không nên khi nào? | Pose đang rất lệch (map nhòe → cần SLAM); coi map online stationary với RL mà không xử lý. |
🖼️ Hình nhanh: tia cảm biến tô map (cartoon log-odds)
```
robot ●─────·········████ vật
free↑ hit↑
ô trên tia: l giảm (free) ô trúng: l tăng (occupied)
ngoài tầm: giữ nguyên (unknown)lưới: ....####.... . free # occupied ? unknown
..##....##..
```
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.
🇻🇳 Chuyện thật (sân A/C): Quét thửa chè đồi hoặc ô lúa ĐBSCL — occupancy grid tô free/occupied (bờ thửa, cột, tán chè) bằng log-odds theo tia cảm biến.
Coverage / mission grid lại đếm ô đã “ăn” ảnh chưa: trùng lưới, khác sổ điểm — đã bay qua ≠ đã an toàn hình học.
Lẫn hai lớp = báo phủ xong mà vẫn suýt đụng bờ, hoặc né vật cản nhưng bỏ sót khuyết luống. Pose lệch thì map “bôi nhòe” — đừng đổ tội thuật tô màu.
Chốt: occupancy ≠ coverage; log-odds xây cost map, lớp phủ nuôi %mission — đừng gộp một.../00C.
Robot hút bụi lần đầu chạy quanh nhà: vừa đi vừa tô tường, ghế, cửa.
Lần sau đi khôn hơn vì đã có map. Mapping = ước lượng bản đồ \(m\) khi pose
được xem là biết (hoặc đủ tốt).
Với UAV coverage: mỗi ô “đã quan sát / đã phủ” là một lớp map khác (mission map)
nằm trên occupancy — đừng lẫn “đã bay qua” với “ô không có vật cản”.
biết mình ở đâu (posê đủ tốt)
│
▼
quét lidar/depth ──► tô từng ô free / occupied / ?
│
▼
map dùng cho A* / reward / coverage
| Vùng trên tia | Cập nhật điển hình |
|---|---|
| Từ sensor → điểm hit | Tăng free (\(l\) giảm) |
| Ô bị hit | Tăng occupied (\(l\) tăng) |
| Ngoài tầm / bị che | Giữ nguyên (unknown) |
xác suất thô: nhân lặp → dễ bão hòa số / mất đối xứng quanh 0.5
log-odds: cộng bằng chứng → ổn định, đối xứng qua l=0 (p=0.5)
\[ l = \log\frac{p}{1-p},\qquad p = 1 - \frac{1}{1+e^{l}} \]
posê x_t (giả định tốt) + đo z_t (depth/lidar/stereo)
│
▼
┌────────────────────┐
│ inverse sensor mdl │──► cộng log-odds từng ô
└─────────┬──────────┘
▼
occupancy / cost map
│
┌─────────┼─────────┐
▼ ▼ ▼
A*/RRT reward coverage
| Dạng map | Dùng khi |
|---|---|
| Occupancy grid | Tránh va chạm 2D/3D voxel |
| Cost map (gió, no-fly) | Đa mục tiêu Lec 7 |
| Landmark thưa | Marker / feature SLAM |
| Semantic | “cây chè / nhà” — tầng trên |
Đừng gộp một ký hiệu cho cả ba lớp: an toàn (occupancy) · mission (coverage) · chi phí (gió/năng lượng).
"""
(1) Một ô: nhiều lần 'thấy occupied' → p tăng (bão hòa mềm).
(2) Cartoon 1D: tia từ gốc hit tại ô 5 → free 1..4, occ 5.
"""
import numpy as np
def p_to_l(p):
return np.log(p / (1 - p))
def l_to_p(l):
return 1.0 - 1.0 / (1.0 + np.exp(np.clip(l, -20, 20)))
# --- (1) một ô ---
l = p_to_l(0.5)
print("bắt đầu p=", round(l_to_p(l), 3))
for evidence in [0.7, 0.8, 0.75]:
l = l + p_to_l(evidence) - p_to_l(0.5)
print("sau đo p≈", round(l_to_p(l), 3))
# --- (2) lưới 1D 8 ô, prior 0.5 ---
L = np.zeros(8) # log-odds, 0 ↔ p=0.5
hit = 5
l_free = p_to_l(0.3) - p_to_l(0.5)
l_occ = p_to_l(0.8) - p_to_l(0.5)
for i in range(1, hit):
L[i] += l_free
L[hit] += l_occ
probs = l_to_p(L)
chars = ["#" if p > 0.6 else ("." if p < 0.4 else "?") for p in probs]
print("cartoon:", "".join(chars), " p=", np.round(probs, 2))
🧪 Kỳ vọng demo: phần (1)
ptăng dần (ví dụ ~0.7 → ~0.9+); phần (2) chuỗi kiểu?.…#??— các ô trước hit thiên free (.), ô hit thiên#.
| ✅ Nên | ❌ Không | ≈ Gần đúng |
|---|---|---|
| Log-odds + inverse sensor rõ | Cộng xác suất thô lặp lại | Bayesian approx khác |
| Local map cho realtime | Mapping thuần khi pose đang trôi mạnh | SLAM (Lec 16) |
| Tách coverage grid vs occupancy | Coi mọi ô độc lập rồi kỳ vọng map mượt như CAD | Filter không gian nhẹ |
| Lớp map | ✅ Nghĩa | ❌ Nhầm lẫn hay gặp |
|---|---|---|
| Occupancy | Va chạm / free space | Coi unknown = free |
| Coverage | Mission đã quan sát | Đồng nhất với occupancy |
| Cost (gió) | Phạt mềm bay qua | Coi như tường cứng |
Nghĩa với năng lượng / gió / độ phủ: occupancy = an toàn; coverage = mission; gió = cost — ba lớp riêng.
⚠️ Lỗi hay gặp: Cộng xác suất trực tiếp thay vì log-odds.
⚠️ Xây map khi pose lệch → bôi nhòe; cần SLAM không phải mapping thuần.
⚠️ Quên ô unknown vẫn nguy hiểm (chưa phải free).
⚠️ Dùng map online non-stationary mà đánh giá RL như env đứng yên.
⚡ Nhớ một câu: Mapping tô từng ô bằng log-odds — free dọc tia, occupied tại hit; pose lệch thì map nhòe.
🔗 Sang bài sau mang theo: Khi không biết chắc pose và map → SLAM (gà–trứng + loop closure + VIO).
★ Hình nhớ mãi:
●──···──█ → ...### (log-odds += evidence)