SLAM (동시적 위치추정 및 지도작성)

SLAM이란?

작동 방식, SLAM 알고리즘의 유형, 시작하기

SLAM(동시적 위치추정 및 지도작성)은 자율주행 차량에 사용되어 주변 환경 지도를 작성하는 동시에 차량의 위치를 작성된 지도 안에서 추정하는 방법입니다. SLAM 알고리즘을 통해 차량은 미지의 환경에 대한 지도를 작성할 수 있습니다. 엔지니어는 지도 정보를 사용하여 경로 계획 및 장애물 회피 등의 작업을 수행합니다.

SLAM이 중요한 이유

SLAM은 오랫동안 기술 연구의 주제로 거론되었습니다. 하지만 컴퓨터 처리 속도가 크게 개선되고 카메라와 레이저 거리 측정기 등의 저비용 센서가 등장함에 따라 SLAM 알고리즘은 점점 더 많은 분야의 실제 응용 사례에 사용되고 있습니다.

SLAM이 중요한 이유를 알아보기 위해 그 이점과 응용 사례를 몇 가지 살펴보도록 하겠습니다.

SLAM 응용 사례

가정용 로봇 진공청소기를 예로 들겠습니다. SLAM이 없다면 로봇 청소기는 방 안에서 무작위로 돌아다니기만 하고 바닥을 전부 청소하지도 못할 수 있습니다. 그리고 이런 방식으로는 전력이 과도하게 사용되어 배터리가 금방 소진됩니다. 반면 SLAM 알고리즘이 탑재된 로봇은 바퀴 회전수와 카메라 및 기타 영상 센서에서 가져온 데이터 같은 정보를 사용하여 필요한 움직임의 양을 파악할 수 있습니다. 이를 위치추정이라고 합니다. 또한 로봇은 카메라와 기타 센서를 동시에 사용하여 주변 환경의 장애물 지도를 생성하고 같은 구역을 또다시 청소하는 경우를 방지할 수 있습니다. 이를 지도작성이라고 합니다.

청소 로봇에 적용되는 SLAM의 이점

청소 로봇에 적용되는 SLAM의 이점

SLAM 알고리즘은 창고에서 선반을 정렬하는 이동 로봇의 길 찾기, 자율주행 차량의 빈 주차 공간 주차하기 또는 미지의 환경에서의 드론 조종을 통한 배송 등 다른 여러 응용 사례에서도 유용하게 사용할 수 있습니다. MATLAB®및 Simulink®는 다양한 응용 분야 개발을 위한 SLAM 알고리즘, 함수 및 분석 툴을 제공합니다. 사용자는 센서 융합, 객체 추적, 경로 계획경로 추종 등의 기타 작업과 함께 SLAM(동시적 위치추정 및 지도작성)을 구현할 수 있습니다.

SLAM의 작동 방식

크게 보면 SLAM을 달성하는 데 사용할 수 있는 기술적 컴포넌트에는 두 가지 유형이 있습니다. 첫 번째는 프론트엔드 처리 등의 센서 신호 처리이며, 이는 사용하는 센서에 크게 의존하게 됩니다. 두 번째는 백엔드 처리 등의 자세 그래프 최적화로서 센서와는 무관합니다.

프론트엔드 및 백엔드 처리를 위한 구성 블록을 포함한 SLAM 워크플로.

SLAM의 처리 흐름

SLAM 방법의 유형

프론트엔드 처리 컴포넌트에 대한 자세한 내용을 알아보려면 시각적 SLAM, 라이다 SLAM, 다중센서 SLAM과 같은 다양한 SLAM 방법을 참조하십시오.

시각적 SLAM

이름을 통해 알 수 있듯이, 시각적 SLAM(또는 vSLAM)은 카메라 및 기타 영상 센서로 획득한 영상을 사용합니다. 시각적 SLAM은 일반 카메라(광각, 어안 및 구형 카메라), 겹눈 카메라(스테레오 및 멀티 카메라) 및 RGB-D 카메라(심도 및 ToF 카메라)를 사용할 수 있습니다.

