1. 程式人生 > >maplab系列8:ImuCameraSynchronizer

maplab系列8:ImuCameraSynchronizer

ImuCameraSynchronizer 是用來同步imu和image的。這是任何vio程式必要的一部分,所以這裡單獨拿出來分析一下。

首先使用:

  • addCameraImage
    • 把image存入VisualNPipeline中
    • VisualNPipeline本來可以用來提取特徵點和track,但這裡只用來儲存image流,所以使用了NullVisualPipeline型別
    • 使用VisualNPipeline的processImageBlockingIfFull加入新的image
  • addImuMeasurements
    • 新的imu資料存入ImuMeasurementBuffer中

兩個函式不斷把imu和圖片資料加入到物件中

一共有兩個執行緒:

  • checkIfMessagesAreIncomingWorker
    • 檢測退出訊號
    • 檢測最近多少時間內是否沒有imu或者img資料收到,異常檢測
  • processDataThreadWorker
    • 用getNextBlocking從佇列中拿出一張圖,如果佇列沒有圖就block在這裡。
    • 跳過初始kFramesToSkipAtInit個frame
    • 檢查和上一幀時間間隔是否小於min_nframe_timestamp_diff_ns_
    • 建立新的new_imu_nframe_measurement
    • 把這個新的frame給這個結構
    • getImuDataInterpolatedBordersBlocking得到最新frame和上一frame之間所有的imu,如果imu數量不夠,會跳過