SLAM을 공부하다 보면 결국 다시 돌아오게 되는 두 단어가 있습니다. 바로 Mapping과 Localization입니다.
이 둘은 이미 시리즈 첫 편에서 한 번 등장했습니다. 그런데 그때는 “SLAM이 어떤 문제를 푸는가”라는 관점에서 가볍게 짚고 넘어갔다면, 이번에는 한 단계 더 들어가서 실제 로봇 시스템 안에서 이 두 과정이 어떻게 작동하는지를 살펴볼 차례입니다.
조금 단순하게 말해보면 Mapping은 로봇이 주변 환경의 지도를 만들어가는 과정이고, Localization은 이미 존재하는 지도 위에서 현재 로봇이 어디 있는지를 찾는 과정입니다.
그런데 실제로는 이 둘이 완전히 따로 떨어져 움직이지 않습니다. 지도를 만들 때도 위치 추정이 필요하고, 위치를 찾을 때도 지도와 센서값을 계속 비교해야 하기 때문입니다.
그래서 이번 글에서는 먼저 2D LiDAR 기반 지도는 어떤 형태로 표현되는지 살펴보고, 그다음 지도 생성 과정에서 왜 스캔 정합이 중요한지, 그리고 마지막으로 Localization이 map, odom, base_link를 어떻게 연결하면서 현재 위치를 찾아가는지까지 이어서 정리해보겠습니다.
2D LiDAR 기반 지도는 어떻게 표현될까
모바일 로봇에서 가장 자주 접하는 지도 형태 중 하나는 2D LiDAR 기반 Occupancy Grid Map입니다.
이름은 조금 길어 보이지만 개념은 생각보다 직관적입니다.
쉽게 말해, 공간을 아주 작은 격자 셀들로 나눈 뒤 각 셀마다
“여기는 막혀 있는가”,
“여기는 지나갈 수 있는가”,
“아직 모르는 공간인가”
를 기록해두는 방식입니다.
이렇게 만들어진 지도에서는 보통 세 가지 상태가 등장합니다.
- Occupied: 장애물이 있는 셀
- Free: 로봇이 지나갈 수 있는 셀
- Unknown: 아직 관측하지 못해서 상태를 모르는 셀
직관적으로 보면 꽤 익숙합니다.
벽이나 가구처럼 센서가 닿은 장애물은 검게 표현되고, 로봇이 센서로 확인한 빈 공간은 흰색으로 표현됩니다. 반면 아직 가보지 않았거나 센서가 보지 못한 영역은 회색처럼 남아 있게 됩니다.
이 방식이 좋은 이유는 명확합니다.
로봇 입장에서 중요한 것은 결국 “어디를 지나갈 수 있고, 어디가 막혀 있는가”이기 때문입니다.
즉, Occupancy Grid Map은 현실 세계를 아주 정밀한 사진처럼 저장하는 것이 아니라, 주행과 판단에 필요한 형태로 단순화해서 저장하는 지도라고 볼 수 있습니다.

