로봇이 이곳 저곳을 돌아다니기 위해서는 인간처럼 지도가 필요합니다.
하지만 사람들이 항상 GPS에만 의존할 수 없는 것처럼 로봇도 마찬가지죠. 특히 로봇이 실내에서 작동하는 경우에는 GPS에 의존하기가 더욱 어렵습니다. 게다가 GPS는 실외에서 정확도가 떨어집니다. 실외에서 안전하게 주행하기 위해서는 몇 인치 차이의 세밀한 정밀도가 아주 중요하기 때문이죠.
그래서 로봇은 동시다발적 지역화와 매핑(Simultaneous localization and mapping, SLAM)을 사용해서 주변을 탐색하고 지도를 만든답니다. 이곳 저곳을 돌아다니며 SLAM을 사용해 자신만의 지도를 제작하죠. 또한 수집한 센서 데이터와 이전에 경로 탐색을 위해 수집했던 센서 데이터를 결합해 스스로의 위치를 파악할 수 있습니다.
이는 GPU의 병렬 처리 기능에 적합한 다양한 알고리즘을 사용해서 센서 데이터를 정렬해야 하는 복잡한 다단계 과정입니다.
1980년대부터 사용되어 온 SLAM의 형태는 다양합니다. 이 포스팅에서는 SLAM이 로봇을 위한 엔비디아 아이작(Isaac)에 어떻게 적용되는지에 초점을 맞춰보겠습니다.
센서 데이터 정렬하기
컴퓨터는 로봇의 위치를 지도나 타임라인 위에 있는 단순한 타임스탬프[1]로 인식합니다.
[1] 어느 시점에 데이터가 존재했다는 사실을 증명하기 위하여 특정 위치에 표시하는 시각 (출처: NAVER 지식백과)
로봇은 주변 센서 데이터를 초 단위로 수집하죠. 카메라 영상은 심층 영상 측정을 위해 초당 최대 90회씩 촬영됩니다. 정확한 범위 측정에 사용되는 LiDAR 영상은 초당 20회씩 촬영됩니다.
이러한 측정점들은 로봇이 이동할 때 이전 위치와 지도 상의 위치를 비교해서 얼마나 멀리 이동했는지 측정하기 위해 활용됩니다.
움직임 예측하기
휠 오도메트리(Wheel odometry)라고 알려진 차의 주행 거리 측정 기술은 로봇의 바퀴 회전을 통해 로봇이 얼마나 이동했는지 측정합니다. 관성 측정 장치 역시 로봇의 위치를 추적하는 방법으로 속도와 가속도를 측정하는 데 사용되죠.
모든 센서 스트림은 로봇의 움직임을 보다 정확하게 측정하기 위해 센서 융합을 통해 종합적으로 분석됩니다.
이는 난수를 이용해 함수의 값을 확률적으로 계산하는 알고리즘(몬테 카를로 방법)에 의존하는 칼만(Kalman) 필터 알고리즘과 입자 필터 알고리즘을 사용해서 이러한 센서 입력을 융합할 수 있답니다. 쉽게 말해, 정교하고 어려운 수학적 공식을 이용하는 거죠.
센서 데이터 등록하기
센서 데이터 등록은 두 측정점 사이 또는 측정점과 지도 사이에서 발생할 수 있습니다.
개발자는 엔비디아 아이작 SDK를 사용해 스캔-맵 일치(scan-to-map matching)로 로봇의 위치를 지정할 수 있습니다. SDK에는 HGMM(Hierarchical Gausic Mixture Model)이라는 엔비디아 연구진이 개발한 알고리즘이 있으며, 이 알고리즘은 다른 방향에서 본 두 개의 점자료(point cloud)를 정렬할 수 있습니다.
베이시안(Bayesian) 필터는 연속적인 센서 데이터 스트림과 모션 추정치를 사용해서 로봇이 어디에 있는지 수학적으로 알아내기 위해 적용됩니다.
초시간을 위한 GPU 계산
위에서 설명한 매핑 계산은 알고리즘에 따라 초당 20-100회 실행되는데요. 이는 엔비디아 GPU의 처리 능력으로 실시간으로 수행될 수 있답니다. 로봇 공학을 위한 이상적인 젯슨AGX 자비에는 소형 패키지로 GPU 워크스테이션급 32테라롭의 성능을 제공합니다
점자료(point cloud) 또는 심층적인 이미지를 정렬하는 대량 고속 처리 작업은 엔비디아 GPU에서 CPU에 비해 최대 20배 더 빠르게 수행할 수 있습니다.
젯슨 나노가 제조업체들에게 이와 유사한 성능적 도약을 가능하게 했죠.
현지화를 위한 시각적 주행 거리 측정
시각적 주행 거리 측정은 영상을 유일한 인풋으로 활용해 로봇의 위치와 방향을 복구하는 데 사용됩니다.
엔비디아 아이작은 최소 초당 30프레임으로 실시간으로 위치를 안내하는 스테레오 방식의 시각적 주행 거리 측정 기능(카메라 2개)을 지원하며, 소형 젯슨 슈퍼컴퓨팅 모듈로 구동되는 모든 제품에서 사용 가능합니다.
로봇 개발자는 아이작에서 기본적으로 제공되는 스테레오 시각적 주행 거리 기능을 사용해 로봇의 위치를 정확하게 계산, 경로 탐색을 할 수 있습니다.
시각적 주행 거리 측정 기능은 젯슨 나노 개발자 키트에 포함돼 있습니다. 다만 SLAM용 아이작에는 아직 포함되어 있지 않습니다.
시각적 주행 거리 측정에 대한 향후 개발은 아이작을 통합해 SLAM 수준으로 끌어올릴 수 있습니다. 현재 SLAM은 부정확한 시각적 주행 거리 측정 결과로부터 경로 탐색 오류를 제거하기 위해 로봇의 위치와 방향의 지도 복구를 위한 점검으로 사용되죠.
현지화를 위한 지도 구현 방법
지도는 세 가지 방법으로 만들어 질 수 있습니다.
첫 번째 방법은 누군가가 로봇을 수동으로 감독하고 운전하는 동안 젯슨 장치에서 매핑 알고리즘을 실행하는 것입니다.
두 번째 방법은 로봇의 아이작 응용 프로그램이 워크스테이션에서 매핑 알고리즘을 실행하는 아이작 응용 프로그램으로 데이터를 스트리밍하도록 하는 것입니다.
가장 추천하는 세 번째 방법은 아이작의 간편한 녹음 위젯을 사용해서 광선 레이더 스캔 및 시각적 주행 거리 측정 데이터를 파일에 기록하는 겁니다. 이렇게 하면 로그 매핑 응용 프로그램을 사용해서 오프라인에서 매핑을 수행할 수 있죠. 또한 로봇을 몇 번씩 주행 시키지 않고도 최적화된 지도에 대한 매핑 알고리즘의 튜닝 매개 변수를 사용할 수 있습니다.
현지화와 경로 탐색을 위한 지도를 만들기 위해 2019.1 버전의 엔비디아 아이작 SDK는 OpenSlam의 Gmapping과 구글의 카르토그래퍼(Cartographer) 알고리즘을 지원, 사용합니다.
사용자는 아이작의 모듈화를 통해 다른 타사 라이브러리를 통합하거나 자체적으로 구현한 라이브러리에 연결할 수 있습니다. 아이작은 광선 레이더 또는 카메라를 사용해서 얻은 2D 범위의 정밀 데이터를 이러한 매핑과 알고리즘에 제공합니다. 또한 아이작은 휠 속도, 관성 측정 장치 데이터, 컴퓨터 비전을 통해 계산된 시각적 주행 거리 측정 정보를 제공합니다.
LiDAR SLAM을 위한 점유 그리드
로봇이 LiDAR 또는 카메라를 사용해서 주변 환경을 감지할 때, 아이작은 사용자가 설정한 해상도로 로봇 환경의 점유 격자 지도를 작성합니다. 이 2D ‘로컬 지도’는 지도의 각 셀이 차단되었는지 또는 비어 있는지에 대한 정보를 제공해서 로봇이 내비게이션 경로를 계획할 수 있도록 합니다.
아이작에서 잘 만들어진 점유 그리드는 아이작 내비게이션 스택에서 자연스럽고 빠르며, 신뢰할 수 있는 핵심 장애물 회피 장치입니다.