SLAM文獻之-Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping

一、簡介

該論《Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping》是日本先進工業科學技術研究所(AIST)的Koide等人于2022年在IEEE國際機器人與自動化會議(ICRA)上發表的一篇論文。該研究提出了一種基于全局匹配代價最小化和LiDAR-IMU緊耦合的實時三維建圖框架,旨在提高在特征稀缺或動態環境中的定位與建圖精度。
文由 Koide 等人在 2022 年發表,提出了一種全局一致且緊耦合的三維 LiDAR-IMU 建圖方法。其核心目標是提升在特征稀缺或動態環境下的三維定位與建圖精度,并保持實時性。與傳統基于位姿圖優化的方法不同,本文方法直接最小化全局匹配代價,并在前端和后端緊耦合 LiDAR 與 IMU 數據,實現全局一致性和高魯棒性。
在這里插入圖片描述


二、文章貢獻(創新點)

  1. 全局匹配代價最小化:不依賴傳統位姿圖優化,直接優化全局匹配代價以保證地圖全局一致性。
  2. LiDAR-IMU 緊耦合:前端和后端均融合 IMU 數據,增強系統在特征稀缺環境下的魯棒性和精度。
  3. GPU 加速體素化 GICP 匹配:利用 GPU 提升匹配代價計算速度,實現實時建圖。
  4. 適應特征稀缺環境:可在缺乏明顯幾何特征的環境中仍保持高精度定位和地圖生成。

三、詳細內容

1. 算法背景

  • 傳統方法問題:基于位姿圖優化的 LiDAR-SLAM 在特征豐富環境中表現良好,但在特征稀缺或動態環境中容易漂移。
  • LiDAR-IMU 融合:通過將 IMU 數據引入前端與后端優化,提供額外約束,減少漂移,提高精度。
  • 全局一致性需求:單純局部優化容易累積誤差,影響整體地圖質量。

2. 需解決的關鍵問題

  1. 特征稀缺環境下定位漂移:在空曠或重復結構場景中,LiDAR 匹配不穩定。
  2. 高效融合 LiDAR 與 IMU 數據:前端與后端均需充分利用 IMU 信息,同時保證計算效率。
  3. 實時性與計算效率:全局優化和匹配代價計算需高效以支持實時運行。

3. 算法流程

  1. 預處理

    • 點云去畸變、濾波、體素化。
  2. 前端估計

    • 關鍵幀選擇 + 固定滯后平滑(Fixed-Lag Smoother)
    • GPU 加速的體素化 GICP 匹配代價因子
    • IMU 預積分因子約束
  3. 局部建圖

    • 構建局部因子圖
    • 優化局部匹配代價 + IMU 約束
  4. 全局建圖

    • 構建全局因子圖
    • 最小化全局匹配代價,保證全局一致性

4. 具體實現步驟

圖 1 展示了提出的整體框架。整個系統由一個預處理模塊和三個估計模塊組成:里程計估計、本地建圖和全局建圖。這些模塊都基于緊耦合的 LiDAR-IMU 融合。里程計估計模塊(即前端)負責魯棒地追蹤傳感器的運動,并提供最新狀態的初始估計。隨后,本地建圖模塊會進一步優化這些狀態,并將若干局部幀整合成一個子圖。全局建圖模塊則對這些子圖的位姿進行整體優化,以確保地圖全局一致性。整個流程通過多線程并行運行,提高效率。
在這里插入圖片描述
圖1

x_tx\_tx_t 來表示需要估計的傳感器狀態:

xt=[Tt,vt,bt]T,x_t = [T_t, v_t, b_t]^T, xt?=[Tt?,vt?,bt?]T,

