ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VIO, IMU, INS
    SLAM 2020. 9. 3. 16:07

    1. Visual-Inertial Odometry (VIO)

     

     

    기존의 Visual Odometry는 연속된 카메라 이미지들을 비교해서 프레임간의 RotationTranslation을 추정하고, 이 변화들을 쌓아가면서 카메라의 움직임을 트랙킹한다.

     

    Visual-Inertial Odometry (이하 VIO)는 기존에 사용했던 Visual (이미지)에 더불어 Inertial (관성) 값을 읽을 수 있는 센서를 함께 사용한다.

     

    Inertial 값을 읽기 위해 보편적으로 Inertial Measurement Unit (이하 IMU) 센서를 사용한다.

     

     

     


     

    2. IMU란?

     

     

    IMU란 관성 센서다.

    관성 센서란 질량을 가진 무언가의 속도가 변할 때의 저항력을 측정하는 장치다.

     

    관성에는 두가지 종류가 있다.

    • 회전 관성 (Moment of inertia)
    • 직선 관성 (Linear inertia)

    회전 관성은 물체가 회전할 때, 회전에 대해 저항하는 관성이다.

    직선 관성은 물체가 회전하지 않고 이동할 때, 속도에 대해 저항하는 관성이다.

     

     

    IMU는 Rate-gyroscope (자이로 계)와 Accelerometer (가속도계)로 이뤄져있는데, 여기서

    • Rate-gyroscope (자이로 계)를 이용해서 xyz 축에 대한 회전 관성을 측정하고,
    • Accelerometer (가속도계)를 이용해서 xyz 축에 대해 직선 관성을 측정한다.

    이 때, 직접적으로 회전관성과 직선관성을 측정하는 것이 아니라

    • Rate-gyroscope (자이로 계)를 통해 각속도 (angular velocity)를 측정하고,
    • Accelerometer (가속도 계)를 통해 선형 가속도 (Linear acceleration)을 측정한다.

     

     


     

    3. IMU detail

     

    IMU는 6DOF IMU의 경우 3축 linear acceleration (선형 가속도)와 3축 angular velocity (회전 속도 / 각속도)를 측정할 수 있다. IMU는 보통 최소 100Hz 정도의 업데이트 속도를 가지고 있다. 그렇기 때문에 30Hz/60Hz의 보편적인 속도를 가진 카메라와 함께 사용하면, 카메라 프레임 사이에 IMU 값들이 몇개씩 나타나게 된다.

     

    IMU의 linear acceleration과 angular velocity의 값을 적분하면 translation과 rotation 값을 얻을 수 있다.

    이 프로세스를 Dead-reckoning이라고 한다. 하지만 IMU는 구조 상 높은 센서 노이즈를 가지는데, 이 노이즈가 적분 과정을 거치면서 translation과 rotation은 큰 에러를 내포하게 되고, 이 값들로 state estimation을 진행하면 금방 실제 위치에서 벗어나는 것을 볼 수 있다.

     

    하지만 이 에러들을 카메라로 추정한 정확한 state 값으로 보정을 해준다면 IMU state도 꽤 정확해질 수 있다.

    여기로부터 VIO의 기본적인 아이디어, "IMU로 빠른 state estimation을 하면서, 에러가 누적될 때는 카메라로 추정한 정확한 state 값으로 보정을 해준다" 가 된다.

     

     

     

     

    카메라 : 주위 환경을 이용해서 자세 추정 가능 (i.e. exteroceptive sensor). 속도는 보편적으로 30/60Hz. 자세 추정의 정확도가 높은 편

    IMU - 센서 내부 정보를 적분하여 자세 추정 가능 (i.e. proprioceptive sensor). 속도는 최소 100Hz며, 1000Hz가 넘는 경우도 있음. 자세 추정의 정확도는 시간이 지날수록 발산함 (근데 매우 빠르게 발산함)

     

     

     


     

     

    4. INS란?

     

     

    Inertial Navigation System (이하 INS)는 관성 항법 장치로 IMU+GPS 퓨전을 이용한 방법이다.

    카메라 상태 추정 대신 GPS 신호로 Global positioning을 한다고 생각하면 된다. 

     

    자기의 위치를 감지하여 목적지까지 유도하기 위해 만들어졌으며 악천후나 전파 방해의 영향을 받지 않는다고 하는 장점을 가지지만, 긴 거리를 이동하면 오차가 누적되어 커지므로 GPS 능동 레이다 유도 등에 의한 보정을 더해 사용하는 것이 보통이다.

     

     

     


     

     

    5. 각각의 장단점

     

     

    VO

    1. 단안 카메라 (monocular camera)를 사용할 때는 scale에 대한 정보를 얻을 수가 없다 (Scale ambuguity). 움직인 경로와 주변 map에 대한 공간적 비율은 일치하지만, 실제 metric 단위 (m, cm, mm) 등으로 변환하기 위해서는 이미 알고있는 패턴을 사용해야하는 단점이 있다. Visual odometry / SLAM을 사용하는 이유 중 하나는 처음 보는 환경 (i.e. unknown map / geometry)에서 카메라 위치 추정 또는 맵핑을 하려고 함인데, 이미 알고있는 패턴 (i.e. known pattern / geometry)를 줘야한다는 점이 사용성을 급격하게 떨어트린다.

    2. 기본적으로 카메라는 30 Hz나 60 Hz 정도의 속도를 가지고 있다. 물론 이 이상의 카메라들도 있기는 하지만, 이 경우에는 특수한 목적을 가진 machine vision 카메라들에 해당되며 이 카메라들 또한 resolution을 작게 만들거나 큰 프로세서 + 이미지 버퍼 + 쿨러를 장착해야하는 단점이 있다. 통상적으로 사용되는 이미지 센서들은 30 Hz나 60 Hz가 대부분인데, 이는 Visual odometry 알고리즘이 아무리 빨라봐야 최고 속도는 60 Hz라는 것이 된다. 빠르고 정확하게 움직임을 트랙킹해야하는 시나리오 (e.g. 고속도로 자율주행, 드론 자율비행)에서 60 Hz는 너무 느린 속도가 될 것이고, 이는 로봇의 이동속도에 제한을 두게 된다.

    3. Feature-based Visual Odometry일 경우, 매 프레임마다 움직임 추정을 위해 특징점 매칭이 요구된다. 안정적으로 Rotation / Translation을 추정하기 위해 최소한으로 필요한 매칭의 수가 있는데, 1. 특징점이 뽑히지 않는 (또는 없는) 환경, 2. 움직이는 객체가 카메라 프레임을 많이 차지하는 경우, 3. 카메라 이미지에 모션블러가 많이 생길 경우, 특징점 매칭에 실패하여 트랙킹에 실패하게 된다.

    4. Visual Odometry의 파이프라인을 살펴보면, 두개의 연속된 카메라 프레임에서 공통된 특징점을 (feature) 찾고 삼각측량 (triangulation)를 수행하는 부분이 있다. 삼각측량을 위해서는 이 카메라 프레임들이 꼭 떨어져있어야하는데 (i.e. 프레임들간 translation이 0 이상이여야한다 == baseline), Pure Rotation 움직임의 경우 이 baseline이 없기 때문에 계산이 불가능해진다. 이 때문에, pure rotation 움직임을 할 경우 Visual Odometry / SLAM이 트랙킹 실패로 이어지기도 한다.

     

     

     

     

    INS

    1. GPS 신호는 실내에서 작동하지 않는다. INS는 IMU의 자세 추정치로부터 쌓인 오류를 GPS 신호로 보정해주는데, GPS 신호가 잡히지 않기 때문에 작동할 수가 없다.

    2. 비슷한 이유로, GPS 신호가 약해지거나 간헐적 끊김이 일어나는 곳에서는 GPS 정보를 신뢰할 수 없다. 자율주행차가 터널로 들어가거나, 지하 주차장으로 들어가거나, 고층 건물들 사이를 지나갈 때 GPS 신호가 굉장히 불안정해지게 된다. IMU의 자세 추정치를 보정해줘야하는데, 보정을 위한 데이터가 불안정해지면 전체 시스템이 불안정해지게 된다.

    3. GPS 업데이트 속도는 느리다. 스마트폰의 경우 1Hz, 자동차의 경우 5~10Hz 정도 된다. 그만큼 IMU 에러가 누적된다는 뜻이 되는데, 정확한 자세 추정을 요구하는 VR/AR의 경우 INS는 사용할 수 없다.

    4. GPS 위치 추정도 그렇게 정확한 편이 아니다. GPS의 위치는 RTK-GNSS 등을 사용하지 않는 이상 ~10m 정도까지 위치가 부정확할 수 있다.

     

     

     

     

    VIO

    1. IMU가 나오는 선형가속도 값과 각속도 값은 Dead-reckoning 적분 과정을 통해 metric 단위의 거리와 회전 값으로 바뀔 수 있다. 즉, metric scale이 계산이 된다는 것인데, 이 정보를 사용하기 때문에 카메라 위치추정법이 스케일 정보가 없이도 전체적인 VIO 구성은 metric scale을 가지게 된다. 즉, VIO에서 오른쪽으로 5m 움직였다고 하면, 실제로도 5m 움직인 것이다!

    2. IMU의 속도가 200 Hz라면, 이론 상 VIO는 200 Hz의 속도로 위치 추정을 수행할 수 있다. VIO를 사용함으로써 더 빠르게 위치를 추정할 수 있고, 로봇 control과 이어질 시 더 빠르게 행동을 취할 수 있다. 더 빠르게 행동을 취할 수 있으면 어떤게 가능해질까? 1. 드론의 풀 스피드로 날아다니면서도 벽에 부딛치지 않을 수 있다, 2. 자율주행차가 고속도로에서 더 빠르게 다닐 수 있다, 3. 고르지 않은 바닥면에서 더 안정적이게 위치추정할 수 있다.

    3. 텍스처의 부재 등으로 카메라 위치 추정이 실패한 경우에도 IMU는 계속 위치추정을 수행한다. 물론 에러가 보정되지 않겠지만, 카메라가 몇 프레임정도 놓친 경우라면 금방 다시 보정을 수행할 수 있다. 카메라가 몇초 이상 위치 추정에 완벽하게 실패하는 경우 IMU는 발산해버린다는 단점이 있는데, 이건 그냥 VO도 실패한다. 종합하면, 텍스처의 부재 등으로 VO가 실패하는 상황에서 VIO는 IMU 값을 읽어 위치추정을 이어가기 때문에 실패하지 않는다.

    4. Pure-rotation 움직임이 있으면 카메라는 위치추정에 실패하지만, IMU는 각속도를 측정하고 적분함으로써 rotation 값을 구할 수 있다. 즉, VIO는 pure-rotation 움직임도 문제없다!

    5. VIO는 GPS를 사용하지 않기 때문에 실내에서도 마음껏 사용할 수 있다.

    6. 두개의 센서를 조합하기 때문에 uncertainty를 줄일 수 있다. 이론적으로 좀 더 정확한 위치추정이 가능해질 수 있다. (실제로 정확도가 높아지는지에 대한 여부는 하드웨어 + 알고리즘에 따라 다르다. 좋아지는 경우도 있고 안좋아지는 경우도 있다.)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    'SLAM' 카테고리의 다른 글

    SLAM이란?  (0) 2020.09.03
Designed by Tistory.