Lecture 15 — Mapping (Occupancy Grid & Log-Odds)

Chương C** · biết pose → xây map — tô free / occupied từng ô

Lecture 15 — Mapping (Occupancy Grid & Log-Odds)

Chương C · biết pose → xây map — tô free / occupied từng ô


Khung 6 câu hỏi

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

Tia cảm biến cập nhật log-odds occupancy.
Tia cảm biến cập nhật log-odds occupancy.HiếuTC · gốc
Coverage grid thửa chè ≠ occupancy.
Coverage grid thửa chè ≠ occupancy.Generated for ebook · seminar OK

🇻🇳 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.

0. Mục tiêu học

  1. Hiểu occupancy grid và cập nhật log-odds.
  2. Đọc inverse sensor model: free dọc tia, occupied tại hit.
  3. Biết map nuôi planning/reward thế nào.
  4. Cảnh báo: pose lệch → map bôi nhòe (cần Lec 16).

1. Trực giác

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

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

2.1. Occupancy grid

  • Chia không gian thành ô. Mỗi ô \(i\) giữ \(p(m_i=1)\) (occupied).
  • Làm việc trên log-odds để cập nhật ổn định số:
    \[ l_{t,i} = l_{t-1,i} + \underbrace{\text{inverse\_sensor\_model}(z_t,x_t,i)}_{\text{bằng chứng mới}} - l_0 \]
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)

2.2. Vì sao log-odds?

  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}} \]

2.3. Pipeline

  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

2.4. Map khác ngoài occupancy

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


3. Demo — log-odds một ô + tia giả

"""
(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) p tă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 #.


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

  • Occupancy / cost map → input planner Module 2 và reward (phạt gần vật cản).
  • Map cập nhật online → môi trường non-stationary với RL: thực dụng dùng local map trượt hoặc đóng băng mapper khi đánh giá policy.
  • Độ phủ: lưới coverage riêng (visited/observed) khác occupancy — metric paper cần tách.
  • Gió: cost map gió cập nhật từ forecast/đo — cùng cơ chế “ô có giá”, khác physical occupied.
  • Năng lượng: map chưa chắc → bay lại khảo sát tốn pin; exploration–exploitation trên map entropy.
  • Sai map (ảo ảnh tường) → policy “né bóng ma” hoặc đâm lỗ trống.
  • GPS urban: nếu posê nhảy mà vẫn tô map → bôi nhòe; cần dừng mapping hoặc chuyển SLAM.

5. Ưu / nhược

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


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

⚠️ 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.


7. Checklist

  1. Tia xuyên không khí / chạm vật: log-odds các ô đổi ra sao?
  2. Vì sao dùng log-odds thay vì nhân xác suất thô?
  3. Map online tạo khó khăn gì cho huấn luyện RL?
  4. Trong paper coverage, bạn đo “ô đã phủ” theo GT hay theo map ước lượng?

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 map → SLAM (gà–trứng + loop closure + VIO).

  ★ Hình nhớ mãi:
  ●──···──█   →   ...###  (log-odds += evidence)

Trước: Lec14 · Sau: Lec16