로봇 IMU 바이어스와 드리프트: 정지해도 자세가 흐르는 이유와 보정 방법

IMU는 자세를 직접 재는 센서가 아니라 각속도와 비력을 측정합니다. 영점 바이어스가 남으면 자이로 적분 각도와 가속도 이중 적분 위치가 시간에 따라 흐릅니다. 전원 켤 때 영점, 6자세 가속도 보정, 회전 속도·온도 보정, Allan deviation, 온라인 바이어스 추정과 진동·시간 동기 검증 절차를 정리합니다.

아래에서는 용어의 차이를 실제 시스템 경계, 실패 조건과 검증 순서로 나눠 살펴봅니다.

IMU는 자세와 위치를 직접 측정하지 않고 각속도와 비력을 측정한다

자이로는 각속도를, 가속도계는 중력과 선형 가속이 합쳐진 비력을 측정합니다. 자세는 각속도를 적분하고 중력 방향 같은 보조 관측으로 보정하며, 위치는 가속도를 좌표 변환해 두 번 적분해야 합니다.

센서 조합의 전체 역할은 로봇 센서 퓨전 글에서 다룹니다. 여기서는 필터 이름보다 IMU 원시값에 어떤 오차가 있고 보정 후에도 무엇이 시간에 따라 남는지에 집중합니다.

바이어스·노이즈·스케일·축 정렬은 서로 다른 방식으로 적분 오차를 만든다

바이어스는 입력이 0이어도 남는 오프셋이고, 노이즈는 샘플마다 흔들리는 성분입니다. 스케일 오차는 실제 회전·가속 크기를 비율로 잘못 읽고, 축 비직교와 장착 오차는 한 축 운동을 다른 축에 섞습니다.

VectorNav IMU 사양 설명은 전원 재기동 바이어스, 운전 중 bias instability와 온도 민감도를 구분합니다. 한 번 뺀 영점이 모든 시간·온도에서 유지된다고 가정하지 않습니다.

오차원시값에서 보이는 모습적분 결과
상수 바이어스정지해도 0이 아님각도 선형·위치 이차 증가
백색 노이즈샘플별 흔들림랜덤 워크
스케일 오차입력 크기에 비례회전·가속 크기 왜곡
축 정렬다른 축 성분 혼입자세·중력 분리 오차

자이로 영점 오차는 적분되어 정지한 로봇의 yaw를 계속 돌려 놓는다

예를 들어 z축 자이로가 정지 상태에서 작은 양의 각속도를 계속 출력하면 적분 각도는 시간에 비례해 증가합니다. roll·pitch는 가속도계의 중력 방향으로 장기 보정할 수 있지만 yaw는 중력만으로 관측할 수 없습니다.

VectorNav의 IMU 오차 사양 설명은 bias instability와 angular random walk가 적분 각도 오차를 키운다고 설명합니다. 자력계·비전·LiDAR 같은 외부 방향 관측 없이 자이로만으로 장시간 heading을 고정하기 어렵습니다.

가속도 바이어스는 속도에 한 번, 위치에 두 번 적분되어 더 빠르게 커진다

가속도계의 작은 오프셋을 일정한 실제 가속으로 해석하면 속도 오차는 시간에 비례하고 위치 오차는 시간의 제곱에 가깝게 커집니다. 자세가 조금 틀려 중력 성분이 수평축에 새어 들어가도 같은 문제가 생깁니다.

그래서 저가 MEMS IMU의 이중 적분 위치를 외부 관측 없이 오래 믿지 않습니다. 휠 오도메트리·비전·LiDAR·GNSS와 제약 조건을 사용해 속도와 위치 드리프트를 주기적으로 묶습니다.

실제 IMU 보드는 작지만 칩 축과 로봇 축, 장착면의 책임은 시스템에 남는다

사진의 GY-521 보드에는 MPU-6050과 전원·I2C 핀, 축 방향 표시가 보입니다. 보드가 수평으로 보인다는 이유만으로 sensing axis가 로봇 base_link와 정확히 일치한다고 가정할 수 없습니다.

