commaai/rednose

Kalman filter library

What it solves

Rednose 是為涉及感測器融合、視覺里程計和 SLAM (Simultaneous Localization and Mapping) 的優化問題而設計的 Kalman filter 框架。它簡化了建立能夠在線上和離線模式下運作的、準確且具備計算效率的濾波器的過程。

How it works

該框架提供幾種進階的估計技術來處理非線性系統和 3D 定位:

  • Extended Kalman Filter (EKF): 使用 sympy 來符號化地計算 Jacobian,消除了通常與非線性系統線性化相關的手動計算錯誤。
  • Error State Kalman Filter (ESKF): 透過使用四元數 (quaternions) 表示系統狀態,同時使用歐拉角 (Euler angles) 來描述誤差,來管理 3D 定位,從而避免萬向節鎖 (gimbal lock) 和冗餘問題。
  • Multi-State Constraint Kalman Filter (MSCKF): 透過管理特徵深度與相機位置之間的依賴關係,來整合整合基於特徵的視覺里程計,以防止置信度估計中的正回饋迴圈。
  • Rauch–Tung–Striebel (RTS) Smoothing: 透過反向運行濾波器來實現離線估計,以提高準確性並減少初始化錯誤。
  • Mahalanobis Distance: 實施一個統計檢定來拒絕不符合高斯分佈的測量值中的離群值。

Who it’s for

需要在 Python 中以穩健的方式實作複雜感測器融合濾波器的機器人、自動駕駛車輛和 3D 定位演算法開發者與工程師。

Highlights

  • Symbolic Jacobians: 使用 SymPy 自動化線性化過程。
  • Robust 3D Orientation: 專為 ESKF 提供支援,以處理四元數 (quaternions) 和歐拉角 (Euler angles)。
  • Visual Odometry Support: 完全支援 MSCKF 以整合整合基於圖像的特徵。
  • Offline Optimization: 使用 RTS smoothing 實現接近全域優化的性能。
  • Outlier Rejection: 內建 Mahalanobis distance 檢定來處理雜訊較多的感測器數據。