IMU란?
컴퓨터보다 오래된 기계장치. 관성을 이용해 움직임을 측정하는 센서 모듈.
---
3대 센서
| 센서 | 측정하는것 | 축 |
| Accelerometer(가속도계) | 3축 선형 가속도(x,y,z) + 중력 | 3축 |
| Gyroscope(자이로스코프) | 3축 각속도(roll, pitch, yaw 회전 속도) | 3축 |
| Magnetometer(자력계) | 자기장 방향(나침반 역할) | 선택사항 |
- Accelerometer + Gyroscope = IMU (6축)
- Accelerometer + Gyroscope + Magnetometer = AHRS (9축, Attitude and Heading Reference System)
---
IMU가 아는 것과 모르는 것
| 구분 | 내용 |
| 직접 아는 것 | 가속도, 회전 속도 |
| 계산으로 추정하는 것 | 기울기 (중력 방향으로부터), 자세 변화 |
| 잘 못 아는것 | 절대 위치 ( 적분 오차 누적이 심함) |
---
LiDAR 전처리에서 IMU가 쓰이는 두 지점
1. Deskew — 시간 축 보정
▎"스캔 도는 동안 로봇이 움직여서 생긴 찌그러짐을 펴준다"
LiDAR는 한 바퀴 스캔하는 데 ~100ms가 걸린다.
그 사이에 로봇이 움직이면 포인트마다 찍힌 위치 기준이 달라져서 점군이 찌그러진다.
IMU 데이터로 보정하는 원리:
각속도 (gyroscope) → 적분 → 회전량 (orientation) : "이 시간 동안 얼마나 돌았나"
가속도 (accelerometer) → 중력 제거 → 적분 1번 → 속도 → 적분 2번 → 위치 변화 : "이 시간 동안 얼마나 이동했나"
스캔 한 바퀴 동안 IMU 데이터를 시간순으로 쌓아서 각 포인트의 자세를 보간한다:
t=0ms 점A 찍힘 → IMU 상태: (x0, y0, z0, roll0, pitch0, yaw0)
t=10ms 점B 찍힘 → IMU 적분: (x1, y1, z1, roll1, pitch1, yaw1)
t=50ms 점C 찍힘 → IMU 적분: (x2, y2, z2, roll2, pitch2, yaw2)
...
t=100ms 점Z 찍힘 → IMU 적분: (xN, yN, zN, rollN, pitchN, yawN)
각 포인트를 해당 시점의 IMU 자세로 역보정하면 → "마치 한 순간에 다 찍힌 것처럼" 깨끗한 점군이 된다.
2. Gravity Alignment — 공간 축 보정
▎ "센서가 기울어져 있으니 중력 기준으로 수평을 맞춘다"
로봇이 가만히 있으면 가속도계가 측정하는 건 중력뿐이다 (9.8 m/s²).
- IMU가 수평이면 → Z축으로 9.8 측정
- IMU가 기울어져 있으면 → X, Y, Z에 9.8이 분산되어 측정
이 3축 가속도의 비율로 "중력이 센서 기준으로 어느 방향인지" → "센서가 얼마나 기울어져 있는지" 역산할 수 있다.
코드에 calibration_time = 3.0 같은 설정이 있는 이유가 이것이다 — 시작할 때 잠깐 가만히 있으면서 중력 방향을 평균내서 잡는다.
---
핵심 구분
| Deskew | Gravity Alignment | |
| 보정 축 | 시간 축 | 공간 축 |
| 문제 | 스캔 중 로봇이 움직여서 점군이 찌그러짐 | 센서 좌표계의 Z축이 실제 중력과 불일치 |
| 해결 | 각 포인트를 찍힌 시점의 자세로 역보정 | 좌표 프레임 자체를 회전시켜 중력 정렬 |
| IMU 사용 | 각속도 적분 + 가속도 이중적분 | 정지 시 가속도 벡터로 중력 방향 추출 |
---
주의사항
- 가속도 이중적분의 한계: 이론적으로 위치를 구할 수 있지만 드리프트가 심하다.
Deskew 수준(~100ms)에서는 쓸 만하지만, 수 초 이상 적분하면 오차가 급격히
발산한다.
- 실제 시스템의 구조: 위치는 LiDAR 매칭(ICP 등)으로 잡고, IMU는 그 사이사이
짧은 구간의 보간용으로 쓰는 것이 일반적이다.
- Gravity Alignment 업데이트: 초기 캘리브레이션 1회로 끝나는 게 아니라,
런타임에도 가속도 크기가 ~9.8에 가까울 때(정지 상태)만 골라서 지속 보정하는
시스템도 있다. 움직이는 중에는 관성 가속도가 섞여 중력 방향을 깨끗하게
분리하기 어렵기 때문이다.
'On Going > Point Cloud Data' 카테고리의 다른 글
| [Gaussian Splatting] 3D 표현의 혁신과 SAM 3D Objects에서의 활용 (0) | 2025.11.21 |
|---|---|
| [PCD] 3D segmentation - 3D LiDAR 기반 차선 검출 프로젝트: Cylinder3D로 직접 만들며 얻은 실전 노하우 (0) | 2025.11.18 |
| [pcd] LiDAR 데이터의 noise 제거 방법론 (0) | 2025.04.15 |
| [pcd] 도로 포인트클라우드를 평면으로 정렬하는 4가지 방법: 딥러닝 전처리를 위한 접근(4. PCA기반 평면정렬) (0) | 2025.04.14 |
| [pcd] 도로 포인트클라우드를 평면으로 정렬하는 4가지 방법: 딥러닝 전처리를 위한 접근(3. DTM기반 CSF) (0) | 2025.04.14 |
댓글