Atlas Robotics
LocalizationCơ bản

IMU là gì? Đo gia tốc và vận tốc góc để biết robot đang xoay/nghiêng

Atlasbot · 17/8/2026 · 11 phút đọc

IMU là gì? Đo gia tốc và vận tốc góc để biết robot đang xoay/nghiêng
Ba cảm biến bên trong một IMU: accelerometer, gyroscope, magnetometer

Bài Odometry trong Localization đã chỉ ra điểm yếu của odometry bánh xe: nếu bánh trượt trên sàn, encoder vẫn đếm đủ số vòng quay nhưng robot không thực sự di chuyển đúng như vậy — encoder không có cách nào tự phát hiện việc này. IMU (Inertial Measurement Unit) giải quyết đúng điểm mù đó bằng cách đo trực tiếp chuyển động của thân robot, không thông qua bánh xe.

Khái niệm chính

  • Accelerometer (gia tốc kế) — đo gia tốc tuyến tính theo 3 trục, bao gồm cả gia tốc trọng trường — đây cũng là cách IMU ước lượng góc nghiêng (roll, pitch) tĩnh: khi robot đứng yên, vector gia tốc đo được chủ yếu là trọng lực, hướng của vector đó cho biết robot đang nghiêng bao nhiêu
  • Gyroscope (con quay hồi chuyển) — đo vận tốc góc (rad/s) quanh 3 trục — chính là tốc độ thay đổi của Roll, Pitch, Yaw đã học ở bài Rotation
  • Magnetometer (la bàn số) — đo từ trường Trái Đất, cho biết hướng tuyệt đối — không phải IMU nào cũng có, và dễ bị nhiễu bởi động cơ/vật liệu kim loại gần đó

Cảm biến MPU6050 phổ biến trong dự án robot DIY chỉ có accelerometer + gyroscope (IMU 6-trục, "6-DOF"); thêm magnetometer thành 9-trục ("9-DOF") cho khả năng ước lượng Yaw tuyệt đối.

Nguyên lý hoạt động

Gyroscope đo trực tiếp việc thân robot đang xoay nhanh hay chậm, không quan tâm bánh xe có tiếp xúc tốt với mặt sàn hay không — nếu robot bị nhấc bổng và xoay tay, gyroscope vẫn đo đúng vận tốc góc thực, trong khi encoder bánh xe lúc này hoàn toàn vô nghĩa.

Tóm lại: Encoder tin cậy khi bánh xe có tiếp xúc tốt với mặt sàn, IMU tin cậy khi cần biết chuyển động thân robot độc lập với việc bánh xe có trượt hay không. Không nguồn nào một mình đủ tốt cho mọi tình huống — đây chính là động lực cho bài Sensor Fusion tiếp theo.

Tích phân vận tốc góc từ gyroscope theo thời gian ra góc xoay tuyệt đối (θ = ∫ω dt), hoặc tích phân kép gia tốc ra vị trí (x = ∬a dt²) — cả hai đều là dead reckoning và cũng trôi theo thời gian. Tích phân kép (vị trí) trôi nhanh hơn nhiều so với tích phân đơn (góc) — đây là lý do IMU chủ yếu dùng để ước lượng góc xoay, ít khi dùng trực tiếp để ước lượng vị trí tuyệt đối.

Kiến thức kỹ thuật

Công thức

Sai số góc tích luỹ từ gyroscope tỷ lệ trực tiếp với bias (độ lệch hằng số của cảm biến, luôn khác 0 kể cả khi đứng yên hoàn toàn) nhân với thời gian:

θ_sai_so = bias × t

VD: gyro MEMS giá rẻ có bias ~0.5°/s (chưa hiệu chỉnh)
Sau 60 giây đứng yên hoàn toàn (không hề xoay thật):
θ_sai_so = 0.5°/s × 60s = 30° — robot "tưởng" mình đã xoay 30° dù không hề di chuyển!

Đây là lý do hiệu chỉnh bias (bias calibration) — đo giá trị trung bình lúc đứng yên rồi trừ đi trong mọi phép đo sau đó — là bước bắt buộc trước khi dùng gyroscope cho bất kỳ tích phân nào.

Thông số

Thông số tham khảo của IMU MEMS giá rẻ phổ biến trong dự án robot DIY:

Thông sốGiá trị tham khảo (chưa hiệu chỉnh)
Bias gyroscope~0.1 – 1°/s
Nhiễu (noise density) gyroscopeVài phần trăm °/s/√Hz
Bias accelerometerVài chục đến vài trăm mg (1mg = 0.001g)