좌표 변환은 로봇 좌표계·TF 글처럼 IMU frame과 base frame을 명시합니다. 납땜·스페이서·하우징 공차와 충격 뒤 장착 변화까지 외부 파라미터 오차로 관리합니다.

MPU-6050 칩과 전원 I2C 핀 축 방향 표시가 보이는 GY-521 IMU 모듈 실제 사진
작은 보드 안에 자이로와 가속도계가 들어 있어도 로봇 좌표계, 장착 오차, 온도와 진동 보정은 완성 시스템에서 다시 확인해야 합니다. 출처: Nevit Dilmen. 라이선스: CC BY-SA 3.0. EXIF orientation normalized, resized proportionally, and placed on a neutral canvas; no material content altered.

전원 켤 때 바이어스와 운전 중 바이어스, 온도 바이어스는 같은 값이 아니다

전원 재기동마다 초기 영점이 조금 달라질 수 있고, 일정 온도에서도 장시간 운전 중 바이어스가 천천히 움직일 수 있습니다. 센서와 주변 전장 온도가 올라가면 영점과 스케일이 다른 곡선을 따를 수도 있습니다.

부팅 직후 고정 시간 평균만 빼는 방식은 로봇이 실제로 정지했는지 확인해야 합니다. 팬·모터·사람 접촉으로 움직이는 상태를 영점으로 학습하면 오히려 움직임을 바이어스에 넣습니다.

가속도계 6자세 보정은 각 축의 ±중력으로 영점·스케일·정렬을 확인한다

센서를 여섯 방향으로 놓아 각 축이 중력의 +1g와 -1g를 번갈아 보게 하면 오프셋과 스케일을 구할 수 있습니다. 더 정밀하게는 여러 임의 자세의 중력 벡터가 구면에 맞도록 축 비직교까지 최적화합니다.

정지 판정 구간에서 평균과 표준편차를 함께 기록하고 지지면이 흔들리거나 케이블이 당기는 자세는 제외합니다. 보정 뒤에는 모든 자세에서 가속도 벡터 크기가 중력과 맞고 수직축 외 성분이 줄었는지 확인합니다.

자이로 스케일과 축 정렬은 알려진 회전 속도와 온도 구간에서 보정한다

VectorNav의 IMU 보정 자료는 영점과 알려진 회전 속도로 scale factor를 구하고 여러 온도점에서 영점·스케일을 보정하는 방법을 설명합니다. 로봇용 보정도 각 축에 양·음 회전을 입력해 기울기와 교차축을 봅니다.

정밀 rate table이 없으면 검증된 턴테이블이나 엔코더 축을 사용할 수 있지만 기준 속도와 편심 오차를 따져야 합니다. 한 속도만 맞추지 말고 저속·작업 속도·최대 속도와 양방향을 포함합니다.

Allan deviation은 긴 정지 로그에서 노이즈와 바이어스 안정성을 시간 척도별로 나눈다

VectorNav IMU 보정 자료는 일정 온도에서 장시간 정지 데이터를 기록하고 여러 평균 시간의 Allan deviation을 계산해 angle random walk와 in-run bias stability를 읽는 절차를 설명합니다.

그래프의 최소점 하나를 필터 파라미터로 바로 복사하지 않습니다. 샘플링률, 단위, 데이터 길이와 온도 안정 조건을 함께 남기고 로봇 장착 상태에서 얻은 noise density와 bias random walk를 추정기 모델에 넣습니다.

온라인 추정기는 정지·중력·카메라·LiDAR 같은 관측으로 바이어스를 상태로 추적한다

필터 상태에 자이로와 가속도 바이어스를 포함하면 외부 관측과 IMU 예측의 불일치로 바이어스를 갱신할 수 있습니다. 정지 구간에서는 각속도 0과 속도 0 제약을 사용하고 움직일 때는 비전·휠·LiDAR가 보정 관측을 줍니다.

