অধ্যায়Phase 6 · মডার্ন AI ভিশন
6.6 15 মিনিট পড়া
SLAM Introduction
Simultaneous localization & mapping।
🎬 গল্প দিয়ে শুরু
Robot vacuum আপনার ঘরের map কীভাবে বানায় — অথচ GPS নেই? Tesla, drone, AR headset — সবাই করে SLAM (Simultaneous Localization And Mapping)। নিজে কোথায় আছে সেটাও জানে, পরিবেশের map-ও বানায় — একই সাথে।
সমস্যাটা কী?
- Localization জানতে map লাগে।
- Map বানাতে নিজের position জানতে হয়।
- দুটোই অজানা — চিকেন-এন্ড-এগ। SLAM দুটো একসাথে solve করে।
SLAM-এর pipeline (Visual SLAM)
text
Frame → Feature extract (ORB/SIFT)
→ Match with previous frame
→ Estimate motion (Essential matrix, PnP)
→ Triangulate new 3D points
→ Bundle Adjustment (BA) — refine pose + points
→ Loop closure detection — পুরনো জায়গা চেনা, drift ঠিক করামূল component
- Frontend — feature tracking, frame-to-frame motion।
- Backend — pose graph optimization (g2o, Ceres)।
- Loop Closure — Bag-of-Words (DBoW) দিয়ে revisit detection।
- Map representation — sparse point cloud, dense mesh, বা occupancy grid।
Sensor অনুযায়ী SLAM
- Monocular — সস্তা, কিন্তু scale ambiguous।
- Stereo / RGB-D — সঠিক scale পায়।
- LiDAR SLAM — outdoor, autonomous car (LOAM, Cartographer)।
- Visual-Inertial (VIO) — IMU যোগ করে robust (ARKit, ARCore)।
জনপ্রিয় open-source system
- ORB-SLAM3 — feature-based, mono/stereo/RGB-D/inertial।
- RTAB-Map — RGB-D ও LiDAR, ROS-এ ready।
- Kimera — semantic mesh + VIO।
- DROID-SLAM — deep learning হাইব্রিড।
মিনি demo — ORB দিয়ে frame-to-frame motion
python
visual_odometry.py (simplified)
import cv2, numpy as np
orb = cv2.ORB_create(2000)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
prev = None
cap = cv2.VideoCapture("drive.mp4")
while True:
ok, f = cap.read()
if not ok: break
g = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
kp, des = orb.detectAndCompute(g, None)
if prev is not None:
m = sorted(bf.match(prev["des"], des), key=lambda x: x.distance)[:200]
p1 = np.float32([prev["kp"][x.queryIdx].pt for x in m])
p2 = np.float32([kp[x.trainIdx].pt for x in m])
E, _ = cv2.findEssentialMat(p1, p2, focal=700, pp=(640, 360))
_, R, t, _ = cv2.recoverPose(E, p1, p2)
print("motion:", t.flatten())
prev = {"kp": kp, "des": des}এটি SLAM নয়, VO
এই snippet শুধু Visual Odometry — pose track করে কিন্তু global map ও loop closure নেই। পূর্ণ SLAM-এর জন্য ORB-SLAM3 ব্যবহার করুন।
ব্যবহারিক ক্ষেত্র
- AR/VR — virtual object world-এ stable রাখা।
- Drone autonomous flight (GPS-denied indoor)।
- Self-driving car localization।
- Robot vacuum, warehouse robot।
- Archaeology / 3D scanning।
প্র্যাকটিস টাস্ক
- KITTI dataset-এ ORB Visual Odometry চালিয়ে trajectory plot করুন।
- Phone video দিয়ে ORB-SLAM3 চালিয়ে room map বানান।
- RTAB-Map ROS-এ চালিয়ে RGB-D camera-তে 3D mesh তৈরি করুন।