본문 바로가기
카테고리 없음

1.3.1 SLAM의 주요 구성 요소 예제

by 프레스러쉬 2025. 4. 5.

SLAM(Simultaneous Localization and Mapping)의 주요 구성 요소는 아래와 같습니다:


✅ 주요 구성 요소

  1. 센서 입력 (Sensors)
    • 카메라, LiDAR, IMU 등을 통해 주변 환경 정보 수집
  2. 특징 추출 및 매칭 (Feature Extraction & Matching)
    • 이미지 또는 포인트 클라우드에서 특징점을 추출하고 매칭
  3. 로컬라이제이션 (Localization)
    • 현재 위치 추정 (예: 카메라 포즈 추정)
  4. 맵핑 (Mapping)
    • 환경의 맵 생성 (예: 점군, 격자맵)
  5. 최적화 (Optimization)
    • 위치 및 맵 데이터를 정합되게 조정

🧪 예제 코드: Visual SLAM의 핵심 (Python + OpenCV 사용)

아래는 카메라 영상으로부터 특징점을 추출하고, 카메라 움직임을 추정하는 기본적인 Visual SLAM 흐름입니다.

import cv2
import numpy as np

# ORB 특징 추출기 초기화
orb = cv2.ORB_create()

# 카메라 영상 불러오기
cap = cv2.VideoCapture(0)  # 웹캠 사용

ret, prev_frame = cap.read()
prev_gray = cv2.cvtColor(prev_frame, cv2.COLOR_BGR2GRAY)
prev_kp, prev_des = orb.detectAndCompute(prev_gray, None)

while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    kp, des = orb.detectAndCompute(gray, None)

    # 매칭 수행
    bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
    matches = bf.match(prev_des, des)
    matches = sorted(matches, key=lambda x: x.distance)

    # 매칭된 포인트 시각화
    match_img = cv2.drawMatches(prev_frame, prev_kp, frame, kp, matches[:20], None, flags=2)

    cv2.imshow("SLAM Feature Matching", match_img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

    prev_gray = gray
    prev_kp = kp
    prev_des = des
    prev_frame = frame

cap.release()
cv2.destroyAllWindows()


🧠 이 코드에서 SLAM의 구성 요소가 어떻게 반영되었나?

구성 요소 구현 위치

센서 입력 cap = cv2.VideoCapture(0) : 실시간 영상 캡처
특징 추출 orb.detectAndCompute() : ORB 특징 추출
매칭 BFMatcher : 특징점 간의 대응 관계 계산
로컬라이제이션 간단한 경우, 카메라 이동 추정을 위해 매칭점 활용 가능
맵핑 이 코드는 단순 시각화까지, 전체 맵 구성은 포함되어 있지 않음