시각적 SLAM은 비교적 저렴한 카메라를 사용하여 저비용으로 구현할 수 있습니다. 뿐만 아니라 카메라에서 제공되는 정보가 방대하기 때문에 이를 토대로 랜드마크(이전에 측정한 위치)를 감지할 수 있습니다. 랜드마크 감지는 그래프 기반 최적화와의 결합이 가능하여 SLAM 구현 시 유연성이 확보됩니다.

단안 SLAM은 vSLAM이 단일 카메라를 유일한 센서로 사용하는 SLAM 알고리즘 유형으로, 이 경우 심도 추정이 어려워집니다. 이 문제는 위치추정이 필요한 영상에서 AR 마커나 체커보드 또는 기타 알려진 객체를 감지하거나 카메라 정보를 속도, 방향 같은 물리량의 측정이 가능한 IMU(관성 측정 장치) 등의 다른 센서와 융합하여 해결할 수 있습니다. vSLAM에 관련된 기술에는 SfM(움직임 기반 구조), 시각적 주행거리 측정, 번들 조정 등이 있습니다.

시각적 SLAM 알고리즘은 크게 두 범주로 분류할 수 있습니다. 희소 방법은 영상의 특징점들을 정합하고 PTAM이나 ORB-SLAM 등의 알고리즘을 사용합니다. 조밀 방법은 영상의 전체적인 밝기를 사용하고 DTAM, LSD-SLAM, DSO, SVO 등의 알고리즘을 사용합니다.

TUM RGB-D 데이터셋을 사용한 단안 시각적 SLAM.

단안 vSLAM

대체 텍스트: 스테레오 시각적 SLAM을 사용한 조밀한 복원.

스테레오 vSLAM

TUM RGB-D 데이터셋을 사용한 RGB-D 시각적 SLAM

RGB-D vSLAM

라이다 SLAM

라이다(Light Detection and Ranging)는 레이저 센서(또는 거리 센서)를 주로 사용하는 방법입니다.

레이저는 카메라와 ToF 등의 센서보다 훨씬 더 정밀하며 자율주행 차량과 드론처럼 빠르게 이동하는 물체와 관련된 응용 사례에 사용됩니다. 레이저 센서에서 얻어지는 출력값은 일반적으로 2차원(x, y) 또는 3차원(x, y, z) 포인트 클라우드 데이터입니다. 레이저 센서 포인트 클라우드를 사용하면 고정밀 거리 측정이 가능하며, SLAM 알고리즘을 적용한 지도 생성에도 효과적입니다. 포인트 클라우드를 순차적으로 정합하면서 움직임이 추정됩니다. 계산된 움직임(이동 거리)은 차량의 위치추정에 사용됩니다. 포인트 클라우드 간의 상대적 변환을 추정하기 위해 ICP(Iterative Closest Point) 및 NDT(Normal Distributions Transform)와 같은 정합 알고리즘을 사용할 수 있습니다. 또는 FPFH 특징을 기반으로 LOAM(라이다 주행거리 측정 및 지도작성)이나 FGR(Fast Global Registration)과 같은 특징 기반 접근법을 사용할 수 있습니다. 2차원 또는 3차원 포인트 클라우드 지도는 그리드 지도 또는 복셀 지도로 표현할 수 있습니다.

이러한 문제 때문에 자율주행 차량의 위치추정에는 바퀴 주행거리 측정, GNSS(범지구 위성 항법 시스템) 및 IMU 데이터 등의 기타 측정을 융합하는 작업이 수반될 수 있습니다. 창고 로봇과 같은 응용 분야에서는 2차원 라이다 SLAM이 흔히 사용되지만, UAV 및 자율주행에는 3차원 포인트 클라우드를 이용하는 SLAM이 흔히 사용됩니다.

2차원 라이다 SLAM 및 인자 그래프를 사용하여 실내 영역 지도를 작성할 수 있습니다.

2차원 라이다를 사용한 SLAM

SLAM을 사용하여 3차원 라이다 데이터에서 지도를 작성할 수 있습니다.

3차원 라이다를 사용한 SLAM

다중센서 SLAM

