Atlas Robotics
LocalizationNâng cao

RF2O: tính odometry từ LiDAR, không cần encoder bánh xe

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

RF2O: tính odometry từ LiDAR, không cần encoder bánh xe
RF2O ước lượng chuyển động từ sự thay đổi giữa 2 lần quét LiDAR

Bài Odometry trong Localization giả định nguồn dữ liệu là encoder bánh xe. RF2O (Range Flow-based 2D Odometry) là một nguồn odometry khác hẳn — ước lượng chuyển động robot trực tiếp từ hai lần quét LiDAR liên tiếp, không cần đọc một xung encoder nào.

Khái niệm chính

Ý tưởng gần với optical flow trong thị giác máy tính (theo dõi pixel di chuyển giữa 2 khung hình liên tiếp để suy ra chuyển động camera) — nhưng áp dụng cho dữ liệu khoảng cách LiDAR thay vì pixel ảnh. RF2O độc lập hoàn toàn với cơ cấu truyền động — không quan tâm robot là differential drive, mecanum, hay bất kỳ cấu hình bánh nào.

Nguyên lý hoạt động

Giữa 2 lần quét liên tiếp, mỗi tia laser đo được khoảng cách hơi khác đi
    → sự thay đổi khoảng cách đó ("range flow") tương quan trực tiếp với
      chuyển động thực tế của robot giữa 2 lần quét

RF2O giải một hệ phương trình tối ưu tìm vận tốc (vx, vy, ω) khớp nhất với toàn bộ pattern thay đổi khoảng cách quan sát được trên mọi tia laser — về bản chất là một dạng scan matching (đã học ở bài LiDAR SLAM) nhưng tối ưu riêng cho việc ước lượng vận tốc tức thời, không phải để dựng bản đồ.

Bánh xe trượt (sàn trơn, tăng/giảm tốc gấp) khiến encoder "nói dối" — đếm đủ vòng quay nhưng robot không di chuyển tương ứng; RF2O không quan tâm bánh xe quay bao nhiêu, chỉ nhìn LiDAR thấy gì thay đổi. Với robot không có encoder (hoặc encoder hỏng/chưa lắp), RF2O cung cấp odometry mà không cần thêm phần cứng nào ngoài LiDAR đã có sẵn.

Tóm lại: Đánh đổi của RF2O: cần môi trường đủ đặc trưng hình học (không phải hành lang dài trống trơn, một mặt phẳng đơn điệu) để có đủ "range flow" đáng tin cậy để tính toán — đúng hạn chế đã nhắc ở bài LiDAR SLAM.

Kiến thức kỹ thuật

Công thức

Chất lượng ước lượng RF2O phụ thuộc trực tiếp vào mật độ đặc trưng hình học quan sát được — một cách định tính để ước lượng độ tin cậy:

Độ_tin_cậy_RF2O ∝ Số_đặc_trưng_hình_học_khác_biệt_trong_tầm_quét

Hành lang dài, tường phẳng đơn điệu → ít đặc trưng theo trục dọc hành lang
    → RF2O ước lượng tốt vận tốc ngang (vuông góc tường) nhưng kém tin cậy
      hơn cho vận tốc dọc theo hành lang (thiếu "mốc" để so sánh)

Không gian nhiều góc cạnh, vật thể đa dạng → nhiều đặc trưng mọi hướng
    → RF2O ước lượng đáng tin cậy cho cả 3 thành phần (vx, vy, ω)

Thông số

Tình huốngEncoderRF2O
Sàn bám tốt, không trượtChính xácChính xác (nhưng phụ thuộc môi trường)
Sàn trơn, bánh trượtSai lệch (đếm vòng quay nhưng không di chuyển tương ứng)Không bị ảnh hưởng (không phụ thuộc bánh xe)
Hành lang dài, ít đặc trưngKhông bị ảnh hưởng bởi hình học môi trườngKém tin cậy hơn theo trục dọc hành lang
Không có encoder/encoder hỏngKhông hoạt độngVẫn hoạt động bình thường

Ứng dụng thực tế

Không cần chọn một trong hai — RF2O có thể là một nguồn dữ liệu bổ sung trong robot_localization (bài Hợp nhất Odometry) cùng với encoder và IMU, đặc biệt hữu ích ở đúng những thời điểm encoder kém tin cậy nhất (trượt bánh) mà RF2O vẫn hoạt động bình thường vì không phụ thuộc bánh xe. Package rf2o_laser_odometry — đã xuất hiện trong kiến trúc phần mềm của dự án Diff Robot ở phần showcase của trang này — subscribe trực tiếp topic /scan, publish odometry ước lượng lên một topic riêng, sẵn sàng để robot_localization fusion cùng các nguồn khác.

Ví dụ thực tế

# Chạy RF2O, subscribe /scan, publish odometry ước lượng
ros2 launch rf2o_laser_odometry rf2o_laser_odometry.launch.py

# So sánh trực tiếp encoder vs RF2O khi robot đi qua đoạn sàn nghi ngờ trượt
ros2 topic echo /wheel_odom --field twist.twist.linear.x
ros2 topic echo /rf2o/odom --field twist.twist.linear.x
Kịch bản: robot đi qua vũng dầu nhỏ trên sàn kho hàng

/wheel_odom báo v_x = 0.3 m/s (bánh vẫn quay đều theo lệnh điều khiển)
/rf2o/odom báo v_x = 0.05 m/s (LiDAR thấy robot gần như không di chuyển thực tế)

Chênh lệch lớn giữa 2 nguồn -> dấu hiệu rõ ràng của trượt bánh,
đúng cơ chế phát hiện trượt đã học ở bài IMU trong AMR nhưng dùng
LiDAR thay vì IMU làm nguồn đối chiếu độc lập

Lỗi thường gặp

  • Dùng RF2O làm nguồn odometry duy nhất trong hành lang dài đơn điệu — như đã nêu ở mục Công thức, thiếu đặc trưng hình học khiến ước lượng theo trục dọc hành lang kém tin cậy hơn.
  • Không kết hợp RF2O với encoder qua sensor fusion — bỏ lỡ cơ hội mỗi nguồn bù đắp điểm yếu của nguồn còn lại (encoder yếu khi trượt bánh, RF2O yếu khi thiếu đặc trưng hình học).
  • Kỳ vọng RF2O hoạt động tốt như nhau ở mọi môi trường — chất lượng phụ thuộc trực tiếp vào mật độ đặc trưng hình học quan sát được, không phải hằng số cố định.
  • Bỏ qua chi phí tính toán của RF2O khi đánh giá phần cứng cần thiết — RF2O là một dạng scan matching, tốn tài nguyên tính toán hơn nhiều so với chỉ đọc encoder đơn thuần, cần tính vào ngân sách compute đã học ở bài Chọn Computer cho AMR.

Kết luận

RF2O mở ra một nguồn odometry hoàn toàn độc lập với cơ cấu truyền động — hữu ích nhất chính xác ở tình huống encoder yếu nhất (trượt bánh), đánh đổi bằng việc phụ thuộc vào mật độ đặc trưng hình học của môi trường. Kết hợp cả hai qua sensor fusion, thay vì chọn một, tận dụng đúng điểm mạnh của từng nguồn. Bài tiếp theo trong chuyên mục ghép cả ba nguồn — Encoder, IMU, RF2O — vào một cấu hình robot_localization hoàn chỉnh.

RF2O: tính odometry từ LiDAR, không cần encoder bánh xe — Atlasbot