관측이 약한 동작에서는 바이어스와 실제 운동이 구분되지 않을 수 있습니다. 일정한 속도·회전 부족·질감 부족 같은 비관측 구간에서 공분산이 커지는지 보고 억지로 영점에 고정하지 않습니다.

진동·샘플 시각·필터 대역폭이 틀리면 바이어스처럼 보이는 오차가 생긴다

모터와 감속기 진동이 센서 대역폭을 넘으면 aliasing과 vibration rectification이 저주파 오프셋처럼 나타날 수 있습니다. 고무 마운트는 고주파를 줄이지만 공진과 장착 자세 변화를 만들 수 있어 기계·필터 설계를 함께 시험합니다.

시간 동기화 글처럼 IMU 샘플 시각은 카메라 노출·휠·LiDAR와 맞아야 합니다. 좋은 영점 보정도 타임스탬프가 밀리면 급회전에서 자세 오차로 보입니다.

시험조건확인값
부팅 반복같은 온도·여러 전원 주기turn-on bias 분포
온도 순환냉간→열평형→냉각bias·scale 곡선
정적 장기수시간 고정 로그Allan·드리프트
로봇 동작진동·급회전·정지 반복포화·시각·온라인 추정

인수 시험은 실험실 보정값보다 재기동·온도·실제 작업에서 남는 드리프트를 본다

ROS Imu 메시지 정의는 각속도·선형가속도 단위와 covariance 표현을 명시합니다. 드라이버 단위·축·orientation 제공 여부와 unknown covariance 처리를 먼저 확인합니다.

원시 데이터는 rosbag2 기록 절차로 보존하고 보정 전·후를 같은 궤적에서 재생합니다. 최종 판정에는 정지 drift, 자세 기준 오차, 재기동 편차, 온도별 성능과 외부 관측 상실 후 복구 시간을 포함합니다.

IMU 영점 스케일 축 정렬 온도 Allan 진동 시간 동기 온라인 바이어스를 확인하는 점검표
실험실 정지 보정 뒤에도 전원 재기동·온도 상승·모터 진동·장시간 운전에서 오차가 다시 커지는지 확인해야 합니다. 출처: 피지컬 AI Lab.

로봇 IMU 바이어스와 드리프트에서 자주 묻는 질문

IMU를 평평하게 놓고 영점만 빼면 보정이 끝나나요?

한 자세의 바이어스만 일부 보정합니다. 가속도 스케일·축 비직교, 자이로 스케일·온도 변화와 장착 좌표는 여러 자세·회전·온도에서 따로 확인해야 합니다.

정지 상태인데 yaw가 계속 변하는 이유는 무엇인가요?

z축 자이로의 작은 바이어스와 노이즈가 적분되기 때문입니다. 중력은 yaw를 관측하지 못해 자력계·비전·LiDAR 같은 외부 방향 기준이 필요할 수 있습니다.

Allan variance로 모든 IMU 오차를 보정할 수 있나요?

주로 시간 척도별 랜덤 노이즈와 바이어스 안정성을 특성화합니다. 축 정렬·스케일·온도 곡선·진동·타이밍 오차는 별도 시험이 필요합니다.

가속도계를 두 번 적분하면 위치를 얻을 수 있나요?

수학적으로 가능하지만 작은 바이어스와 자세 오차가 빠르게 누적됩니다. 실용 로봇은 비전·LiDAR·휠·GNSS 같은 외부 관측으로 드리프트를 제한합니다.

IMU covariance를 0으로 두면 정확하다는 뜻인가요?

ROS 메시지 정의에서는 모두 0인 covariance를 보통 unknown으로 해석합니다. 실제 로그와 보정 시험으로 분산을 추정해 필터가 센서를 과신하지 않게 해야 합니다.

IMU 보정 결과는 센서 모델·샘플링률·장착·온도·진동과 전원 조건에 종속됩니다. 실험실 영점 하나를 모든 로봇과 작업에 재사용하지 말고 재기동·온도 순환·실제 궤적에서 원시값과 외부 기준을 함께 기록해 검증해야 합니다.