FAST-LIO筆記

1.FAST-LIO

FAST-LIO?是一個計算效率高、魯棒性強的激光-慣性里程計系統。該系統通過緊耦合的迭代擴展卡爾曼濾波器(IEKF)將激光雷達特征點與IMU數據進行融合,使其在快速運動、噪聲較大或環境復雜、存在退化的情況下仍能實現穩定的導航。

1.1問題

1)LiDAR測量中提取的特征點通常是環境中的幾何結構(如邊緣和平面)。當無人機在特征不明顯的復雜環境中運行時,LiDAR方案容易出現退化問題。該問題在視場角(FoV)較小的LiDAR中尤為明顯; (特征稀缺的環境中或使用小FoV的LiDAR時,性能容易退化

2)由于在掃描方向上具有高分辨率,一幀LiDAR掃描通常包含大量特征點(例如幾千個)。盡管這些特征點在退化場景中無法穩定估計位姿,但若將其與IMU測量進行緊耦合融合,將導致巨大的計算負擔,而這對于無人機的機載計算機來說是不可承受的;(嵌入式平臺對算力有要求

3)由于LiDAR使用少數激光發射/接收對逐點掃描,因此每個激光點的采樣時間不同,這種時間差造成的運動畸變會顯著降低點云配準的準確性。此外,無人機螺旋槳和電機的持續旋轉還會對IMU測量引入顯著噪聲。(點云去畸變以及外部因素影響IMU測量

1.2解決方法

為使LiDAR導航適用于小型移動機器人(如無人機),提出了FAST-LIO——一個計算高效且魯棒的LiDAR-IMU里程計算法。主要貢獻如下:

1)為應對高速運動、有噪聲或復雜環境中發生退化的情況,我們采用緊耦合的迭代卡爾曼濾波器,將LiDAR特征點與IMU測量數據融合。我們提出了正式的后向傳播方法來補償運動畸變

2)為減少大量LiDAR特征點帶來的計算負擔,我們提出了一種新的卡爾曼增益計算公式,并證明其與傳統公式等價。新公式的計算復雜度取決于狀態維度,而不是測量維度

3)我們將這些公式實現為一個快速且魯棒的LiDAR-IMU里程計算軟件包,系統可以運行在小型四旋翼的機載計算機上;

4)我們在多種室內和室外環境下,以及實際無人機飛行測試中,驗證了系統在快速運動或強烈振動噪聲條件下的魯棒性。