다중센서 SLAM은 SLAM 알고리즘의 한 유형으로, 카메라, IMU(관성 측정 장치), GPS, 라이다, 레이다 등을 포함한 다양한 센서를 활용하여 SLAM 알고리즘의 정밀도와 견고성을 강화합니다. 다중센서 SLAM은 다양한 센서의 보완적 강점을 사용하고 개별 센서의 제한 사항을 완화함으로써 탁월한 성능을 달성할 수 있습니다. 예를 들어, 카메라는 세부적인 시각적 데이터를 제공하지만 저조도 또는 고속 시나리오에서 불안정해질 수 있습니다. 반면 라이다는 다양한 조명 조건에 걸쳐 일관적인 성능을 보이면서도 특정 표면 재료에서 어려움을 겪을 수 있습니다. 다중센서 SLAM은 다양한 소스의 데이터를 통합함으로써 단일센서 기술에 비해 더 신뢰할 수 있는 솔루션을 제공합니다. 인자 그래프는 카메라, IMU, GPS와 같은 다양한 센서 유형을 통합하는 조정 가능한 모듈형 프레임워크입니다. 또한 인자 그래프는 데이터를 자세 인자로 변환함으로써 사용자 지정 센서 입력(예: 라이다 및 주행거리 측정)도 수용합니다. 이 기능을 활용하여 단안 시각적 관성 SLAM 및 라이다-IMU SLAM과 같은 다양한 다중센서 SLAM을 구성할 수 있습니다.

SLAM에서 흔히 생기는 문제

SLAM 알고리즘은 몇몇 실제 응용 분야에 사용되고 있지만 몇 가지 기술적 문제가 더 광범위한 용도로의 도입을 막고 있습니다. 다음 각각의 문제는 이를 타개할 수 있는 대응책이 있습니다.

1. 실제 값과의 상당한 편차를 초래하는 위치추정 오차 누적

SLAM 알고리즘은 순차적으로 움직임을 추정하고, 이 과정에서 약간의 오차가 발생합니다. 이 오차는 시간이 지나면서 누적되고, 따라서 실제 값과는 상당한 편차가 발생합니다. 이렇게 되면 지도 데이터가 붕괴되거나 왜곡되어 후속 탐색이 어려워질 수도 있습니다. 사각형 통로를 따라 주행하는 경우를 예로 들어 보겠습니다. 오차가 누적되면서 로봇의 출발점과 종료점이 더는 일치하지 않게 됩니다. 이를 루프 폐쇄 문제라고 합니다. 이와 같은 자세 추정 오차는 불가피합니다. 루프 폐쇄를 감지하고 누적된 오차를 수정하거나 상쇄하는 방법을 파악하는 것이 중요합니다.

출발점으로의 회귀 불능 (왜곡된 지도)

자세 그래프 생성 및 오차 최소화의 예.

다중센서 SLAM의 경우 센서의 정확한 보정은 필수적입니다. 불일치 또는 보정 오차는 센서 융합의 부정확함을 유발하고 시스템의 전체적인 기능을 저하시킬 수 있습니다. 인자 그래프 최적화는 카메라-IMU 시스템의 정렬 등 보정 과정에 추가적으로 도움이 될 수 있습니다.

이에 대한 대응책은 이전에 갔던 장소의 특징을 랜드마크로서 기억하여 위치추정 오차를 최소화하는 것입니다. 오차를 수정할 수 있도록 자세 그래프가 생성됩니다. 오차 최소화를 최적화 문제로 풀면 더욱 정확한 지도 데이터 생성이 가능해집니다. 이러한 종류의 최적화를 시각적 SLAM의 번들 조정이라고 합니다.

자세 그래프 생성 및 오차 최소화의 예.

자세 그래프 생성 및 오차 최소화의 예

2. 위치추정 실패 및 지도상 위치 상실