이 지도는 어디에 쓰일까
이렇게 만든 지도는 단순히 저장해두기 위한 결과물이 아닙니다.
실제로는 이후의 여러 기능에서 핵심적인 역할을 합니다.
가장 먼저 떠올릴 수 있는 것이 Localization입니다.
지도가 있어야 로봇은 현재 센서로 본 환경과 지도 속 구조를 비교하면서 “내가 지금 어디쯤 있는지”를 추정할 수 있습니다.
그리고 또 하나가 Path Planning입니다.
로봇이 지도 위에서 현재 위치와 목표 위치를 안다면, 그 사이를 어떻게 지나가야 하는지를 계산할 수 있습니다. 즉, 지도는 단순히 공간을 저장한 결과물이 아니라, 위치 추정과 경로 계획의 기준이 되는 작업 공간이 됩니다.
결국 지도는 끝이 아니라 시작입니다.
지도가 있어야 그 위에서 “나는 어디에 있는가”, “어디로 갈 수 있는가”, “어떤 경로가 안전한가” 같은 질문이 가능해집니다.
맵을 만드는 과정에서 왜 정합이 필요할까
여기서 한 가지를 생각해볼 필요가 있습니다.
LiDAR는 매 순간 주변 환경을 스캔합니다.
그렇다면 그 스캔값들을 그냥 차곡차곡 쌓기만 하면 곧바로 지도가 만들어질까요?
겉으로 보면 그래 보일 수 있습니다.
그런데 실제로는 그렇게 단순하지 않습니다.
왜냐하면 로봇은 계속 움직이고 있고, 각 시점의 스캔은 서로 다른 위치와 자세에서 측정된 것이기 때문입니다.
즉, 현재 시점의 스캔과 이전 시점의 스캔을 같은 좌표계 안에서 잘 맞춰 붙이는 과정이 필요합니다.
이 과정을 흔히 정합(Registration) 또는 스캔 매칭(Scan Matching) 이라고 부릅니다.
이걸 제대로 하지 못하면 어떤 일이 생길까요?
직선 복도를 지나가는데 지도는 조금씩 비틀어질 수 있고, 원래는 같은 벽을 여러 번 본 것인데 서로 다른 벽처럼 누적될 수 있습니다. 결국 센서 데이터는 충분한데도 지도는 점점 찌그러질 수 있습니다.
그래서 Mapping의 핵심은 단순히 “센서를 많이 읽는 것”이 아니라,
각 시점의 센서 데이터를 서로 얼마나 일관되게 정렬할 수 있는가에 달려 있습니다.
ICP는 왜 자주 등장할까
2D LiDAR 기반 Mapping이나 LiDAR Odometry를 이야기할 때 자주 등장하는 대표적인 개념이 바로 ICP(Iterative Closest Point) 입니다.
이 알고리즘의 핵심 아이디어는 꽤 직관적입니다.
연속된 두 개의 포인트 집합이 있을 때, 한쪽을 다른 쪽에 가장 잘 맞도록 회전하고 이동시키는 변환을 반복적으로 찾는 방식입니다.
예를 들어 이전 시점의 LiDAR 스캔이 있고, 현재 시점의 LiDAR 스캔이 있다고 해보겠습니다.
이 둘은 같은 공간을 보고 있지만 로봇이 조금 이동했기 때문에 정확히 겹치지 않습니다. ICP는 이 두 스캔에서 서로 가까운 점들을 대응시키고, 그 대응 관계를 바탕으로 어떤 회전과 이동을 적용하면 가장 잘 맞는지를 계산합니다.
이 과정은 보통 다음처럼 반복됩니다.
- 가장 가까운 점끼리 대응 관계를 잡고
- 그 점들이 가장 잘 맞도록 회전과 이동을 계산한 뒤
- 변환을 적용하고 오차를 다시 계산합니다.
그리고 오차가 충분히 줄어들 때까지 이 과정을 반복합니다.
즉, ICP는 한 번에 완벽히 맞추는 알고리즘이라기보다,
조금씩 정렬을 개선해가며 두 스캔을 가까워지게 만드는 반복 최적화 과정이라고 이해하면 좋습니다.