1.3系統框架

  • LiDAR原始數據首先輸入到特征提取模塊,提取出平面特征和邊緣特征。
  • 提取出的特征與IMU測量數據一同輸入到狀態估計模塊中,以10Hz或50Hz的頻率進行狀態估計。IMU數據前向傳播(粗略地位姿估計),后向傳播(運動補償去畸變
  • 估計得到的位姿用于將當前幀的特征點配準到全局坐標系中,并與當前已構建的特征點地圖進行融合。更新后的地圖將用于下一步中新點云的配準操作。

1.4系統描述? ? ? ??

關于流行的解釋

流形(Manifold?)是局部具有歐幾里得空間性質的空間,是歐幾里得空間中的曲線、曲面等概念的推廣。參考文章中關于二維圓和三維球的例子解釋的很好,二維空間中的圓就是一個一維流形,三維空間中的球面是一個二維流形

參考:https://www.cnblogs.com/icmzn/p/11082509.html

IMU運動模型

本質上是對P、V、Q的求導

離散模型

需要估計的狀態量是個18維的量,包括位置、速度、姿態、偏置和加速度g?.

數據預處理

由于原始LiDAR點是以非常高的頻率(例如200kHz)采樣的,因此通常無法在每接收到一個新點時立即處理它們。更實際的方法是將這些點積累一段時間,然后一次性處理它們。

在FAST-LIO中,最小的積累間隔設置為20毫秒,從而實現高達50Hz的全狀態估計(即里程計輸出)和地圖更新。這種積累后的點集被稱為一個掃描(scan),并且處理該掃描的時間為 tk。從原始點云中,我們提取具有較高局部平滑性的平面點和具有較低局部平滑性的邊緣點。

1.5狀態估計

使用迭代擴展卡爾曼濾波估計狀態量X

前向傳播?Forward Propagation

在 FAST-LIO 系統中,一旦接收到 IMU 輸入,就會執行一次前向傳播,用于預測系統當前的狀態(積分得到粗略地位姿估計)。

后向傳播與運動補償?Backward Propagation and Motion Compensation

激光雷達一幀數據由很多點組成,這些點顯然不是同一時間測量得到的,所以需要補償時間差帶來的運動誤差。把一幀不同采樣時間的點轉換到同一時刻(反向傳播去運動畸變

殘差計算和迭代狀態更新

計算lidar里程計的殘差,和LOAM、LIO-SAM一樣,計算點線、點面之間的距離作為殘差。

利用迭代卡爾曼濾波估計位姿。

算法流程

1.6地圖更新?MapUpdate

根據求解的狀態量 X 把激光雷達點投影到世界坐標系的過程.

1.7初始化

為了獲得系統狀態(例如重力向量 Gg、偏差和噪聲協方差)的良好初始估計,從而加速狀態估計,需要進行初始化。在 FAST-LIO 中,初始化非常簡單:保持 LiDAR 靜止幾秒鐘(本文中的所有實驗為 2 秒),然后將收集的數據用于初始化 IMU 偏差和重力向量。如果 LiDAR 支持非重復掃描(例如,Livox AVIA),保持靜止還允許 LiDAR 捕捉一個初始的高分辨率地圖,這對后續的導航非常有利。


?

2.代碼相關

:FAST-LIO 的代碼是6e1fa94之前的commit的,之后的都是FAST-LIO2

有大佬對原始的FAST-LIO進行修改,S-FAST_LIO

  • 利用Sophus庫定義狀態變量,替代了FAST-LIO中復雜的IKFOM
  • 重力分量直接利用Vector3d定義,因此可以省去2維流形的計算
  • 優化了代碼結構,刪除了冗余的代碼
  • 代碼中添加了詳細的中文注釋
  • 添加了對于 Robosense LiDAR 的支持

而且新增了重定位功能

roslaunch sfast_lio mapping_rs_relocalization.launch
rosbag play YOUR_DOWNLOADED.bag

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

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

相關文章

C++并發編程完全指南:從基礎到實踐

在當今多核處理器普及的時代,充分利用硬件并發能力已成為高性能編程的關鍵。C11引入的現代并發編程支持使得開發者能夠以標準化、可移植的方式編寫多線程程序。本文將全面介紹C并發編程的各個方面,從基礎概念到實際應用,幫助您掌握這一重要技…

如何使用docker配置ros-noetic環境并使用rviz,gazebo

參考鏈接:【Ubuntu】Docker中配置ROS并可視化Rviz及Gazebo_docker ros-CSDN博客 前言: 其實這個東西是相當必要的,因為我們有時候需要在一臺電腦上跑好幾個項目,每個項目都有不同的依賴,這些依賴沖突搞得人頭皮發麻&…

使用 Java 11 的 HttpClient 處理 RESTful Web 服務

在現代 Web 開發中,與 RESTful Web 服務交互是一項核心任務。Java 作為一種廣泛使用的編程語言,提供了多種處理 HTTP 請求的方法。在 Java 11 之前,開發者通常使用 HttpURLConnection 或第三方庫(如 Apache HttpClient)。然而,這些方法要么過于底層,要么需要額外依賴。J…

JVM——垃圾回收

垃圾回收 在Java虛擬機(JVM)的自動內存管理中,垃圾回收(Garbage Collection, GC)是其核心組件之一。它負責回收堆內存中不再使用的對象所占用的內存空間,以供新對象的分配使用。下面我們將深入探討JVM中的…

經典密碼學算法實現

# AES-128 加密算法的規范實現(不使用外部庫) # ECB模式S_BOX [0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B,0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0x…

追蹤大型語言模型的思想(下)(來自針對Claude的分析)

多步推理 正如我們上面所討論的,語言模型回答復雜問題的一種方式就是簡單地記住答案。例如,如果問“達拉斯所在州的首府是哪里?”,一個“機械”的模型可以直接學會輸出“奧斯汀”,而無需知道德克薩斯州,達拉…

【Hive入門】Hive增量數據導入:基于Sqoop的關系型數據庫同步方案深度解析

目錄 引言 1 增量數據導入概述 1.1 增量同步與全量同步對比 1.2 增量同步技術選型矩陣 2 Sqoop增量導入原理剖析 2.1 Sqoop架構設計 2.2 增量同步核心機制 3 Sqoop增量模式詳解 3.1 append模式(基于自增ID) 3.2 lastmodified模式(基…

[Windows] 藍山看圖王 1.0.3.21021

[Windows] 藍山看圖王 鏈接:https://pan.xunlei.com/s/VOPejo0dRLFd38dbpR7XA6djA1?pwddq9v# 由藍山軟件出品的一款免費高清看圖軟件,支持快速查看高清大圖,支持大部分市面圖片格式。 軟件特點 1、體積小巧,圖像顯示效果清晰…

通配符 DNS 記錄:應用場景與相關風險

隨著組織的互聯網基礎設施不斷擴展,其對配置、設置和決策的需求也隨之增加——從選擇一個可靠的名稱服務器,到確定合適的 DNS 記錄類型以及設置合適的 TTL(生存時間)值。其中一項關鍵決策就是是否要創建通配符 DNS 記錄&#xff0…

快速上手知識圖譜開源庫pykeen教程指南(一)

文章目錄 1 前情提要1.1 AmpliGraph 和 PyKEEN 對比介紹1.2 TransE、ConvE、RotatE幾款模型的差異 2 直接上案例2.1 數據載入:TriplesFactory2.2 模型訓練2.2.1 訓練信息2.2.2 TransE模型可以降維實體、關系的關系 2.3 模型保存與加載、評估2.3.1 保存與模型加載2.3…

飛搭系列 | 獲取彈窗數據,輕松實現回填

前言 飛搭低代碼平臺(FeiDa,以下簡稱“飛搭”),為企業提供在線化、靈活的業務應用構建工具,支持高低代碼融合,助力企業低門檻、高效率和低成本地快速應對市場變化,加速復雜業務場景落地。 概要…

Linux如何安裝AppImage程序

Linux如何安裝AppImage程序 文章目錄 Linux如何安裝AppImage程序 在 Linux 中,.AppImage 是一種便攜式的應用程序格式,無需安裝即可運行。 1.賦予該文件可執行權限 可以使用下列命令,賦予可執行權限 # 舉個例子 chmod x /path/to/MyApp.App…

云硬盤的原理

云硬盤是云計算環境中的一種存儲服務,其原理主要涉及數據存儲、數據冗余與容錯、性能優化以及數據安全等方面,以下是具體介紹: 數據存儲 邏輯卷管理:云硬盤通常會將物理存儲設備劃分為多個邏輯卷,每個邏輯卷可以獨立地…

使用 pgrep 殺掉所有指定進程

使用 pgrep 殺掉所有指定進程 pgrep 是一個查找進程 ID 的工具,結合 pkill 或 kill 命令可以方便地終止指定進程。以下是幾種方法: 方法1:使用 pkill(最簡單) pkill 進程名例如殺掉所有名為 “firefox” 的進程&…

堆排序(算法題)

#include <bits/stdc.h> using namespace std;const int N 100010; // 堆數組的最大容量 int h[N], s; // h[]存儲堆元素&#xff0c;s表示當前堆的大小// 下沉操作&#xff1a;調整以i為根的子樹&#xff0c;維護小頂堆性質 void down(int i) {int t i; /…

極狐GitLab 如何將項目共享給群組?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 共享項目和群組 (BASIC ALL) 在極狐GitLab 16.10 中&#xff0c;更改為在成員頁面的成員選項卡上顯示被邀請群組成員&#xf…

用 CodyBuddy 幫我寫自動化運維腳本

我正在參加CodeBuddy「首席試玩官」內容創作大賽&#xff0c;本文所使用的 CodeBuddy 免費下載鏈接&#xff1a;騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴”。 #CodeBuddy首席試玩官 背景 我個人是非常喜歡 Jenkins 自動化部署工具的&#xff0c;之前都是手寫 Jenki…

基于windows安裝MySQL8.0.40

基于windows安裝MySQL8.0.40 基于windows 安裝 MySQL8.0.40&#xff0c;解壓文件到D:\mysql-8.0.40-winx64 在D:\mysql-8.0.40-winx64目錄下創建my.ini文件&#xff0c;并更新一下內容 [client] #客戶端設置&#xff0c;即客戶端默認的連接參數 # 設置mysql客戶端連接服務…

Python小酷庫系列:5個常用的dict屬性化訪問擴展庫

5個常用的dict屬性化訪問擴展庫 嵌套結構高級功能性能綜合建議 在前面我們詳細講解了 Box和 Munch這兩個dict屬性化訪問的擴展庫&#xff0c;總體而言它們主要用于提升配置文件數據、JSON對象數據的可讀性&#xff0c;減少了代碼中雙引號。在這一領域中還有dotmap、addict 和…

OC語言學習——面向對象(下)

一、OC的包裝類 OC提供了NSValue、NSNumber來封裝C語言基本類型&#xff08;short、int、float等&#xff09;。 在 Objective-C 中&#xff0c;**包裝類&#xff08;Wrapper Classes&#xff09;**是用來把基本數據類型&#xff08;如 int、float、char 等&#xff09;“包裝…