16. SLAM과 내비게이션: 로봇이 공간을 이해하는 법
16. SLAM과 내비게이션: 로봇이 공간을 이해하는 법

로봇은 어떻게 길을 잃지 않을까
로봇이 방 안을 돌아다니는 모습을 처음 보면 신기하면서도 이런 생각이 듭니다. "얘는 내가 시키지 않아도 어떻게 소파를 피하고, 벽을 따라가고, 다시 충전기로 돌아가지?"
이 질문의 답이 바로 이 장의 주제입니다. 로봇이 움직이려면 단순히 모터만 돌릴 수 있어서는 안 됩니다. 지금 내가 어디에 있는지 알아야 하고, 주변에 무엇이 있는지 이해해야 하며, 목적지까지 어떻게 가야 하는지도 계산해야 합니다. 이 세 가지가 연결될 때 비로소 로봇은 공간을 이해하는 것처럼 보입니다.
사람은 낯선 집에 들어가도 대충 기억을 만들 수 있습니다. "현관에서 들어오면 왼쪽이 주방이고, 끝까지 가면 창문이 있네." 로봇도 비슷합니다. 다만 사람처럼 직감으로 하는 것이 아니라, 센서 데이터와 수학적 계산으로 이 작업을 수행합니다.
이 장에서는 어려운 수식보다 큰 그림을 먼저 잡겠습니다. 로봇 청소기와 순찰 로봇이 어떻게 길을 찾는지, 왜 SLAM이 필요한지, 내비게이션은 어떤 순서로 동작하는지 생활 속 사례로 이해해봅시다.
지도, 위치, 길찾기라는 세 가지 질문
이동 로봇이 공간을 이해하려면 결국 세 가지 질문에 답해야 합니다.
주변 공간은 어떻게 생겼는가
나는 지금 어디에 있는가
목적지까지 어떻게 갈 것인가
이 세 질문은 각각 지도 작성, 위치 추정, 경로 계획으로 이어집니다.
지도 작성은 말 그대로 주변 공간을 그리는 일입니다. 벽이 어디에 있는지, 장애물이 어느 쪽에 있는지, 지나갈 수 있는 통로가 어디인지 표현해야 합니다. 위치 추정은 만들어진 지도 안에서 "지금 내 좌표가 어디쯤인가"를 계산하는 일입니다. 경로 계획은 현재 위치에서 목표 지점까지 안전하고 효율적으로 이동하는 길을 고르는 과정입니다.
이 세 가지는 따로 노는 기능이 아닙니다. 서로 계속 영향을 주고받습니다. 지도가 부정확하면 위치 추정이 흔들리고, 위치가 흔들리면 경로 계획도 엉뚱해집니다. 그래서 로봇의 이동은 단순히 바퀴를 굴리는 일이 아니라, 실시간으로 공간을 해석하고 수정하는 일에 가깝습니다.
로봇 청소기를 떠올리면 SLAM이 쉬워진다
로봇 청소기가 처음 어떤 집에 들어왔다고 상상해봅시다. 집 구조를 미리 알고 있지 않습니다. 그런데도 한 바퀴 두 바퀴 돌다 보면 방의 모양을 파악하고, 이미 청소한 곳과 아직 안 간 곳을 나누고, 나중에는 훨씬 똑똑하게 움직입니다.
처음에는 부딪히고 돌아서는 수준이던 로봇도, 센서로 벽과 가구를 감지하고 이동 기록을 누적하면 점점 집의 형태를 그릴 수 있습니다. 그러면서 "지금 나는 거실 구석 쪽에 있구나", "저 앞은 식탁 때문에 막혀 있구나", "배터리가 적으니 충전기로 돌아가야겠구나" 같은 판단이 가능해집니다.
바로 이런 과정을 SLAM이라고 부릅니다. SLAM은 Simultaneous Localization and Mapping의 약자입니다. 한국어로는 보통 동시적 위치 추정 및 지도 작성이라고 옮깁니다. 이름은 조금 딱딱하지만 뜻은 단순합니다. 지도를 만들면서 동시에 내 위치도 알아내는 기술입니다.
왜 굳이 둘을 동시에 해야 할까요? 지도 없이 위치를 알기 어렵고, 위치를 모르면 지도를 제대로 만들 수 없기 때문입니다. 마치 처음 가는 미로에서 메모를 하며 걷는 것과 비슷합니다. 어디를 지나왔는지 기록해야 지도가 생기고, 그 지도를 봐야 지금 내가 어디쯤인지 알 수 있습니다.
SLAM은 무엇을 하는 기술인가
SLAM의 핵심은 "센서로 본 세계"와 "내가 얼마나 움직였는가"를 합쳐서 하나의 공간 모델을 만드는 것입니다.
예를 들어 로봇이 앞으로 30센티미터 이동했다고 합시다. 바퀴 엔코더는 바퀴가 몇 바퀴 돌았는지 알려주고, IMU는 회전과 기울기 변화를 감지합니다. 카메라나 라이다는 앞에 벽이 있는지, 통로가 열려 있는지 같은 외부 정보를 줍니다. 로봇은 이 정보를 합쳐서 지금 위치를 추정합니다.
그런데 여기에는 문제가 있습니다. 바퀴는 미끄러질 수 있고, 센서는 노이즈가 있으며, 카메라는 빛에 영향을 받습니다. 그래서 로봇의 위치 계산은 시간이 지나면 조금씩 틀어집니다. 이 누적 오차를 줄이기 위해 로봇은 주변 환경의 특징을 계속 다시 확인합니다. "아까 봤던 저 벽 모양이 또 보이네. 그렇다면 내가 지금 여기쯤 있겠군." 이런 식입니다.
즉, SLAM은 단순한 지도 그리기가 아닙니다. 이동하면서 생기는 오차를 환경 관측으로 보정하는 작업까지 포함합니다.
지도는 어떤 모양으로 저장될까
사람은 머릿속에 "소파 옆으로 돌아가면 베란다가 있다"처럼 공간을 느슨하게 기억합니다. 반면 로봇은 컴퓨터가 다룰 수 있는 형태로 공간을 저장해야 합니다.
가장 쉬운 방식은 격자 지도입니다. 바닥을 작은 칸들로 나누고, 각 칸이 비어 있는지 막혀 있는지 기록하는 방식입니다. 게임 맵을 바둑판처럼 생각하면 이해하기 쉽습니다. 어떤 칸은 지나갈 수 있고, 어떤 칸은 벽이라서 갈 수 없습니다.
또 다른 방식은 특징 기반 지도입니다. 벽 모서리, 문틀, 기둥, 테이블 다리 같은 특징점을 중심으로 공간을 표현합니다. 카메라 기반 SLAM에서 자주 쓰는 접근입니다. 공간 전체를 칸으로 채우기보다, 눈에 띄는 포인트를 연결해 구조를 이해하는 셈입니다.
실전에서는 로봇의 목적에 따라 표현 방식이 달라집니다.
실내 이동 로봇은 2차원 격자 지도를 많이 사용합니다.
자율주행이나 드론은 3차원 정보가 더 중요할 수 있습니다.
카메라 중심 시스템은 특징점과 영상 정보를 적극 활용합니다.
개인 프로젝트에서는 처음부터 복잡한 3차원 지도에 욕심내기보다, 2차원 평면 지도부터 이해하는 편이 훨씬 좋습니다. 방이나 복도에서 움직이는 바퀴형 로봇은 대개 이것만으로도 많은 일을 할 수 있습니다.
위치 추정은 왜 이렇게 어려울까
사람은 눈을 감고 몇 걸음 걸으면 대충 어디쯤인지 감이 옵니다. 하지만 정확하지는 않습니다. 로봇도 같습니다. 바퀴 엔코더만 믿고 이동하면 조금씩 오차가 쌓입니다. 이 과정을 오도메트리라고 합니다. 오도메트리는 바퀴 회전량이나 이동량을 바탕으로 위치 변화를 추정하는 방법입니다.
오도메트리의 장점은 빠르고 간단하다는 것입니다. 하지만 약점도 뚜렷합니다. 바닥이 미끄럽거나, 바퀴가 헛돌거나, 작은 충격이 생기면 실제 이동과 계산이 달라집니다. 처음에는 1센티미터 오차였던 것이 몇 분 뒤에는 꽤 큰 차이가 될 수 있습니다.
그래서 로봇은 외부 세계를 다시 봐야 합니다. 라이다라면 주변 벽까지의 거리 패턴을 보고 현재 위치를 맞춰봅니다. 카메라라면 이전에 본 장면과 현재 장면의 공통점을 비교합니다. IMU는 회전 변화를 빠르게 감지해 보조 정보를 줍니다.
결국 위치 추정은 하나의 센서로 해결되지 않습니다. 여러 센서의 장단점을 섞어 쓰는 경우가 많습니다. 이것을 센서 융합이라고 부릅니다. 쉽게 말해 한 명의 증언만 믿지 않고, 여러 사람의 말을 대조해 더 그럴듯한 결론을 내리는 방식입니다.
경로 계획은 단순히 최단거리 찾기가 아니다
지도를 만들고 위치를 알았다면 이제 목적지까지 가야 합니다. 얼핏 보면 가장 짧은 길만 계산하면 될 것 같지만, 실제 로봇의 경로 계획은 생각보다 더 복잡합니다.
로봇은 단순한 점이 아니라 크기를 가진 물체입니다. 몸통 너비가 있고, 회전 반경이 있으며, 갑자기 멈추거나 꺾는 데 한계가 있습니다. 게다가 세상은 정적인 지도만으로 설명되지 않습니다. 사람도 움직이고, 의자도 밀리고, 상자도 갑자기 길을 막습니다.
그래서 내비게이션은 보통 두 층으로 나뉩니다.
첫째는 전역 경로 계획입니다. 전체 지도에서 현재 위치와 목표 위치를 보고 큰 길을 정합니다. 예를 들어 거실에서 서재까지 가려면 복도를 통과해야 한다는 식의 큰 그림입니다.
둘째는 지역 경로 계획입니다. 실제 주행 중에 바로 앞 장애물을 피하고, 속도를 조절하고, 살짝 우회하는 일을 담당합니다. 예를 들어 원래 계획한 길에 사람이 서 있으면 잠깐 돌아가거나 멈추는 식입니다.
사람이 길찾기 앱으로 목적지까지의 큰 경로를 보고, 실제 걸을 때는 앞사람이나 공사 구간을 피해 움직이는 것과 비슷합니다.
SLAM과 내비게이션은 어떻게 이어질까
이제 퍼즐 조각을 한 번에 맞춰봅시다. 이동 로봇은 보통 이런 흐름으로 동작합니다.
센서로 주변 환경을 읽는다.
오도메트리와 센서 정보를 이용해 현재 위치를 추정한다.
지도를 새로 만들거나 기존 지도를 갱신한다.
목표 지점까지의 경로를 계산한다.
모터 명령을 만들어 실제로 이동한다.
이동 결과를 다시 센서로 확인하고 보정한다.
중요한 점은 이것이 한 번만 일어나는 과정이 아니라는 것입니다. 로봇은 이동하는 동안 이 과정을 계속 반복합니다. 한마디로 로봇의 주행은 "보고, 짐작하고, 움직이고, 다시 확인하는 루프"입니다.
이 구조를 이해하면 왜 이동 로봇 개발이 생각보다 어렵고, 또 왜 재미있는지도 보이기 시작합니다. 바퀴를 돌리는 것은 쉽지만, 공간 속에서 믿을 수 있게 움직이게 만드는 것은 훨씬 높은 수준의 문제이기 때문입니다.
로봇은 어떤 센서로 공간을 볼까
공간 이해에 자주 쓰이는 센서는 몇 가지가 있습니다. 각각 장단점이 분명합니다.
라이다는 레이저를 쏘아 주변 물체까지의 거리를 재는 센서입니다. 벽과 장애물의 형태를 비교적 안정적으로 파악할 수 있어 실내 지도 작성에 많이 쓰입니다. 조명 변화의 영향을 카메라보다 덜 받는 편이라서 내비게이션에 유리합니다.
카메라는 세상을 풍부하게 보여줍니다. 문, 책상, 사람, 표지판처럼 의미 있는 정보를 읽어내는 데 강합니다. 다만 거리 추정이 까다롭고, 빛이 너무 어둡거나 너무 강하면 성능이 흔들릴 수 있습니다. 대신 최근에는 비전 기반 SLAM과 AI 인식이 빠르게 발전하면서 카메라의 활용 범위가 매우 넓어졌습니다.
IMU는 가속도와 각속도를 측정합니다. 쉽게 말해 흔들림과 회전을 빠르게 감지하는 장치입니다. 순간적인 움직임을 파악하는 데 좋지만, 이것만으로 오래 버티면 오차가 쌓입니다.
엔코더는 바퀴나 모터 축의 회전량을 측정합니다. 이동 거리를 계산하는 기본 재료입니다. 가격이 저렴하고 단순하지만, 미끄러짐에는 약합니다.
초보자 입장에서는 "정답 센서 하나"를 찾기보다, 어떤 역할을 누가 맡는지 이해하는 것이 더 중요합니다. 라이다는 공간 형태를 보고, 엔코더는 이동량을 알려주고, IMU는 자세 변화를 보조하고, 카메라는 의미를 더합니다.
순찰 로봇은 왜 지도가 더 중요할까
로봇 청소기는 방 전체를 훑는 일이 핵심입니다. 반면 순찰 로봇은 정해진 구역을 반복해서 돌고, 특정 지점에 도착해 확인하고, 이상 상황이 생기면 우회하거나 정지해야 합니다. 그래서 지도와 위치 정확도가 더 중요해집니다.
예를 들어 사무실 순찰 로봇이 있다고 합시다. 밤마다 입구, 복도, 창고 앞, 서버실 앞을 순서대로 돌아야 합니다. 이 로봇은 단순히 장애물을 피하는 정도로는 부족합니다. 어느 문 앞에 도착했는지, 원래 가야 할 경유 지점을 지났는지, 충전 스테이션까지 돌아갈 수 있는지 알아야 합니다.
이때 내비게이션 시스템은 단순 이동을 넘어 작업 수행의 기반이 됩니다. 카메라로 사람을 찾고, QR 코드를 읽고, 특정 장소에서 사진을 찍는 기능도 결국 "정확히 그 위치까지 갈 수 있느냐"에 달려 있습니다. 이동이 흔들리면 그 위에 쌓는 AI 기능도 덩달아 흔들립니다.
로봇이 같은 곳을 다시 알아보는 순간
SLAM에서 흥미로운 순간 중 하나는 로봇이 예전에 지나간 장소를 다시 알아보는 때입니다. 이를 루프 클로저라고 부릅니다. 이름은 조금 무섭지만 뜻은 간단합니다. 한 바퀴 돌고 돌아 다시 비슷한 장소를 발견했을 때, 그 정보를 이용해 누적된 지도 오차를 줄이는 과정입니다.
예를 들어 로봇이 복도를 따라 네모나게 한 바퀴 돌았다고 해봅시다. 오도메트리만 믿으면 출발점으로 돌아왔을 때 위치가 살짝 어긋나 있을 수 있습니다. 그런데 센서가 "이 벽 구조와 문 위치는 출발점 근처와 매우 비슷하다"고 판단하면, 시스템은 지도 전체를 조금 조정해 오차를 줄입니다.
이 과정이 잘 되면 지도는 점점 더 안정적이 됩니다. 반대로 이 과정이 잘 안 되면 지도 모양이 삐뚤어지고, 로봇은 같은 장소를 다른 장소로 착각할 수 있습니다.
초보자에게 루프 클로저는 굳이 알고리즘 이름까지 외울 필요는 없습니다. 다만 "로봇도 지나온 길을 다시 확인하면서 기억을 바로잡는다" 정도로 이해하면 충분합니다.
내비게이션은 결국 안전한 움직임의 기술이다
길을 찾는다는 말을 들으면 자꾸 똑똑함만 떠오르지만, 실제로는 안전이 훨씬 중요합니다. 로봇이 목표 지점에 빨리 도착하는 것보다 부딪히지 않고, 끼이지 않고, 넘어지지 않는 것이 먼저입니다.
그래서 내비게이션 시스템에는 보통 이런 고민이 함께 들어갑니다.
로봇 몸체의 실제 크기보다 더 넉넉한 안전 여유를 둘 것인가
갑자기 사람이 튀어나왔을 때 즉시 정지할 수 있는가
좁은 통로에서 무리하게 통과를 시도하지 않는가
센서가 잠깐 실패했을 때 위험한 명령을 계속 내리지 않는가
개인 프로젝트에서도 이 감각은 꼭 필요합니다. 시뮬레이션에서는 벽에 살짝 스치고 지나가도 그냥 웃고 넘어갈 수 있지만, 실제 로봇은 가구를 긁고 물건을 떨어뜨리고 사람 발에 부딪힐 수 있습니다. 따라서 좋은 내비게이션은 "똑똑한 길찾기"이면서 동시에 "조심스러운 운전"이어야 합니다.
ROS 2에서 보는 이동 로봇의 기본 구성
앞 장에서 ROS 2가 왜 중요한지, 그리고 센서와 모터를 노드로 나누어 연결하는 방식을 살펴봤습니다. SLAM과 내비게이션은 그 구조 위에서 더 빛을 발합니다.
이동 로봇을 ROS 2 스타일로 생각하면 대략 다음과 같은 모듈로 나눌 수 있습니다.
센서 노드: 라이다, 카메라, IMU, 엔코더 데이터를 발행합니다.
위치 추정 노드: 여러 센서 정보를 합쳐 현재 자세와 위치를 계산합니다.
SLAM 노드: 지도와 위치를 함께 업데이트합니다.
경로 계획 노드: 목표까지 갈 경로를 계산합니다.
제어 노드: 속도 명령을 만들어 바퀴나 모터에 전달합니다.
이렇게 나누면 무엇이 좋아질까요? 문제가 생겼을 때 어디가 원인인지 찾기 쉬워집니다. 지도가 이상한지, 위치 추정이 흔들리는지, 경로는 맞는데 제어가 거친지 분리해서 볼 수 있습니다. 실제 로봇 개발에서 이런 분리는 엄청난 힘을 발휘합니다.
초보자가 이해해야 할 가장 중요한 감각
SLAM과 내비게이션을 처음 배우는 사람은 자꾸 알고리즘 이름부터 외우려 합니다. 물론 A*나 AMCL 같은 용어를 나중에는 만나게 됩니다. 하지만 더 중요한 것은 로봇이 어떤 질문에 답하려고 하는지 이해하는 것입니다.
초보자가 꼭 가져가야 할 감각은 다음과 같습니다.
첫째, 로봇은 완벽한 센서를 갖고 있지 않습니다. 항상 불완전한 정보 속에서 그럴듯한 추정을 합니다.
둘째, 지도와 위치는 분리된 문제가 아니라 서로 물고 늘어지는 문제입니다. 지도가 좋아야 위치를 잘 잡고, 위치를 잘 잡아야 지도가 좋아집니다.
셋째, 실제 이동은 계획과 현실의 차이를 계속 줄이는 과정입니다. 계산한 길을 그대로 달리는 것이 아니라, 매 순간 다시 보고 수정합니다.
이 세 감각만 잡아도 이동 로봇이 훨씬 덜 신비하게 보입니다. 그리고 덜 신비하게 보일수록 직접 만들 수 있다는 자신감이 생깁니다.
개인 개발자는 어디까지 해볼 수 있을까
개인 개발자라고 해서 SLAM과 내비게이션이 너무 거대한 분야라고 겁먹을 필요는 없습니다. 다만 단계를 잘 나누는 것이 중요합니다.
처음에는 이런 순서로 접근하면 좋습니다.
수동 조종 로봇에 센서 데이터를 띄워보며 공간 인식 감각을 익힌다.
오도메트리로 직진과 회전 결과가 어떻게 누적되는지 본다.
간단한 지도 작성 패키지나 예제를 이용해 방 한 칸 지도를 만들어본다.
저장한 지도를 바탕으로 특정 지점으로 이동하는 실험을 한다.
마지막으로 동적 장애물 회피와 재계획을 시도한다.
이 순서를 따르면 "한 번에 자율주행 로봇 완성"이라는 막막한 목표가 "오늘은 지도 보기", "내일은 위치 찍기", "그다음은 목표점 이동" 같은 현실적인 과제로 쪼개집니다.
특히 작은 실내 이동 로봇, 데스크 주변 순찰 로봇, 사무실 안내 로봇, 자동 이동 카트 같은 프로젝트는 이 장의 개념만 제대로 이해해도 설계가 훨씬 선명해집니다.
자주 생기는 오해들
SLAM과 내비게이션을 처음 접하면 몇 가지 오해가 자주 생깁니다.
첫 번째 오해는 "지도를 한 번 만들면 끝난다"는 생각입니다. 실제 환경은 계속 바뀝니다. 문이 열리고 닫히고, 의자가 이동하고, 사람이 오갑니다. 그래서 로봇은 고정 지도만 보는 것이 아니라 현재 센서 정보도 함께 고려해야 합니다.
두 번째 오해는 "위치만 정확하면 된다"는 생각입니다. 위치가 정확해도 제어가 거칠면 벽에 부딪힐 수 있습니다. 반대로 제어가 부드러워도 위치 추정이 틀리면 엉뚱한 곳으로 갑니다. 이동은 전체 시스템의 협업입니다.
세 번째 오해는 "좋은 AI 모델 하나면 길찾기도 해결된다"는 기대입니다. 비전 모델과 언어 모델은 매우 유용하지만, 안정적인 주행에는 여전히 센서 처리, 위치 추정, 경로 계획, 제어 같은 전통적인 로봇 기술이 중요합니다. 특히 실시간성과 안전성은 화려한 데모보다 훨씬 더 까다로운 기준입니다.
이 장의 핵심을 한 문장으로 정리하면
로봇이 공간을 이해한다는 것은 마법이 아니라, 센서로 세상을 읽고, 자기 위치를 추정하고, 지도를 만들고, 목적지까지의 경로를 안전하게 다시 계산하는 과정을 끊임없이 반복하는 것입니다.
로봇 청소기가 집 안 구조를 익히는 일도, 순찰 로봇이 복도를 돌며 지정 지점을 방문하는 일도 결국 이 원리 위에 서 있습니다. 지도 작성은 세상을 기억하는 능력이고, 위치 추정은 스스로를 아는 능력이며, 경로 계획은 그 기억과 자기 인식을 바탕으로 행동을 고르는 능력입니다.
이제 여러분은 이동 로봇을 볼 때 단순히 "잘 돌아다니네"라고만 느끼지 않을 것입니다. 아마 이렇게 보이기 시작할 겁니다. "지금 저 로봇은 센서 데이터를 바탕으로 위치를 잡고, 지도를 참고해, 지역 장애물을 피하면서 움직이고 있겠구나."
그 순간부터 이동 로봇은 구경의 대상이 아니라, 직접 만들 수 있는 시스템이 됩니다.
다음 장으로 이어가기
이 장에서 우리는 로봇이 공간을 이해하는 기본 원리를 잡았습니다. 다음 장에서는 한 걸음 더 나아가, LLM이 정말 로봇의 뇌가 될 수 있는지 살펴봅니다. 길을 찾고 움직이는 문제와, 명령을 이해하고 계획을 세우는 문제는 닮아 있으면서도 다릅니다.
공간을 이해하는 로봇 위에 언어를 이해하는 AI가 올라가면 어떤 일이 벌어질까요? 이제 로봇은 단순히 "움직이는 기계"를 넘어, "지시를 이해하고 목적을 수행하는 에이전트"로 진화하기 시작합니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.