[SLAM] IMU(Inertial sensor) 관련 용어 및 개념 정리

SLAM에서 IMU를 활용할 때, 또는 Sensor Fusion을 할 때 알아야 할 용어 및 개념을 정리해 보자.

최근 SLAM 논문을 보면 Inertial이라는 단어가 붙은 SLAM 알고리즘들이 자주 등장하고 있다.

카메라를 활용한 SLAM에서는 VIO(Visual inertial odometry), 라이다를 활용한 SLAM에서는 LIO(LiDAR inertial odometry) 카메라, 라이다, IMU를 모두 활용한 SLAM도 최근 등장하고 있다!

대부분의 SLAM 논문에선 IMU의 기본적인 개념을 알고 있다는 전제하에 논문이 서술되기 때문에, SLAM 관련 논문을 읽을 때 필요한 최소한의 IMU 개념을 포스팅해 보려고 한다.

IMU란?

IMU는 Inertial Measurement Unit의 약자로 IMU 또는 Inertial sensor라고 하기도 한다. IMU 센서는 자체적으로 가속도 및 각속도를 측정할 수 있으며, 일부의 센서는 자기장까지 측정을 할 수 있다. IMU 센서를 통해 얻어낸 가속도 및 각속도 값을 활용(시간에 따라 누적)하여 회전량(Rotation)과 이동량(Translation)을 구할 수 있게 된다.

하지만 IMU 센서를 사용할 때 고려해야 할 점이 있는데, 바로 Noise와 Bias값을 알아야 정확하게 사용을 할 수 있다는 것이다. 이 두 개념에 대해서는 추후에 알아보기로 한다. Noise와 Bias값을 잘못 구할 경우, IMU 센서가 SLAM 전체 알고리즘에 더욱 악영향을 미칠 수도 있다는 것을 주의해야 한다!

이번 포스팅에서 다룰 IMU는 MEMS이다. IMU와 관련된 글을 읽다보면 MEMS란 단어가 종종 등장하는데, MEMS는 Micro Electro Mechanical Systems의 줄임말로 IMU의 동작 방식 중 하나이다. 즉, IMU의 동작 방식에 따라 분류를 하면 MEMS와 FOG로 분류를 하게 되고 이 두 방식의 차이점은 “Choosing an IMU: FOG vs MEMS IMUs” 링크를 참고하면 된다.

6 axis IMU vs 9 axis IMU

IMU에서 나오는 출력값에는 기본적으로 가속도 값(accelerometer - $a_x, a_y, a_z$)와 각속도 값 (gyroscope - $w_x, w_y, w_z$)값이 존재한다. 기본적인 값 6개를 출력하는 IMU를 6 axis IMU라고 부른다.

보통 가속도 값의 단위는 $m/s^2$ 이며, 각속도 값의 단위는 $deg/s$ 이다.

6 axis IMU 만으로 우리가 필요한 정보 ($x,y,z,roll, pitch, yaw$)를 모두 얻어내기 위해서는 추가적으로 AHRS algorithm과 같은 Orientation을 구해주는 알고리즘이 필요하다. IMU를 사용하면 피할 수 없는 Error 값이 누적되는 Drift 현상으로 인해 더 많은 출력값을 내보내는 9 axis IMU를 사용하기도 한다.

Drift 현상이 일어나는 이유를 간단히 말하자면 각속도 값을 시간에 대해 누적해서 회전에 대한 값($yaw$)을 구하게 되는데 각속도 값에 Noise가 포함되어 있을 경우, 필연적으로 오차가 누적되기 때문이다.

9 axis IMU의 경우, 가속도 값 ($a_x, a_y, a_z$)와 각속도 값 ($w_x, w_y, w_z$)값과 함께 지자기 값 ($m_x, m_y, m_z$)을 함께 출력한다.

지자기 값(magnetometer)을 통해 센서에서 바로 지구 중력 방향을 계산할 수 있게되고, 지자기 값 데이터가 가속도 값과 각속도 값과 융합되어 회전에 대한 변화량(Orientation)을 조금 더 정교하게 구할 수 있게 된다.

일반적으로 9 axis IMU가 6 axis IMU보다 가격이 비싸므로, 자신이 처한 환경에 맞게 IMU를 선택하면 된다. 그리고 지자기 센서의 경우 주변에 자석이 있으면 지구 중력 방향을 잘못 계산하므로 주의해야한다.

IMU Bias 그리고 Noise

IMU를 활용한 SLAM 논문을 보다보면, Notation은 조금씩 다르지만 아래와 같은 수식을 정말 많이 관찰할 수 있다. 아래의 식은 “On-Manifold Preintegration for Real-Time Visual-Inertial Odometry - TRO 2016’’ 에서 발췌한 식이다.

관찰된 각속도($\tilde{w}(t)$) 및 가속도 값($\tilde{a}(t)$)과 우리가 실제로 필요한 순수 각속도(${w}(t)$) 및 가속도 값($a(t)$)이 다르기 때문에 우리가 필요한 값을 구하기 위한 IMU modeling을 할 때 주로 사용되는 식이다.

이때, 우리가 관찰한 값과 순수 우리가 원하는 값을 구할 때 생기는 차이는 Bias와 Noise 때문이다.

IMU Bias란 Input value와 Output value의 일정한 offset을 의미한다. IMU 센서의 경우, 매우 빠른 속도로 값(100Hz 이상)을 관찰하고 측정하기 때문에 출력으로 내보내는 값인 가속도 값(accelerometer)와 각속도 값(gyroscope)이 들어오는 시점과 이를 내보내는 시점의 일정한 차이가 있기 마련이다.