Ứng dụng thực tế

Kết hợp encoder và IMU cho phép phát hiện một tình huống mà chỉ riêng encoder không thể nhận ra: robot bị nhấc lên khỏi mặt đất (bảo trì, tai nạn, hoặc ai đó cố tình nhấc robot) trong khi bánh vẫn quay tự do — encoder vẫn báo "đang di chuyển" bình thường, nhưng accelerometer của IMU sẽ đo được gia tốc bất thường (gần như tự do rơi hoặc dao động lạ) không khớp với chuyển động bánh xe báo cáo. Nhiều hệ thống an toàn AMR dùng đúng sự không khớp giữa 2 nguồn cảm biến này như một tín hiệu cảnh báo sớm — nếu 2 nguồn độc lập đột nhiên "mâu thuẫn" nhau về chuyển động, nhiều khả năng có sự cố bất thường cần dừng robot ngay để kiểm tra, dù chưa xác định chính xác nguyên nhân là gì.

Ví dụ thực tế

bias = 0.5  # do/s, chua hieu chinh
thoi_gian = [0, 10, 30, 60, 120]

for t in thoi_gian:
    sai_so_goc = bias * t
    print(f"Sau {t}s dung yen: goc uoc luong sai ~{sai_so_goc:.1f} do (that ra la 0)")
Output:
Sau 0s dung yen: goc uoc luong sai ~0.0 do (that ra la 0)
Sau 10s dung yen: goc uoc luong sai ~5.0 do (that ra la 0)
Sau 30s dung yen: goc uoc luong sai ~15.0 do (that ra la 0)
Sau 60s dung yen: goc uoc luong sai ~30.0 do (that ra la 0)
Sau 120s dung yen: goc uoc luong sai ~60.0 do (that ra la 0)

Robot hoàn toàn đứng yên nhưng góc ước lượng "trôi" lên tới 60° chỉ sau 2 phút — minh chứng cực kỳ trực quan cho lý do bắt buộc phải hiệu chỉnh bias trước khi tin tưởng dữ liệu gyroscope cho bất kỳ mục đích định vị nào.

Lỗi thường gặp

  • Bỏ qua bước hiệu chỉnh bias — như đã minh hoạ ở trên, đây là lỗi phổ biến và nghiêm trọng nhất — luôn đo và trừ bias lúc đứng yên trước khi dùng dữ liệu gyro cho tích phân.
  • Bias thay đổi theo nhiệt độ mà không bù trừ — cảm biến MEMS giá rẻ có bias trôi theo nhiệt độ môi trường, hiệu chỉnh 1 lần lúc khởi động không đủ nếu robot vận hành nhiều giờ với nhiệt độ chip thay đổi đáng kể — IMU chất lượng cao hơn có cảm biến nhiệt độ tích hợp để bù trừ động.
  • Magnetometer bị nhiễu bởi động cơ/dây điện gần đó — như đã nhắc ở phần Khái niệm chính, la bàn số rất nhạy với từ trường nhiễu từ động cơ DC hoặc dây dẫn dòng cao gần đó, khiến hướng Yaw tuyệt đối tính được sai lệch đáng kể nếu lắp IMU quá gần các nguồn nhiễu này.
  • Nhầm gyroscope đo "góc" thay vì "tốc độ góc" — gyroscope trả về vận tốc góc (rad/s hoặc °/s) tại một thời điểm, không phải góc xoay tuyệt đối — phải tích phân theo thời gian mới ra góc, nhầm lẫn 2 khái niệm này là lỗi rất phổ biến với người mới.

Kết luận

IMU bổ sung đúng điểm mù của odometry bánh xe — đo trực tiếp chuyển động thân robot, không phụ thuộc bánh có bám sàn hay không — nhưng cũng là dead reckoning nên vẫn trôi theo thời gian, đặc biệt nhạy với bias chưa hiệu chỉnh. Kết hợp cả 2 nguồn còn cho phép phát hiện sự cố khi chúng "mâu thuẫn" nhau. Bài tiếp theo trong chuyên mục nói về Sensor Fusion — kỹ thuật kết hợp nhiều nguồn cảm biến khác nhau (encoder, IMU) thành một ước lượng đáng tin cậy hơn từng nguồn riêng lẻ.

IMU là gì? Đo gia tốc và vận tốc góc để biết robot đang xoay/nghiêng — Atlasbot