其中 KaTeX parse error: Undefined control sequence: \[ at position 8: T\_t = \?[?R\_t | t\_t] \i… 表示位姿,v_t∈R3v\_t \in \mathbb{R}^3v_tR3 為速度,KaTeX parse error: Undefined control sequence: \[ at position 8: b\_t = \?[?b^a\_t, b^\omeg… 是 IMU 的加速度和角速度偏置。狀態估計依賴 LiDAR 點云 P_tP\_tP_t 以及 IMU 測量(線加速度 a_ta\_ta_t 和角速度 ω_t\omega\_tω_t)。為了簡化處理, 將 LiDAR 點云統一映射到 IMU 坐標系下。

接下來,將介紹兩個核心因子:LiDAR 匹配代價因子和 IMU 預積分因子,這些因子是框架中因子圖的主要組成部分,然后再詳細說明每個模塊的實現。


4.1、 LiDAR 匹配代價因子

匹配代價因子用來約束兩個位姿 T_iT\_iT_iT_jT\_jT_j,目標是讓它們對應的點云 P_iP\_iP_iP_jP\_jP_j 盡可能對齊。采用體素化 GICP(Voxelized GICP, VGICP)作為代價函數,它是 GICP 的一種變體,適合 GPU 加速計算。

VGICP 會將每個點 p_k∈P_ip\_k \in P\_ip_kP_i 用高斯分布 (μ_k,C_k)(\mu\_k, C\_k)(μ_k,C_k) 來建模,其中協方差 C_kC\_kC_k 由鄰域點計算得到。點云 P_jP\_jP_j 則被離散為體素,并為每個體素計算均值和協方差。匹配代價定義為:

eM(Pi,Pj,Ti,Tj)=∑pk∈PieD2D(pk,Ti?1Tj),e_M(P_i, P_j, T_i, T_j) = \sum_{p_k \in P_i} e_{D2D}(p_k, T_i^{-1} T_j), eM?(Pi?,Pj?,Ti?,Tj?)=pk?Pi??eD2D?(pk?,Ti?1?Tj?),

eD2D(pk,Tij)=dkT(Ck0+TijCkTijT)?1dk,e_{D2D}(p_k, T_{ij}) = d_k^T \big(C_k^0 + T_{ij} C_k T_{ij}^T \big)^{-1} d_k, eD2D?(pk?,Tij?)=dkT?(Ck0?+Tij?Ck?TijT?)?1dk?,

其中 d_k=μ_k0?T_ijμ_kd\_k = \mu\_k^0 - T\_{ij}\mu\_kd_k=μ_k0?T_ijμ_k 是點間殘差,p_k0=(μ_k0,C_k0)p\_k^0 = (\mu\_k^0, C\_k^0)p_k0=(μ_k0,C_k0) 來自 P_jP\_jP_j 的體素地圖。

每次優化迭代都會重新計算并線性化 $e_M$,相比傳統的 SE(3) 相對位姿約束,VGICP 提供了更精確的約束信息。


4.2、 IMU 預積分因子

IMU 預積分因子能夠高效地將 IMU 測量融入因子圖。給定加速度 a_ta\_ta_t 和角速度 ω_t\omega\_tω_t,傳感器狀態隨時間演化:

Rt+Δt=Rtexp?((ωt?bωt?ηωt)Δt),R_{t+\Delta t} = R_t \exp((\omega_t - b_\omega^t - \eta_\omega^t)\Delta t), Rt+Δt?=Rt?exp((ωt??bωt??ηωt?)Δt),

vt+Δt=vt+gΔt+Rt(at?bat?ηat)Δt,v_{t+\Delta t} = v_t + g \Delta t + R_t (a_t - b_a^t - \eta_a^t) \Delta t, vt+Δt?=vt?+gΔt+Rt?(at??bat??ηat?)Δt,

tt+Δt=tt+vtΔt+12gΔt2+12Rt(at?bat?ηat)Δt2.t_{t+\Delta t} = t_t + v_t \Delta t + \frac{1}{2} g \Delta t^2 + \frac{1}{2} R_t (a_t - b_a^t - \eta_a^t) \Delta t^2. tt+Δt?=tt?+vt?Δt+21?gΔt2+21?Rt?(at??bat??ηat?)Δt2.

通過預積分,可以在兩個時間步 iiijjj 之間獲得相對運動約束,從而在缺乏幾何特征或 LiDAR 因子受限的環境中仍能保持穩定估計,并減少四自由度漂移,同時提供重力方向約束。


4.3、 預處理

輸入點云先經過體素濾波下采樣。在去畸變過程中,每個體素不僅對點位置取平均,也對時間戳取平均。如果點的時間與體素時間差過大,會將其重新分配到新體素,以避免掃描首尾點被錯誤融合。

接著,為每個點找到 kkk 個鄰近點,用于協方差估計。假設去畸變過程中點的鄰域關系不會發生大的變化,這些鄰近點可直接用于后續計算。


4.4、 里程計估計

里程計估計模塊通過融合 LiDAR 和 IMU 測量,補償快速傳感器運動并穩健地估計傳感器狀態。首先,根據 IMU 動力學預測,將點云變換到 IMU 坐標系,以去除運動畸變。隨后,通過預先計算的鄰近點協方差,為每個點建立不確定性模型。

在去畸變后的點云基礎上,構建因子圖(如圖 2 所示)。為了保持實時性能,采用固定時滯平滑(fixed-lag smoothing)方法,并對舊幀進行邊緣化。借鑒直接稀疏里程計(Direct Sparse Odometry)的思路,引入關鍵幀機制來實現高效且低漂移的軌跡估計。關鍵幀是一組在空間上分布合理、且與最新幀重疊度較高的幀。在最新幀與每個關鍵幀之間添加匹配代價因子,以減小漂移。若關鍵幀已被固定時滯平滑器邊緣化,則其位姿被視為固定,并通過一元匹配代價因子約束最新幀的位姿。
在這里插入圖片描述
圖2

關鍵幀管理策略如下:

  1. 定義兩幀 P_iP\_iP_iP_jP\_jP_j 的重疊率為 P_iP\_iP_i 中落在 P_jP\_jP_j 體素內的點占比 。

  2. 新幀到達時,若其與最新關鍵幀重疊率低于閾值(如 90%),則將其加入關鍵幀列表。

  3. 為避免冗余關鍵幀:

    • 移除與最新關鍵幀重疊率低于閾值(如 5%)的關鍵幀;

    • 若關鍵幀總數超過 N_odomN\_{\text{odom}}N_odom(如 20),則移除評分最低的關鍵幀:

      s(i)=o(i,Nodom)∑j∈[1,Nodom?1]?{i}(1?o(i,j)),s(i) = o(i, N_{\text{odom}}) \sum_{j \in [1, N_{\text{odom}}-1] \setminus \{i\}} (1 - o(i, j)), s(i)=o(i,Nodom?)j[1,Nodom??1]?{i}?(1?o(i,j)),

      其中 o(i,j)o(i,j)o(i,j) 表示第 iii 幀與第 jjj 幀關鍵幀的重疊率。該評分函數旨在保持關鍵幀在空間上的均勻分布,同時保留最新幀附近的關鍵幀。

此外,在最新幀與最近幾幀(如最近三幀)之間建立匹配代價因子,以增強里程計對快速運動的魯棒性。同時,連續幀之間添加 IMU 預積分因子,在特征稀少環境下進一步提升估計穩定性。


4.5、 局部建圖

里程計估計中被邊緣化的幀會被送入局部建圖模塊,作為子圖(submap)的初始狀態。局部建圖將若干幀組合為子圖,從而減少全局優化變量數量。
在這里插入圖片描述

處理流程如下:

  1. 使用邊緣化狀態重新去畸變(deskewing)并計算協方差,從而獲得更準確的點云初始估計。
  2. 評估新幀與子圖中最新幀的重疊率,若低于閾值(如 90%),則將新幀加入子圖因子圖。
  3. 為子圖內每一幀組合添加匹配代價因子,實現全幀兩兩配準。
  4. 連續幀間添加 IMU 預積分因子,并為每幀速度與偏置添加邊緣化狀態先驗因子,以增強子圖優化的穩定性。

當子圖幀數達到 N_subN\_{\text{sub}}N_sub(如 15)或首尾幀重疊率低于閾值(如 5%)時,通過 Levenberg-Marquardt 優化器 對因子圖進行優化,并將優化結果合并為單個子圖。


4.6、 全局建圖

全局建圖模塊用于消除累積漂移,實現全局一致的地圖構建。每對子圖間若重疊率超過閾值(如 5%),則創建匹配代價因子,生成稠密的全局因子圖。這樣,子圖不僅與相鄰子圖對齊,還能與重新訪問的子圖對齊,從而實現閉環校正。

由于子圖創建間隔較大(如 10 秒),僅依賴 IMU 因子無法有效約束子圖間相對位姿,同時會丟失局部建圖的速度與偏差信息。為解決這一問題, 為每個子圖 x_ix\_ix_i 引入兩個“端點”狀態:x_iLx\_i^Lx_iLx_iRx\_i^Rx_iR,分別對應子圖首尾幀相對于子圖原點的狀態。

具體做法:

  1. 子圖原點 T_iT\_iT_i 定義為中間幀 T_N_sub/2T\_{N\_\text{sub}/2}T_N_sub/2 的位姿。
  2. 將每幀狀態 x_tx\_tx_t 表示為相對于子圖原點的狀態。
  3. x_ix\_ix_i 與端點 x_iL,x_iRx\_i^L, x\_i^Rx_iL,x_iR 之間創建相對狀態因子,以滿足公式 11–13。
  4. x_iRx\_i^Rx_iRx_i+1Lx\_{i+1}^Lx_i+1L 之間添加 IMU 因子,以覆蓋較短時間間隔,既約束子圖位姿,又保留局部建圖速度與偏差信息。

每當累積若干新子圖(如每 5 個)時,使用 GTSAM 的 iSAM2 優化器對全局因子圖進行增量優化,持續更新全局一致的地圖。


四、優勢總結

  1. 全局一致性:通過全局匹配代價最小化保證地圖一致性。
  2. 高魯棒性:緊耦合 LiDAR-IMU,可在特征稀缺或動態環境中保持精度。
  3. 實時性:GPU 加速匹配代價計算,前端/后端優化高效。
  4. 靈活擴展:方法可適應不同傳感器速率、不同點云密度和環境類型。

五、參考文獻

  1. Koide, K., Yokozuka, M., Oishi, S., & Banno, A. (2022). Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping. IEEE ICRA 2022. PDF
  2. Koide, K., Yokozuka, M., Oishi, S., & Banno, A. (2021). Globally Consistent 3D LiDAR Mapping with GPU-accelerated GICP Matching Cost Factors. IEEE Robotics and Automation Letters, 6(3), 5282–5289.
  3. Shan, T., Englot, B., Meyers, D., Wang, W., Ratti, C., & Rus, D. (2020). LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping. arXiv:2007.00258.

相關文獻

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94054.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94054.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94054.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【STM32】HAL庫中的實現(七):DMA(直接存儲器訪問)

DMA 是什么? DMA(Direct Memory Access)是 外設直接和內存之間數據搬運的機制,不需要 CPU 參與。 ? 舉個例子:傳統方式: ADC → CPU → RAM 使用 DMA:ADC → DMA → RAM(CPU 不需干…

【LeetCode熱題100道筆記+動畫】字母異位詞分組

題目描述 給你一個字符串數組,請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 示例 1: 輸入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 輸出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]] 解釋: 在 strs 中沒有字符串可…

【Kafka】常見簡單八股總結

為什么使用消息隊列? 解耦: 我以我的一段開發經驗舉例: 【Kafka】登錄日志處理的三次階梯式優化實踐:從同步寫入到Kafka多分區批處理 我做過一個登錄日志邏輯,就是在登錄邏輯末尾,加一段寫進數據庫登錄日志…

微信小程序連接到阿里云物聯網平臺

目錄準備階段阿里云配置下載mqtt.min.js文件小程序實現注意小程序配置服務器域名概述:介紹使用微信小程序連接到阿里云平臺的快捷方法和完整過程。 阿里云平臺建立設備,提供mqtt連接參數,小程序借助mqtt.min.js,也就是基于Github下…

2-3〔O?S?C?P? ? 研記〕? 漏洞掃描?AppScan(WEB掃描)

鄭重聲明: 本文所有安全知識與技術,僅用于探討、研究及學習,嚴禁用于違反國家法律法規的非法活動。對于因不當使用相關內容造成的任何損失或法律責任,本人不承擔任何責任。 如需轉載,請注明出處且不得用于商業盈利。 …

LeetCode 刷題【47. 全排列 II】

47. 全排列 II 自己做 解1&#xff1a;檢查重復 class Solution { public:void circle(vector<int> nums, vector<vector<int>> &res,int start){int len nums.size();if(start len - 1){ //到頭了//檢查重復bool is_exist fa…

Https之(一)TLS介紹及握手過程詳解

文章目錄簡介 TLSTLS第一次握手1.Client HelloTLS第二次握手2.Server Hello3.Certificate4.Server Hello DoneTLS第三次握手5.Client Key Exchange6.Change Cipher Spec7.Encrypted Handshake MessageTLS第四次握手8.New Session Ticket9.Change Cipher Spec10.Encrypted Hands…

【WEB 】從零實現一個交互輪播圖(附源碼)

文章目錄 一、輪播圖整體功能規劃二、HTML結構深度解析三、CSS樣式實現細節1. 定位系統詳解2. 顯示/隱藏機制3. 按鈕交互效果實現4. 純CSS箭頭實現5. 指示器&#xff1a;當前位置可視化 四、JavaScript邏輯深入解析1. 核心變量與DOM獲取2. 圖片切換函數&#xff08;核心邏輯&am…

機器學習--PCA降維

一核心部分 1解決的問題&#xff1a;應對高維數據帶來的計算量大、冗余信息多、易出現過擬合等問題&#xff0c;在減少數據維度的同時盡可能保留原始數據的關鍵信息。2核心思想&#xff1a…

leetcode 1277. 統計全為 1 的正方形子矩陣 中等

給你一個 m * n 的矩陣&#xff0c;矩陣中的元素不是 0 就是 1&#xff0c;請你統計并返回其中完全由 1 組成的 正方形 子矩陣的個數。示例 1&#xff1a;輸入&#xff1a;matrix [[0,1,1,1],[1,1,1,1],[0,1,1,1] ] 輸出&#xff1a;15 解釋&#xff1a; 邊長為 1 的正方形有…

知識蒸餾 - 各類概率分布

知識蒸餾 - 各類概率分布 flyfish一、離散概率分布 離散分布描述的是取值為離散值&#xff08;如0,1,2,…&#xff09;的隨機變量的概率規律&#xff0c;通常用概率質量函數&#xff08;PMF&#xff09; 表示某一取值的概率。 1. 伯努利分布&#xff08;Bernoulli Distribution…

軟件測試-Selenium學習筆記

""" 目標&#xff1a; driver.find_element() 需求&#xff1a; 1. 使用driver.find_element()方法 2. 輸入用戶名&#xff1a;admin 3. 輸入密碼&#xff1a;123456 """ # 導包 from selenium import webdriver from time import …

知微傳感3D相機上位機DkamViewer使用:給相機升級固件

寫在前面 本人從事機器視覺細分的3D相機行業。編寫此系列文章主要目的有&#xff1a; 1、便利他人應用相機&#xff0c;本系列文章包含公司所出售相機的SDK的使用例程及詳細注釋&#xff1b;2、促進行業發展及交流。 知微傳感Dkam系列3D相機可以應用于定位分揀、焊接焊縫提取、…

CMake進階: CMake Modules---簡化CMake配置的利器

目錄 1.簡介 2.為什么需要 CMake Modules&#xff1f; 3.內置模塊&#xff1a;開箱即用的工具 3.1.依賴查找模塊&#xff08;FindXXX.cmake&#xff09; 3.2.功能檢測模塊&#xff08;CheckXXX.cmake&#xff09; 3.3.通用工具模塊&#xff08;如 FetchContent.cmake、CT…

【Docker】Ubuntu上安裝Docker(網絡版)

【Docker】Ubuntu上安裝Docker注意&#xff1a;一、環境準備1. 系統要求2. 卸載舊版本二、安裝步驟1.配置倉庫源2.安裝 Docker引擎3.驗證安裝情況三、解決報錯1、檢查網絡連接2、檢查Docker服務狀態3、換源4.重載生效、重啟服務、查看是否配置成功5.驗證解決情況四、權限與配置…

Socket 編程 TCP

TCP 網絡程序 和剛才 UDP 類似. 實現一個簡單的英譯漢的功能。TCP是面向字節流的可靠傳輸&#xff0c;如同前文的管道流&#xff0c;只要是流&#xff0c;它的操作就是文件的寫出與讀入。TCP socket API 詳解下面介紹程序中用到的 socket API,這些函數都在 sys/socket.h 中。so…

使用AWS S3 + Lambda + MediaConvert 實現上傳視頻文件并自動轉碼

前言 最近團隊在做短視頻平臺的技術調研&#xff0c;其中有一個環節便是音視頻開發&#xff0c;即對用戶上傳的視頻進行自適應轉碼。自適應的原理其實就是預先將視頻轉換為幾個常用的分辨率&#xff0c;app端根據用戶手機分辨率拉取相應分辨率的視頻。 目前嘗試了兩種方案&…

QT之QWaitCondition降低cpu占用率,從忙等待到高效同步

在多線程編程中&#xff0c;線程間的同步是一個核心問題。在處理線程等待時&#xff0c;經常會寫出高CPU占用率的代碼&#xff0c;其中最典型的就是使用忙等待&#xff08;busy waiting&#xff09;。本文將詳細介紹如何使用Qt框架中的QWaitCondition類來優雅地解決這一問題&am…

pcl求平面點云的邊界凸包點

基本流程1&#xff0c;讀入點云&#xff0c;并去除無效點2&#xff0c;擬合平面3&#xff0c;去除離平面距離較遠的點4&#xff0c;對點云進行平面投影5&#xff0c;進行convex_hull運算初學者&#xff0c;暫時不知道能用來干嘛。練手還是非常不錯的&#xff01;#define _CRT_S…

Windows系統上使用GIT

首先破除一下畏懼心理&#xff1a;在Windows上使用git和在linux系統中的使用方法是一樣的&#xff0c;只是安裝方式沒那么便捷&#xff0c;畢竟linux中安裝git只需要一行命令 GIT下載地址 如果你的電腦的CPU是64位的&#xff0c;就點擊&#xff1a; Git-2.50.1-64-bit.exe 如果…