Bias는 가속도 값에 해당하는 acceleration bias ($b^a(t)$)와 각속도 값에 해당하는 gyroscope bias ($b^g(t)$)가 존재하며 acceleration bias의 경우 가속도와 동일한 단위($m/s^2$)로 성분 ($b^a_x, b^a_y, b^a_z$)을 가지며 gyroscope bias의 경우 각속도와 동일한 단위($deg/s$)로 성분 ($b^g_x, b^g_y, b^g_z$)을 가지게 된다.

Bias는 IMU 센서가 측정할 때 마다 그 값이 바뀌므로 보통 SLAM에서 최적화를 할 때 Bias 최소화하는 식으로 구하게 된다.

Bias를 일정한 offset이라고 표현했지만, 실제로 사용을 해보면 Bias를 측정 및 추정할 때도 Noise가 존재하기 마련이다. 위 식에서는 표현되지 않았지만 IMU 센서를 관찰할 때 White noise가 있다고 가정하므로 Gaussian noise를 가지는 Random walk process를 일반적으로 IMU bias modeling에 쓰인다.

Random walk processs는 신호처리에서 나오는 개념인데 자세한 내용은 Random Walks - The Mathematics in 1 Dimension을 참고해보자.

IMU noise란 Output value로 나온 값에 대해 랜덤한 오차를 고려하여 Output value를 계산하는 것을 말한다. 사실 센서를 사용하다 보면 당연히 Noise가 존재하기 마련이고 이 Noise를 수식적으로 Modeling하여 제거하는 것이라고 이해하면 된다. 위 수식에서는 $\eta^g(t)$가 각속도 값에 대한 Noise를 의미하고 $\eta^a(t)$가 가속도 값에 대한 Noise를 의미한다. Noise는 보통 Covariance Matrix를 활용하여 수식적으로 활용한다. $(x,y,z)$에 대한 Covariance Matrix이므로 3x3이 일반적이다.

IMU / AHRS / GNSS / INS

IMU와 비슷한 것 같은데, 헷갈리는 용어들이 몇 가지가 존재한다. AHRS / GNSS / INS가 그 주인공들인데 아래의 표를 통해 한번에 이해를 할 수 있다.

센서 자체적으로 어떤 정보까지 줄 수 있는가를 통해 IMU부터 GNSS / INS로 분류를 하게 된다. 위 그림의 경우 IMU를 만드는 회사 중에 하나인 Xsens 사의 문서에서 발췌를 했기 때문에 Xsens sensor라는 단어들이 보인다.

  • IMU : Inertial Measurement Unit의 줄임말로써 기본적으로 가속도 값 및 각속도 값을 출력 값으로 보내는 센서
  • VRU : Vertical Reference Unit의 줄임말로써 센서 내부적으로 roll 값과 pitch 값을 계산하여 출력 값으로 보내는 센서, 중력(gravity) 방향을 Reference로 삼는다. IMU와 같이 가속도 및 각속도 값도 출력으로 나온다.
  • AHRS : Attitude and Heading Reference System의 줄임말로써 VRU에서 나오는 출력 값과 함께 yaw값까지 계산하여 출력 값으로 내보내는 센서
  • GNSS / INS : GNSS는 Global Navigation Satellite System의 줄임말, INS는 Inertial Navigation System의 줄임말로써 추가적인 Barometer(기압계 센서)나 GNSS receiver(GNSS 수신기)를 활용하여 절대적인 Position, Velocity, 시간까지 출력 값으로 내보내는 센서, AHRS에서 나온 출력값들도 사용이 가능하다.

SLAM에서는 보통 카메라 또는 LiDAR와 Sensor fusion을 해서 사용하므로 IMU에서 나오는 값들을 활용하여 알고리즘을 만들게 된다. 굳이 센서 자체적으로 계산한 roll, pitch, yaw값을 활용하지 않는다. 물론 Loosely coupled sensor fusion 방식에서는 도움을 줄 수도 있다.

IMU Preintegration이란

IMU Preintegration이란 “On-Manifold Preintegration for Real-Time Visual-Inertial Odometry - TRO 2016'’에서 처음 제안한 이론이다. 이 이론으로 인해 많은 IMU 관찰 값을 하나의 factor로 표현을 할 수 있게되고, VIO(Visual inertial odometry), LIO(LiDAR inertial odometry) 발전에 큰 기여를 한 이론이다.

Preintegration이란 이름에서도 알 수 있듯이, Pre(사전에) Integration(통합)을 한다는 것을 의미한다. SLAM에서 Graph based로 최적화를 하기 전, IMU 관찰 값들을 미리 변화량을 계산하여 하나의 motion constraints으로 바꾸어 사용하겠다는 의미이다.

SLAM을 최적화를 기준으로 분류를 하게 되면 크게 Filter-based 방법과 Graph-based 방법으로 분류할 수 있는데, IMU Preintegration은 SLAM(VIO, LIO) 문제를 Graph-based 방법으로 최적화를 진행할 때 주로 사용되는 이론이다.

LiDAR와 IMU 센서를 융합한 알고리즘 중 유명한 LIO-SAM에서 IMU preintegraion을 사용하는데, 임형태님 블로그에서 LIO-SAM을 기준으로 상세하게 설명하므로 이를 참고하면 이해가 더욱 쉬울 것이다.


최근 IMU를 활용한 SLAM 논문들이 많아지고 있기 때문에, IMU에 대한 정리를 한번 하고 논문을 보게 된다면 앞으로 조금 더 수월하게 관련 논문들을 읽을 수 있을 것이라 판단하여 이번 포스팅을 진행하게 되었다. SLAM 분야에서 IMU를 처음 접하시는 분들께 조금 도움이 되었으면 한다. 😊😊

Reference

태그:

카테고리:

업데이트:

댓글남기기