영상 및 포인트 클라우드 지도작성에서는 로봇의 움직임 특성을 고려하지 않습니다. 경우에 따라서는 이러한 접근법으로 인해 불연속적인 위치 추정값이 생성될 수 있습니다. 예를 들자면 1m/s로 이동하는 로봇이 갑자기 10m 앞으로 급속 이동하는 계산 결과가 표시되는 경우를 들 수 있습니다. 이러한 유형의 위치추정 실패 문제는 복원 알고리즘을 사용하거나 운동 모델과 다수의 센서를 융합하여 센서 데이터에 기반한 계산을 수행함으로써 방지할 수 있습니다.

운동 모델에 센서 융합을 사용하는 방법은 여러 가지가 있습니다. 널리 사용되는 방법은 위치추정에 칼만 필터링을 사용하는 방법입니다. 대부분의 차동 구동 로봇 및 사륜 차량은 일반적으로 비선형 운동 모델을 사용하므로 확장 칼만 필터와 입자 필터(몬테카를로 위치추정)가 흔히 사용됩니다. 때로는 무향 칼만 필터처럼 더 유연한 베이즈 필터를 사용할 수도 있습니다. 흔히 사용되는 몇 가지 센서를 꼽자면 AHRS(자세방위기준장치), INS(관성항법장치), 가속도계 센서, 자이로 센서, 자기 센서 및 IMU와 같은 관성 측정 기기를 들 수 있습니다. 차량에 장착된 휠 인코더는 종종 주행거리 측정에 사용됩니다.

위치추정에 실패할 경우 복원을 위한 대응책은 이전에 방문한 장소의 랜드마크를 키프레임으로 기억하는 것입니다. 랜드마크를 검색할 때는 고속 스캔이 가능한 방식으로 특징 추출 절차를 적용합니다. 영상 특징에 기반한 방법에는 BoF(Bag of Features) 및 BoVW(Bag of Visual Words)가 있습니다. 최근에는 딥러닝이 특징으로부터의 거리를 비교하는 데 사용되고 있습니다.

3. 영상 처리, 포인트 클라우드 처리 및 최적화에 소요되는 높은 계산 비용

차량 하드웨어에 SLAM 알고리즘을 구현할 때는 계산 비용이 문제가 됩니다. 계산은 대개 처리 능력이 낮은 소형 저전력 임베디드 마이크로프로세서에서 수행됩니다. 정확한 위치추정을 위해서는 포인트 클라우드 정합과 영상 처리를 높은 빈도로 실행하는 것이 매우 중요합니다. 게다가 루프 폐쇄와 같은 최적화 계산은 연산량이 큰 공정입니다. 문제는 그처럼 계산적 비용이 큰 공정을 임베디드 마이크로컴퓨터에서 실행하는 방법입니다.

다양한 공정을 병렬로 실행하는 것도 대응책이 될 수 있습니다. 정합의 전처리 공정인 특징 추출과 같은 공정은 병렬화에 비교적 적합합니다. 멀티코어 CPU, SIMD(Single Instruction Multiple Data) 계산 및 임베디드 GPU를 사용해서 처리하면 경우에 따라 속도를 더욱 향상할 수 있습니다. 또한 자세 그래프 최적화는 비교적 긴 사이클에 걸쳐 수행될 수 있으므로 우선순위를 낮추고 일정한 간격으로 이 공정을 수행하는 것으로도 성능을 개선할 수 있습니다.

MATLAB을 사용한 SLAM

SLAM 프론트엔드를 위한 센서 신호 및 영상 처리:

SLAM 백엔드를 위한 2차원/3차원 자세 그래프:

SLAM 맵 작성기 앱을 사용한 점유 그리드:

  • MATLAB 작업 공간 또는 rosbag 파일에서 2차원 라이다 데이터를 가져와 점유 그리드 생성
  • 루프 폐쇄를 찾고 수정하며 경로 계획을 위해 지도를 점유 그리드로 내보내기

ROS Toolbox를 사용하여 MATLAB 및 Simulink®에서 독립형 ROS 노드를 배포하고 ROS 사용 로봇과 통신할 수 있습니다.

MATLAB Coder™GPU Coder™를 사용하여 MATLAB 및 Simulink에서 개발된 영상 처리 및 내비게이션 알고리즘을 임베디드 마이크로프로세서에 배포할 수 있습니다.