ICP만으로 모든 것이 해결되지는 않는다
여기서 중요한 점이 하나 있습니다.
ICP는 굉장히 유용한 알고리즘이지만, 이것만으로 완벽한 지도가 자동으로 만들어지는 것은 아닙니다.
왜냐하면 ICP로 얻는 것은 기본적으로 연속된 스캔 사이의 상대 변환이기 때문입니다.
즉 “이전 프레임에서 현재 프레임으로 얼마나 이동하고 회전했는가”를 추정하는 데 강합니다.
이 변환을 계속 누적하면 LiDAR Odometry처럼 사용할 수 있습니다.
그런데 문제는 이런 상대 이동량을 계속 누적하면 오차도 함께 누적된다는 점입니다.
아주 작은 회전 오차나 위치 오차도 시간이 지나면서 커질 수 있고, 결국 지도 전체가 서서히 휘거나 뒤틀릴 수 있습니다.
이 말은 곧, Mapping이 단순히 프레임과 프레임을 계속 붙이는 문제를 넘어서
누적 오차를 어떻게 줄이고, 전체 지도를 얼마나 일관되게 유지할 것인가의 문제로 이어진다는 뜻입니다.
그래서 실제 SLAM 패키지들은 ICP나 스캔 매칭 같은 프런트엔드 기법만 사용하는 것이 아니라,
뒤에서 전체 구조를 최적화하는 방식까지 함께 사용하게 됩니다.
ROS 2에서는 보통 어떤 패키지를 사용할까
ROS 2에서 2D LiDAR 기반 SLAM을 사용할 때 자주 언급되는 대표적인 패키지는 크게 두 방향으로 생각할 수 있습니다.
하나는 비교적 가볍고 교육용이나 소형 플랫폼에서 많이 다루는 패키지이고,
다른 하나는 더 복잡한 환경과 고성능을 목표로 하는 패키지입니다.
실무나 학습 흐름에서 많이 마주치는 기본 선택지는 보통 SLAM Toolbox입니다.
이 패키지는 ROS 2 환경에서 2D LiDAR와 오도메트리 정보를 결합해 실시간으로 지도 작성과 위치 추정을 수행하는 대표적인 2D SLAM 패키지입니다.
SLAM Toolbox의 장점은 몇 가지로 정리할 수 있습니다.
먼저 그래프 기반 SLAM이라는 점입니다.
필터 기반 접근보다 넓은 환경에서 누적 오차를 다루는 데 유리하고, 전체 지도를 구조적으로 보정하기 좋습니다.
또 하나는 대규모 환경 지원입니다.
지도를 통째로 하나의 덩어리처럼 다루기보다 서브맵 구조를 이용해 관리하기 때문에, 큰 환경에서도 비교적 효율적으로 다룰 수 있습니다.
그리고 꽤 실용적인 장점으로 Lifelong Mapping과 Localization 모드도 있습니다.
즉 한 번 지도를 만들고 끝나는 것이 아니라, 기존 지도를 이어서 업데이트하거나, 반대로 이미 만든 지도 위에서 위치 추정만 수행하는 방식도 지원합니다.
즉 SLAM Toolbox는 단순한 데모용 패키지가 아니라,
맵 생성과 위치 추정을 실제 시스템 흐름 안에서 이어서 다룰 수 있게 해주는 패키지라고 보면 됩니다.
SLAM Toolbox는 어떻게 맵을 만들까
SLAM Toolbox의 작동 원리를 아주 단순하게 요약하면 이렇습니다.
먼저 로봇은 오도메트리로 대략적인 위치 변화를 추정하고, 동시에 LiDAR로 주변을 계속 스캔합니다.
그리고 일정 거리 이상 이동하거나 일정 각도 이상 회전했을 때, 그 순간의 포즈와 스캔을 하나의 노드처럼 기록합니다.
여기서 핵심은 모든 순간을 무조건 다 저장하는 것이 아니라,
의미 있는 변화가 생겼을 때 그래프에 노드를 추가한다는 점입니다.
그 다음 현재 스캔과 이전 스캔들을 비교하면서 오도메트리의 오차를 줄이기 위한 스캔 매칭을 수행합니다.
그리고 더 중요한 순간은 로봇이 예전에 지나갔던 장소를 다시 만났을 때입니다.
이때 과거 스캔과 현재 스캔이 비슷하다는 사실을 감지하면,
“아, 이곳은 이전에 왔던 위치와 같은 곳이구나”라고 판단하게 됩니다.
이 과정을 흔히 Loop Closure라고 합니다.
Loop Closure가 발생하면 그동안 누적된 오차를 한 번에 전체 그래프 차원에서 펴주듯 보정할 수 있습니다.
그래서 처음에는 조금씩 틀어지던 지도도 다시 전체 구조에 맞게 정렬될 수 있습니다.
즉 SLAM Toolbox는 단순히 현재 스캔만 이어붙이는 것이 아니라,
그래프 구조와 루프 클로저를 통해 전체 지도 일관성을 유지하는 방식으로 동작합니다.

