SLAM
(Simultaneous Localization and Mapping) : 동시적 위치추정 및 지도작성
직역한 것 처럼 두 가지 목적의 작업을 수행하여야 합니다.
1. Localization (위치추정)
-> 어떤 공간에 어느 좌표에 존재하는지,
시간이 흐르면서 로봇의 위치가 바뀌었을 때 변화하는 위치를 추정 즉, 모션추정을 해야합니다.
2. Mapping (지도작성)
-> 어느 공간을 표현하는 방법 중 하나.
버드아이뷰 지도, 공간 속에 중요한 물체들의 위치를 모아둔 지도, 3D 가상공간으로 mapping한 지도 방법이 다양하게 존재합니다.
또한 물체를 2D로 표현할지, 3D로 표현할지도 있는데 3D 같은 경우 point cloud, point끼리 이어 선으로 표현, mapping surface, surface들의 집합체로 표현을 할지, 모든 point + line + surface 다 포함하고 있는 mash로 표현할지 등이 있습니다. 이러한 표현들 을 모델이라고 부릅니다. 즉, 실제 세상을 우리가 어떠한 데이터로 변환하고 반대로 이 데이터들로 실제 세상을 표현할 수 있는 수학적 지 도를 모델이라고 합니다.
따라서 SLAM을 한다라는 것은 정한 모델을 바탕으로 실제 세상을 표현할 수 있어야 합니다.
SLAM 기술 중 하나는 사전 정보를 두지 않는다는 것입니다.
사전 정보 없이도 문제를 해결할 수 있습니다.
SLAM의 기원
SLAM은 모바일 로보틱스로부터 발전됐습니다.
초기 로봇 기술은 단순 반복 작업에 불구하여 작업에 대한 한계가 발생합니다.
특히 이동에 관한 문제인데요.
로봇의 수준에 이르기 위해선 기계가 이동하면서 로봇이 알아서 주변을 인지하고, 공간 속에서 경로를 계획할 수 있어야되고, 그 계획된 것을 바탕으로 이동해야 합니다.
주변을 인지 : 갈 수 있는 공간과 갈 수 없는 공간을 구분, 벽 또는 장애물 구분
-> 1D Lidar라고 불리는 range finder sensor로 측정 (Exteroceptive sensing)
로보틱스는 움직이는 공간에 대해서도 잘 인식을 해야하지만 자기 자신(ego)에 대한 움직임도 잘 고려해야함.
-> IMU sensor, wheel encoder, GPU(Proprioceptive sensing)
Exteroceptive sensing의 output은 Priprioceptive sensing input에 영향을 주고
Priprioceptive sensing의 output은 Exteroceptive sensing의 input에 영향을 줍니다.
이 메카니즘은 금방 한계를 보였는데 그 이유는 센서값들이 확률적이기 때문에 최적의 값을 구하기 위해선 여러 센서를 사용하는 게 좋지만 센서가 많을수록 비용이 올라간다는 단점이 있습니다. 또한 range finder sensor 경우 기다리면서 여러 개의 센서값을 얻어서 최적의 값을 구할 수 없습니다. 왜냐면 하나의 센서로 부터 여러 값을 취득할 수 없기 때문입니다. 이미 한 번 움직였고 센서값은 나왔고 또 움직인다면 위치값이 변하기 때문입니다.
보완 방법
1. 여러 개의 Proprioceptive sensor를 탑재해서 여러 개의 sensor값들을 얻어내서 평균값(또는 중간값)을 얻어내는 방법
(단점: 가격이 올라감, 센서마다 정확도 모두 다르다고 했을 때 어떤 것이 노이즌지 아닌지 알 수 없다는 것)
2. Exteroceptive sensing을 이용해서 거리등을 다시 봄으로써 Proprioceptive sensing 정보가 맞는지 확인하는 방법
(단점: Exteroceptive와 Proprioceptive sensing 조차 오차가 날 때 어느 값을 따라야 하는지에 대한 문제, Exteroceptive sensing 을 하는 동안에는 여러 센서값을 샘플링하기 위해서 로봇은 멈춰서 기다려야 하는데 로봇이 움직이면서 샘플링 할 때마다 자주 멈춘다면 모바일 로봇의 평균 이동 속도가 엄청 느려지게 됩니다. 심지어 센서를 취득하는 동안에 주변에 움직이는 객체가 있다면 Exteroceptive sensing도 실패하게 됩니다.)
목표
1. 지속적으로 움직이면서 모션과 주변환경을 인지할 수 있어야 한다.
2. Proprioceptive sensing과 Exteroceptive sensing 두 정보 모두 안정적으로 취득되어야 한다.
Proprioceptive sensing을 집중해서 보는 Localization과
Exteroceptive sensing을 집중해서 보는 Mapping 기술이 각각 발전되다가
혼합된 Simultaneous Localization and Mapping, SLAM이 발전된 것입니다.
Monte Carlo Localization
:지도가 사전정보로 주어졌을 때, particle filter 기법을 사용하여 위치 추정하는 기술.
단계
1. Initialization
: Configuration space에 particle(로봇이 존재할 수 있는 모든 위치)을 뿌리는 단계
2. Motion update
:뿌려진 particle들마다 Proprioceptive sensor들로부터 들어온 모션 정보를 추가하여 위치 정보를 업데이트 하는 단계
(particle이 벽으로 들어가버린다거나 존재할 수 없는 위치에 있는 particle들은 삭제)
3. Measurement
: 뿌려진 particle들마다 Exteroceptive sensor들로부터 들어온 observation 정보를 치우는 단계
4. Weight update
: 해당 위치에 실제로 3번에서 나온 observation 값들이 나올 수 있는지 particle에 현재 위치 정보와 주변 환경에 대한 정보가 서로 맞 는지에 대해 계산하는 단계
5. resampling
: 위치 정보와 주변 환경에 대한 인식값이 잘 맞아 떨어지는 particle들만 남기고, 그 주변에서 particle을 다시 새로 뿌려서 resampling 하는 단계
Monte Carlo Localization 지도 정보에 더불어서 여러 센서값들을 누적해나가면서 점점 더 정답에 가깝게 만듭니다.
Monte Carlo Localization은 지도에 의존적이므로 지도에 대한 사전 정보가 없다면 쓰기 어려워집니다.
그래서 Proprioceptive sensing이 먼저냐 Exteroceptive sensing이 먼저냐에 대한 딜레마가 생겨 사전정보에 의존적이지 않은 SLAM이 발전하게 됩니다.
고품질의 사전 정보가 있을 때는 localization과 mapping만으로도 충분히 문제를 풀어나갈 수 있고,
이러한 정보가 갖춰지지 않았을 때엔 SLAM을 사용합니다.
(업계에서는 localizaion과 mapping, SLAM을 구분하지 않고 모두 개발한다고 합니다.)
SLAM에서 사용할 수 있는 센서
■ IMU (Inertial Measurement unit)
:관성을 측정하는 센서
저렴하고 미세하고 높은 주사율을 가지고 있지만 높은 주사율인만큼 drift도 빠르게 누적됩니다. 따라서 Camera, Lidar, GNSS를 이용하여 보정을 해야만 합니다.
■ Wheel encoder
○ 종류: Brush, Optical, Magnetic, Inductive, Capacitive, ···
전통적으로 주행 중에 자동차 위치 추정하는 데에는 wheel encoder를 이용한 위치 추정 알고리즘이 많이 발전되고있습니다.
이런 기법들을 *dead reckoning 라고 합니다. 하지만 시간이 오래 지날수록 에러값도 누적이 된다는 단점이 있습니다.
GPS 정보로 Wheel odometry에서 쌓이는 에러를 보정하는 방법도 있지만 빠르게 제어해야하는 실시간 주행 시나리오 경우 위험한 방 식이 될 수 있습니다. 에러값 이외에도 바퀴가 헛도는 경우, 타이어 바람이 빠지는 경우, 마찰열로 인해 타이어 팽창하는 경우 등 다양한 에러가 존재합니다.
dead reckoning: 모션값을 누적해서 차체의 위치를 추정하는 기법
■ GNSS (Global navigation satellite system)
: Ego-motion을 추정하기 때문에 proprioceptive sensor 같지만, 외부 비콘을 이용하기 때문에 exteroceptive sensor 입니다.
보통 10~200m 오차가 발생하며 많게는 50m~200m 오차도 발생 합니다. RTK-GPS, DGPS를 사용할 경우 오차가 수십 mm~ cm 단위까지 내려오지만 가격이 엄청 비쌉니다. 또한 GNSS도 여러가지 error가 존재합니다. GNSS 신호가 일직선으로 송수신되어야하 지만 고층 빌딩에 의해 신호가 반사되면서 체공 시간이 늘어나게 되어 오차가 발생합니다. 이 문제를 multi-path 문제라고도 합니다. 당연히 실내/지하에선 사용이 불가능 합니다.
■ LiDAR (Light detection and ranging sensors)
: 주변 환경을 3D point cloud 형태로 바로 알 수 있습니다.
단점으로는 가격대가 높고 카메라에 비해 resolution이 낮습니다. LiDAR 또한 Multi-path 문제가 존재하는데 예를 들어 다른 차량이 쏜 신호를 자기 자신 차량이 받아 오류가 생기거나 서로 쏜 신호가 부딪혀 오류가 생기는 등의 문제가 발생합니다.
■ RADAR (Radio detection and ranging sensor)
: 도플러 효과를 이용해서 이동중인 물체의 속도 추정이 가능한 센서 입니다. 전파의 종류를 바꿈으로써 near-range와 far-range도 선택 가능합니다.
장점으로는 날씨 영향을 받지 않고 다른 센서에서는 얻지 못하는 속도값을 추정 가능합니다.
단점으로는 작은 물체들은 detection이 잘되지않으며 LiDAR 보다 낮은 resolution을 가지고 있습니다. RADAR도 마찬가지로
Multi-path 문제가 발생합니다.
■ Ultrasound
: 초음파를 이용합니다. 가격이 저렴하고, Near-range에서 잘 작동은 하지만 물체의 형태는 잘 추정하지 못하며, 노이즈가 심합니다. 따라서 하나의 센서만 사용하는 것이 아니라 다수의 Ultrasonic sensor를 사용하여 평균값을 사용하는 경우가 많습니다.
■ Camera
: photodiode를 통해 빛의 세기를 측정하고 그 빛의 세기를 픽셀 밝기 값으로 변환해주는 센서 입니다.
아날로그 전압 신호를 analog to digital 신호 변환기를 통해 0~255값을 반환합니다. 여기서 광학 필터를 사용하여 특정색만 통과시 켜 color image를 구성합니다. 카메라 센서는 픽셀마다 3ch값을 갖기 위해 debayering프로세스를 통해 RGB 색으로 재구성 합니다. 카메라 센서는 다른 센서보다 dense한 데이터를 줍니다. 모든 픽셀들이 row와 column이 규칙에 맞춰서 구조적으로 배치가 되어있고, 또 모든 픽셀들이 값을 가지기 때문입니다. 이러한 dense한 데이터들을 rule만 잘 맞춰준다면 정확한 추론, 복잡한 추론이 가능해집니 다. 이미지의 경우 dense하기 때문에 texture에 대한 정보를 안정적으로 얻을 수 있고, 이 texture 정보를 가지고 추론하기 때문에 딥러닝이 이미지에 적용됐을 때 잘되는 이유이기도 하면서 SLAM에서 texture 기반 tracking이 잘 되는 이유 입니다. 치명적인 단점은 3D 공간을 2D 이미지로 표현하다보니 depth 정보가 손실된다는 점입니다.
■ Microphones
: 공기의 진동을 transducer 센서를 통해 전기 신호로 변환하는 센서 입니다. 여러 개의 마이크를 통해 소리의 근원에 대한 위치를 삼각 측량을 통해 계산할 수 있다고 합니다. 오디오는 노이즈도 많고 geometry가 부족하여 당장 상업화 하기엔 어려운 센서 입니다.
SLAM의 종류
SLAM은 사용하는 센서에 따라 종류가 달라집니다. 또한 어느 Exteroceptive sensor 사용하는 지에 따라 이름이 붙습니다.
카메라의 경우 Visual-SLAM이라고 합니다. LiDAR를 사용한다면 LiDAR SLAM, RADAR를 사용한다면 RADAR SLAM 입니다.
Extreoceptive sensor를 쓸 때 하나만 쓰라는 법은 없습니다. 여러 대의 카메라를 사용해도 되고, 카메라와 라이다를 함께 사용할 수도 있습니다. 여러 개의 센서 타입을 섞어쓴다면 이름에 추가로 붙습니다.
예를 들어 카메라와 라이다를 쓴다면 Visual-LiDAR SLAM, 카메라와 휠인코더를 사용한다면 Visual-Wheel encoder SLAM 이라고 하겠죠? 여러 대의 카메라는 뭐라고 지칭할까요? 같은 exteroceptive sensor면 한 번만 사용됩니다.
Visual-SLAM (VSLAM)
입력 이미지를 딥러닝 네트워크와 공유해서 딥러닝을 돌리는 동시에 VSLAM도 돌릴 수 있습니다. VSAM은 2D 이미지에서 3D 공간을 추론할 수 있는 정보들을 영상처리를 통해 정제를 하고, 이 정보를 기반으로 3D 공간을 재구축 합니다. 이미지에서 두드러진 texture 정보를 이용해서 3D 공간을 표현하는 경우가 많은데 texture 정보는 조명 변화에 민감하기 때문에 갑작스런 조명 변화에 대응하기 어렵고 너무 어둡거나 너무 밝으면 작동하지 못하는 취약점이 존재합니다. Camera는 depth 정보가 소실되기 때문에 depth에 관한 정보를 다시 추정해야 하는데 이러한 방식은 다른 슬램 방식과는 다른 VSLAM만의 방법입니다.
카메라에서 생겨나는 노이즈는 카메라 칩이나 렌즈에서 발생합니다. 카메라 칩에서 나타나는 에러는 전자기학쪽에 문제가 나는 경우가 많습니다. 예시로는 아날로그를 디지털로 변화환하면서 나타나는 노이즈, 전자이동에서 나타나는 노이즈가 있을 수 있습니다.
렌즈에서 나타나는 노이즈는 3D 세상에서 2D 이미지로 차원 변환하면서 나타나는 에러 입니다. 차원 축소를 할 때에는 렌즈에 대한 수학적인 모델링이 충분히 되어야하는데 이부분에서 에러가 나타나기도 합니다. 이 에러들이 어떠한 과정 때문에 어떻게, 얼마나 노이즈가 생기는 지에 대해 이해하기 위해서는 정확히 어떤 물리적인, 전자적인, 수학적인 프로세스가 이뤄지는지 이해헤야합니다.
VSLAM Sensors
- 1 camera - Monocular camera
- 2 camera - Stereo camera
- N camera - Multi camera
- RGB-D Camera (Depth camera)
Multi camera는 Stereo camera와 다른 알고리즘을 사용하진 않기 때문에 함께 묶어서 이야기 하는 경우도 많다고 합니다.
IMU와 Camera를 같이 사용하는 Visual-Inertial Odometry가 유행하고 있는데 이러한 방법론들이 최근에 인기를 끌고 있는 이유는 실제 해상의 스케일(metric scale)을 Monocular VSLAM에 얹어줌으로써 Monocular VSLAM에서도 metric scale인 3D 세상을 복원할 수 있게 해줍니다. 이에 더불어 IMU 센서로부터 받은 motion prior를 통해서 훨씬 더 정확한 정보를 더 빠르게 추정할 수 있습니다. IMU 센서를 사용하지 못할 때는 Wheel odometry를 이용하여 mertic scale를 얹는 방법도 종종 사용됩니다. 하지만 Wheel odometry는 대부분 가벼운 알고리즘을 사용하게 되는데 이런 경우 모션 정보가 앞, 뒤의 움직임과 좌우의 움직임, yaw값으로의 회전인 3축만 나오기 때문에 6축을 요구로 하는 VSLAM 방식에서는 충분한 정보를 제공하지 못한다는 단점이 있습니다.
Monocular VSLAM
https://www.youtube.com/watch?v=C6-xwSOOdqQ
위 영상은 Monocular VSLAM 논문 중 하나인 DSO 입니다. DSO는 direct tracking 기법을 사용해서 최적화된 모션을 추정하는 방법을 사용합니다. DSO는 이미지에서 어떠한 픽셀을 봤을 때 픽셀과 그 주변 픽셀을 비교해서 픽셀의 밝기값의 변화가 큰 픽셀들만 찾아서 tracking 합니다. 그 결과 edge에 있는 포인트들이 많이 검출 되는 것을 알 수 있습니다. 좌하단에 나온 KF이미지들은 과거의 이미지 입니다. 과거의 이미지와 현재의 이미지의 정보를 조합해서 다양한 시점에서 본 2D 이미지 정보를 기반으로 3D 공간을 추론할 수 있습니다. 우측에 빨간색 피라미드는 현재 카메라 위치이며, 파란색 피라미드는 과거의 카메라 위치 입니다. Monocular VSLAM은 주로 sparse SLAM쪽을 연구합니다. Dense SLAM을 못하는 건 아니지만 Sparse SLAM의 계산량이 압도적으로 적어 Sparse SLAM으로 연구합니다.
Stereo / Multi camera VSLAM
인접한 카메라 정보들을 삼각측량으로 거리를 파악하고 이를 통해 metric scale의 거리, 깊이값을 추정할 수 있습니다. Stereo/Mulit camera VSLAM을 잘 사용하기 위해서는 베이스라인 정보가 정확하게 구해져야 합니다. 조금이라도 오차가 있다면 최적의 3D공간과 모션 정보를 계산하는 SLAM의 모든 과정에 error가 포함되어지기 때문입니다. 문제는 완벽한 베이스라인 정보를 알 수 없어서 섬세한 캘리브레이션 단계를 거쳐야하고 여기에 조금의 에러는 포함될 수 밖에 없습니다.
https://www.youtube.com/watch?v=Ye8xcKH4otY
오른쪽 이미지에서 초록색 선은 IMU센서가 그리는 드론의 위치이고 빨간색이 실제 드론의 Ground Truth 위치값입니다. 흰 점은 현재 이미지에서 찾은 모든 3D 공간에 대한 표현점들이고, 빨간점들은 최적의 모션 값을 추정하기 위해 계산에 사용되는 3D 공간의 점들 입니다. 백엔드로는 MSCKF를 사용하고 있는데 Monocular로도 사용할 수 있고 Stereo로도 사용할 수 있지만 MSCKF는 모션 추정에 특화된 가벼운 알고리즘 입니다.
다음은 OmniSLAM인데요. 앞에 OpenVINS SLAM과는 다르게 dense mapping에 초점을 둔 방식 입니다.
https://www.youtube.com/watch?v=RFhH4j0gzsI
최소한의 카메라 장비로 주변 환경을 완벽하게 매핑하기 위해서 초광각 카메라 4개를 사용하여 주변 시야 360도를 전부 커버할 수 있다고 합니다.
RGB-D VSLAM
: Structured light, ToF(Time-of -Flight) 센서를 이요한 카메라를 사용하는 기법
RGB 이미지와 Depth 이미지를 한 번에 알 수 있습니다. 하지만 서로 같은 이미지를 의미하지 않습니다. RGB 센서와 Depth 센서는 가깝긴 하지만 서로 어느 베이스 라인을 가지고 떨어져있기 때문에 이미지들이 서로 정확하게 겹치지않습니다. 또한 해상도도 서로 같지 않을 수 있습니다. 예를 들어 RGB 이미지는 640*480인 반면, Depth 이미지는 320*120으로 나타나는 경우가 있습니다!
따라서 두 이미지를 겹치게 하려면 정합하는 작업이 필요합니다. 정합작업을 거친 데이터가 있다고 한다면 이를 통해 한 프레임의 센서 데이터만으로도 3D 공간을 mertic scale로 복원을 할 수 있습니다. RGB-D센서는 Depth를 따로 측정하지 않아도 자동으로 Depth값을 뽑아주기 때문에 편하지만 실외에서 사용이 불가능(적외선만 사용하기 때문에 햇빛의 간섭이 존재)하고 10m가 넘어간다면 오차가 생길 수 있습니다.
본 내용은 자율주행데브코스 장형기 강사님의 강의 내용을 요약한 것임을 밝힙니다.
'자율주행 데브코스 4기 TIL > SLAM' 카테고리의 다른 글
카메라 센서의 구조 (0) | 2023.02.24 |
---|---|
Camera projection (0) | 2023.02.23 |
Projective geometry (0) | 2023.02.23 |
3D Rigid Body Motion (0) | 2023.02.23 |
SLAM 이론 공부 (0) | 2023.02.22 |