Mapping
Mapping은 로봇이 센서를 이용해 주변 환경을 계측하여 지도를 생성하는 과정을 의미한다.
Mapping 방식
LiDAR 기반
- 평면상 데이터를 획득하여 2D 지도 생성
- 3D 포인트 클라우드를 활용하여 지도 생성
- imu및 오도메트리 정보를 융합하여 사용

RGB-D 카메라 기반
- 카메라를 활용하여 컬러 정보와 깊이 데이터 획득
- 특징점(feature points)을 추출하여 로봇 위치와 지도 생성

Occupancy Grid
Occupancy Grid는 로봇이 주변 환경을 인식할 때, 공간을 격자(Grid)로 나누어 지도를 인식하는 방식이다.
각 셀의 상태는 확률적으로 표현된다.
| 상태 | 설명 | 확률 |
|---|
| 빈 공간 (Free Space) | 로봇이 이동할 수 있는 영역 | 0 (0%) |
| 장애물 (Obstacle) | 로봇이 이동할 수 없는 장애물 | 1 (100%) |
| 미탐색 영역 (Unknown) | 아직 센서가 확인하지 못한 지역 | 0.5 (50%) |
ROS에서는 Occupancy Grid를 pgm + yaml 파일 형태로 저장한다.

image: map.pgm
mode: trinary
resolution: 0.1
origin: [-4.2, -9.1, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25
image
▫ 맵 데이터가 저장된 이미지 파일 이름
mode
▫ 맵 데이터를 저장하는 방식
▫ 맵을 세가지 값(흰색, 검정, 회색)으로 표현
resolution
▫ 맵의 해상도
▫ 각 격자 한 칸 크기가 0.1m
▫ 100 x 100 크기 맵의 실제 크기는 10 x 10
origin
▫ 맵의 원점으로 왼쪽 아래에서 시작
negate
▫ 맵 색상 반전 여부 결정
▫ 0은 유지, 1은 색상 반전
occupied_thresh
▫ 픽셀을 장애물로 간주하는 임계값
▫ 65% 이상 어두운 부분은 장애물로 인식
fresh_thresh
▫ 픽셀을 빈공간으로 간주하는 임계값
▫ 25% 이상 밝은 부분은 이동 가능
DWA(Dynamic Window Approach)

로봇이 현재 속도와 회전속도를 조합하여 최적의 속도를 계산하고 장애물을 회피하면서 목표 지점까지 이동하는 경로 계획(Patg Planning)알고리즘이다. 경로를 전체적으로 미리 계산하는 방식(Global Planning)이 아닌, 실시간으로 이동 방향을 결정하는 로컬(Local Planning) 방식이다.
◼ 동작 과정
- 로봇이 가질 수 있는 속도 조합 생성
- 속도 공간 내에서 로봇이 현재 시점에서 가질 수 있는 실현 가능한 속도 범위(Window) 결정 - 로봇의 동역학(가속도, 감속도 등), 충돌 회피, 목표 지점까지 거리 고려
- 세가지 평가 항목을 계산하여 최적의 속도 선택
- 최적의 속도 선택 및 이동
이를 통해 로봇은 주어진 속도 범위 내에서 가장 좋은 경로를 선택한다.
◼ 장점
- 실시간 장애물 회피 가능
- 로봇의 동역학을 고려하여 부드러운 이동 가능
- 복잡한 지도 정보 없이 사용 가능하므로 빠른 계산 가능
◼ 단점
- 전체 경로를 모르기 때문에 장애물이 많은 곳은 문제 발생 가능
- 속도가 너무 빠르면 장애물 피하기 어려움 - 센서가 장애물 감지하기 전인데 로봇이 가까이 갔을 경우
SLAM 패키지
ROS에서는 Mapping을 위해 다양한 SLAM 패키지가 제공된다. 2D SLAM에는 대표적으로 Gmapping, slam_toolbox, Cartographer가 있다.
Particle Filter SLAM (Gmapping)
ROS1에서 사용되었던 Particle Filter 기반 SLAM 알고리즘으로, 확률적 입자 필터(MCL)를 사용하여 로봇의 위치를 추정하고 2D지도를 작성한다.

◼ 동작 과정
- sensor_node에서 gmapping으로 센서 데이터 전송
- 로봇 teleop 실행 → 로봇 core에서 tf 생성 및 gmapping에 전송
- 로봇의 각 위치가 노드로 추가되고 위치간 관계를 엣지로 저장
- tf와 scan으로 맵 생성 → map_server에 저장
- particle에서는 초기화 → 예측 → 보정 → 위치추정 → 재샘플링 수행
◼ 장점
- 가벼워서 저서양 컴퓨터에서도 실행 가능
- LiDAR 센서만으로 동작 가능
◼ 단점
- 루프 클로저 기능이 없어 장시간 SLAM 시 지도 왜곡 발생 가능
- 입자 필터 방식이라 센서 노이즈에 취약
Pose graph SLAM은 로봇의 시간별 이동 위치(Pose)를 그래프 노드(Node)로 저장하는 방식이다. 이동한 위치(거리&방향) 간의 관계는 그래프의 엣지(edge)로 저장된다.

◼ 동작 과정
- 로봇이 처음 위치(x0)에서 출발
- motion constraint만큼 이동 → x1 노드 추가
- 로봇의 각 위치가 노드로 추가되고 위치간 관계를 엣지로 저장
- 루프 클로저 → 그래프 최적화
◼ 장점
- 리소스 사용이 상대적으로 적음
- 상대적으로 설정이 간단
◼ 단점
- 단일 센서 데이터에 의존하여 센서의 성능이 맵핑의 정확도에 영향
- 센서 데이터(배경, 물체 등)을 저장하지 않아 지도 정밀도가 낮음 → 위치를 계산하는데만 사용
Grpah-base SLAM (Cartographer)
로봇의 위치뿐만 아니라 주변 환경에서 센서가 본 정보까지 함께 저장하는 방식을 사용한다. 센서 데이터까지 함께 저장하므로 지도 정밀도 높다.

◼ 동작 과정
- 로봇이 처음 위치(x0)에서 출발
- motion constraint만큼 이동하면서 LiDAR 스캔 → x1 노드 추가 + 센서 데이터 저장
- 로봇의 각 위치가 노드로 추가되고 위치간 관계, 센서 데이터를 엣지로 저장
- 루프 클로저 → 그래프 최적화
◼ 장점
- 센서 데이터를 직접 저장하므로 고정밀 지동 생성 가능
- 멀티 스레드 처리를 지원하여 대규모 및 복잡한 환경에서 실시간 맵핑 가능
- 다양한 센서(imu, LiDAR 등) 융합 가능
◼ 단점
- 연산량이 많아 CPU및 메모리 사용량이 높음
- 여러 센서를 사용하므로 설정이 복잡함
📌 그래프에서 노드(Node)란?
📌 그래프에서 엣지(Edge)란?
- 두 노드(로봇) 사이의 관계(제약, Constraint)
- 엣지는 "노드A에서 B로 90도 회전후 1m 이동" 라는 정보를 저장한다.
📌 SLAM에서 엣지의 역할
- 로봇의 위치를 지속적으로 연결하여 이동 경로 기록
- 루프 클로저에서 그래프를 최적화하여 지도 왜곡 감소
- 센서 데이터 기반으로 위치 오차 보정
요약
| 구분 | Pose Graph SLAM | Graph-Based SLAM |
|---|
| 노드(Node) | 로봇의 위치(포즈)만 저장 | 로봇의 위치(포즈) + 센서 데이터도 저장 |
| 엣지(Edge) | 위치 간 이동 거리 & 방향만 저장 | 위치 간 이동 거리 & 방향 + 센서 정보까지 저장 |
| Loop Closure | 노드 간의 관계만 최적화 | 노드 간 관계 + 센서 정보도 최적화 |
| 지도 정확도 | 상대적으로 낮음 | 더 정밀한 지도 생성 가능 |
| 사용 | slam_toolbox (ROS2) | Cartographer (ROS1/ROS2) |
- Pose Graph SLAM: 로봇의 위치만 저장하고, 엣지는 위치 간 거리 & 방향 정보만 포함
- Graph-Based SLAM: 로봇의 위치 + 센서 데이터까지 저장하고, 엣지는 위치 관계 + 센서 정보까지 포함