이제 Localization으로 넘어가보자
여기까지가 지도를 만드는 쪽 이야기였다면, 이제는 그 지도를 바탕으로 현재 위치를 찾는 과정, 즉 Localization을 볼 차례입니다.
Localization은 지도 없이 동작하는 것이 아닙니다.
오히려 Localization의 핵심은 현재 센서로 본 환경과 이미 알고 있는 지도를 계속 비교하는 것에 가깝습니다.
예를 들어 로봇이 어떤 복도 안에 있다고 해보겠습니다.
LiDAR는 현재 복도 벽의 형태와 거리 정보를 측정합니다.
이제 이 센서값을 지도 속 구조와 비교해보면, 지도 안에서 “이런 스캔이 나올 만한 위치”가 몇 군데 후보로 떠오를 수 있습니다. 그리고 로봇이 이동하면서 관측이 더 쌓이면, 그 후보들은 점점 줄어들고 결국 가장 가능성이 높은 위치로 수렴하게 됩니다.
즉 Localization은
센서값과 지도를 계속 맞춰보며 현재 위치의 오차를 줄여가는 과정이라고 이해하면 됩니다.
Localization에서 왜 map, odom, base_link가 중요한가
Localization을 이해할 때 가장 헷갈리기 쉬운 부분 중 하나가 바로 프레임 관계입니다.
그런데 이 부분을 한 번만 정확히 잡아두면 이후 Navigation까지 훨씬 편해집니다.
map
map은 전체 지도 기준 프레임입니다.
즉, 로봇이 어느 공간에서 움직이고 있는지를 나타내는 고정된 기준에 가깝습니다.
Localization은 결국 이 map 기준으로 로봇이 어디 있는지를 알고 싶어 합니다.
odom
odom은 로봇이 시작한 지점을 기준으로 한 상대적 이동 프레임입니다.
휠 오도메트리나 LiDAR 오도메트리 같은 정보가 여기에 연결됩니다.
문제는 이 값이 시간이 지나면 오차가 누적된다는 점입니다.
base_link
base_link는 로봇 몸체를 대표하는 프레임입니다.
센서와 바퀴, 로봇 구조는 대부분 이 프레임을 기준으로 연결됩니다.
Localization에서 중요한 이유는 이 세 프레임이 다음처럼 이어지기 때문입니다.
- odom -> base_link 는 오도메트리 기반 상대 움직임
- map -> odom 은 Localization이 보정해주는 값
즉, 오도메트리만으로는 odom -> base_link가 계속 누적 오차를 품고 있게 됩니다.
Localization 알고리즘은 센서와 지도를 비교해 이 오차를 보정하고, 그 보정값을 map -> odom에 반영합니다.
그래서 최종적으로는 map -> base_link 관계를 통해, 지도 기준에서 로봇이 어디 있는지를 알 수 있게 됩니다.
이 구조를 이해하면 Localization이 왜 단순 센서 매칭이 아니라 프레임 관계를 계속 바로잡는 과정인지도 자연스럽게 보입니다.
AMCL은 위치를 어떻게 찾을까
2D LiDAR 기반 Localization을 이야기할 때 가장 대표적으로 등장하는 알고리즘 중 하나가 AMCL(Adaptive Monte Carlo Localization) 입니다.
이 알고리즘을 이해하려면 먼저 Monte Carlo라는 아이디어를 떠올리면 좋습니다.
복잡한 값을 직접 정확하게 계산하기 어려울 때, 확률적으로 많은 샘플을 뿌려보고 그 분포를 바탕으로 결과를 추정하는 방식입니다.
Localization에 이 개념을 가져오면 이렇게 됩니다.
“로봇이 지도 안에서 어디에 있을지 정확히 모르겠다.
그렇다면 가능한 위치 후보들을 많이 뿌려두고,
센서값과 잘 맞는 후보만 살려가자.”
AMCL은 이 위치 후보들을 파티클(Particle) 로 표현합니다.
즉, 지도 위에 작은 가설들을 많이 흩뿌려 놓고, 그중 어떤 가설이 현재 센서값과 잘 맞는지를 계속 평가하는 방식입니다.
초기에는 파티클들이 꽤 넓게 퍼져 있을 수 있습니다.
그런데 로봇이 움직이고 LiDAR 관측이 쌓일수록, 실제 센서값과 잘 맞지 않는 파티클은 점점 사라지고, 가능성이 높은 위치 주변에 파티클이 더 많이 몰리게 됩니다.
결국 시간이 지나면 파티클들이 특정 위치 근처로 수렴하고,
그 지점이 현재 로봇의 가장 가능성 높은 위치가 됩니다.
즉 AMCL은
지도와 센서값을 이용해 위치 가설들을 계속 걸러내며 정답에 가까워지는 확률적 위치 추정 방법입니다.

AMCL의 흐름은 생각보다 단순하다
AMCL의 내부 흐름을 아주 단순하게 요약하면 다음과 같습니다.
먼저 현재 위치에 대한 여러 가설을 파티클로 두고 시작합니다.
로봇이 움직이면 파티클들도 그 움직임을 반영해 같이 이동합니다.
그다음 각 파티클 위치에서 예상되는 센서값과 실제 LiDAR 센서값을 비교합니다.
그리고 잘 맞는 파티클에는 높은 가중치를, 잘 맞지 않는 파티클에는 낮은 가중치를 줍니다.
마지막으로 높은 가중치를 가진 파티클 중심으로 다시 샘플링합니다.
이 과정을 반복하면 파티클 분포는 점점 더 믿을 만한 위치로 수렴합니다.
여기서 Adaptive라는 말이 붙는 이유도 이해할 수 있습니다.
위치 불확실성이 크면 더 많은 파티클을 사용하고, 위치가 어느 정도 안정되면 파티클 수를 줄여 계산량을 아끼는 방식처럼, 상황에 따라 효율을 조절할 수 있기 때문입니다.
즉 AMCL은 무식하게 모든 위치를 다 계산하는 알고리즘이 아니라,
가능성 높은 위치에 계산 자원을 집중시키는 확률 기반 추정 방식이라고 볼 수 있습니다.
결국 Mapping과 Localization은 어떻게 연결될까
이제 다시 처음 질문으로 돌아와보겠습니다.
Mapping은 지도를 만드는 과정이고,
Localization은 그 지도 위에서 현재 위치를 찾는 과정입니다.
겉으로 보면 별개의 기능처럼 보일 수 있습니다.
하지만 실제로는 둘이 아주 강하게 연결되어 있습니다.
지도가 없으면 Localization은 센서값을 비교할 기준을 잃게 됩니다.
반대로 위치 추정이 불안정하면 Mapping은 센서 데이터를 일관되게 누적하지 못해 찌그러진 지도를 만들게 됩니다.
즉, Mapping과 Localization은 다음처럼 이어집니다.
- Mapping은 환경을 구조화해서 지도라는 기준을 만들고
- Localization은 그 기준 위에서 현재 위치를 계속 보정한다
SLAM은 결국 이 두 과정을 한 시스템 안에서 동시에 또는 긴밀하게 연결해 다루는 문제입니다.
이번 글에서 본 SLAM Toolbox는 그 중 Mapping 쪽을 실용적으로 보여주는 예이고,
AMCL은 Localization 쪽을 대표적으로 보여주는 예라고 할 수 있습니다.
하나는 지도를 만드는 과정의 실제 구현을,
다른 하나는 이미 있는 지도 위에서 위치를 찾는 확률적 방법을 보여줍니다.
그래서 둘을 같이 이해해야 비로소 SLAM의 전체 그림이 보입니다.
정리해보면
이번 글에서는 Mapping과 Localization을 하나의 흐름 안에서 정리해봤습니다.
2D LiDAR 기반 지도는 보통 Occupancy Grid Map 형태로 표현되며, 각 셀에는 장애물 여부와 미지 공간 여부 같은 정보가 담깁니다.
이 지도는 이후 Localization과 Path Planning의 기준이 됩니다.
지도를 만들기 위해서는 연속된 스캔을 서로 잘 맞춰야 하고, 이 과정에서 ICP 같은 정합 개념이 중요하게 등장합니다.
하지만 단순한 스캔 누적만으로는 누적 오차를 피하기 어렵기 때문에, 실제 패키지들은 그래프 기반 최적화나 루프 클로저 같은 구조까지 함께 사용합니다. SLAM Toolbox가 대표적인 예입니다.
그리고 Localization은 이 지도 위에서 현재 센서값과 지도를 비교하면서 위치를 보정해가는 과정입니다.
이때 map, odom, base_link 관계를 이해하는 것이 중요하고, map -> odom 보정을 통해 결국 지도 기준의 현재 위치를 얻을 수 있습니다. AMCL은 이런 과정을 파티클 기반 확률 추정으로 수행하는 대표적인 방법입니다.
결국 핵심은 이것입니다.
지도는 위치 추정을 위한 기준이 되고,
위치 추정은 지도를 일관되게 유지하기 위한 조건이 된다.
이 둘이 서로를 필요로 하기 때문에, SLAM은 단순히 지도만 만드는 기술도 아니고, 위치만 찾는 기술도 아닙니다.
바로 그 둘을 함께 다루는 문제라는 점이 다시 한 번 분명해집니다.
'Study Archives > Robotics' 카테고리의 다른 글
| [로봇 학습의 이해 ①] 로봇 제어와 행동 생성 (0) | 2026.04.10 |
|---|---|
| Nav2(Path Planning) (1) | 2026.04.10 |
| [SLAM의 이해 ④] URDF와 Xacro (0) | 2026.04.10 |
| [SLAM의 이해 ③] TF와 좌표 변환 (0) | 2026.04.10 |
| [SLAM의 이해 ②] 좌표계와 프레임 (0) | 2026.04.10 |