SLAM 精度評估

SLAM 精度的評估有兩個最重要的指標,即絕對軌跡誤差(ATE)和相對位姿誤差(RPE)的
均方根誤差(RMSE):
絕對軌跡誤差:直接計算相機位姿的真實值與 SLAM 系統的估計值之間的差值,首先將真實
值與估計值的時間戳對齊,然后計算每對位姿之間的差值,適合于評估 SLAM 系統的性能。
相對位姿誤差:用于計算兩個相同時間戳上相機位姿的真實值與 SLAM 算法的估計值之間每
隔一段時間位姿變化量之間的差值,也可以理解為位姿真實值與與估計值的實時比較。該標
準適合于估計系統的漂移。
端到端誤差(回環誤差):一段存在回環的軌跡里,SLAM 算法估算的軌跡起點與終點之間
的距離差值。
二 評估工具
evo是一款用于視覺里程計和 slam 問題的軌跡評估工具。核心功能是能夠繪制相機的軌跡,
或評估估計軌跡與真值的誤差。支持多種數據集的軌跡格式(TUM、KITTI、EuRoC MAV、
ROS 的 bag),同時支持這些數據格式之間進行相互轉換。在此僅對其基本功能做簡要介紹。
1.evo 安裝方法
該工具目前被托管在 github 上了,其項目地址為 https://github.com/MichaelGrupp/evo。
作者提供了兩種安裝方法。推薦使用 pip 工具進行安裝,只需要一行代碼即可,將如下代碼
復制到你的終端中運行
pip install evo --upgrade --no-binary evo
2.evo 使用方法
evo 工具主要有如下六個命令:
evo_ape - 用于評估絕對軌跡誤差;
evo_rpe- 用于評估相對位姿誤差;
46
cvlife.net evo_traj - 這個主要是用來畫軌跡、輸出軌跡文件、轉換數據格式等功能;
evo_config - 這個主要用于 evo 工具全局設置和配置文件操作;
evo_res- 比較來自 evo_ape 或 evo_rpe 生成的一個或多個結果文件的工具;
evo_fig - 用于重新打開序列化圖(使用–serialize_plot 保存);
2.1 evo_ape 用法
該命令用于評估兩條軌跡的絕對位姿誤差,最簡單的使用方法為:
evo_ape kitti a.txt b.txt
解釋:如上命令的意思是,比較 kitti 數據集格式的 a.txt 和 b.txt 文件的絕對誤差精度。如果
你要比較的數據集格式為 euroc,那么此時可以使用如下命令:
evo_ape euroc a.csv b.csv
evo 共支持 kitti、tum、euroc 這三個公開數據集格式。
需要注意兩個待比較的數據文件必須格式一致,都為 kitti、tum 或者 euroc
當你使用上面的命令之后,會在你的終端中產生如下類型的結果:
其中:
max:表示最大誤差;
mean:平均誤差;
median:誤差中位數;
min:最小誤差;
rmse:均方根誤差;
sse:和方差、誤差平方和;
std:標準差。
evo_ape 命令后面可以添加的參數有很多,使用如下命令查看參數解析:
evo_ape kitti -h
同樣的是你還可以使用:
evo_ape tum -h
下面示范一個常用的用法,當我們獲得單目 SLAM 生成的軌跡文件時,此時我們需要和真實
軌跡進行對比,但是我們知道單目 SLAM 是沒有尺度的,所以兩個軌跡一定不會一樣大,所
以我們需要對軌跡進行 sim(3)相似變換,那么 evo 就會自動的對軌跡的位移、旋轉、尺度進
行對齊,完成這個任務的代碼如下:
evo_ape tum data.tum CameraTrajectory.txt -aps
解釋:參數-a、-s、-p 即為選擇的參數,分別表示進行軌跡的對齊和尺度修正,以及-p 表
示畫圖誤差的圖和兩個軌跡的圖。
2.2 evo_rpe 用法
該命令用于比較兩個軌跡之間的相對軌跡誤差,也就是兩個時間戳相同時刻的軌跡軌跡誤
47
cvlife.net 差,更具體來說,兩組軌跡持續時間相同,但是采樣頻率不同,那么之間就會有一些少量的
相同時間戳,那么這些相同的時間戳就可以進行一對一比較誤差。同樣的這些誤差也會有平
均誤差、最大、最小誤差等等結果。命令使用方法如下:
evo_rpe xxx a.txt b.txt
evo_rpe 命令依然可以添加一些可選參數項,你同樣可以使用如下命令查看可選參數的具體
介紹和用法:
evo_rpe xxx -h
解釋:其中 xxx 為 tum、kitti、euroc、rosbag 中的一種
2.3 evo_traj 用法
該命令 evo_traj 命令十分有用,它主要用于畫軌跡圖、表格,轉換數據格式等等操作。
下面我們來看一個簡單的用法:
evo_traj tum a.txt
輸出為:
該命令如果不添加任何參數項,那么就輸出軌跡的相關信息。
我們只要簡單的添加一個參數-p 或者--plot 即可看到軌跡的圖形,命令如下:
evo_traj tum a.txt -p
效果如下:
進一步當我們想要畫兩個或者兩個以上的軌跡時:
48
cvlife.net evo_traj tum a.txt b.txt c.txt -p
如果我們想要兩個軌跡匹配到同一個原點那么可以使用參數如下:
evo_traj tum a.txt b.txt c.txt -p --align_origin
又比如下面的命令:
evo_traj kitti 0.txt 1.txt --ref=0.txt -p --plot_mode=xz
解釋:上面命令中參數--ref 表示設置軌跡為參考,--plot_mode=xz 表示軌跡投影到 xz 軸
顯示。
還有一些額外的可選項,它們很有用,你可以通過-h 選項查看參數的介紹和用法。
2.4 evo_config 用法
evo_config 命令比較少用,多數情況下,我們使用默認配置即可。
你可以使用如下命令,查看 evo 默認的一些系統參數設置:
evo_config show --brief
運行上面的命令之后,你的終端上就可以輸出如下信息:
{
"console_logging_format": "%(message)s",
"euler_angle_sequence": "sxyz",
"global_logfile_enabled": false,
"plot_axis_marker_scale": 0.0,
"plot_backend": "Qt5Agg",
"plot_export_format": "pdf",
"plot_figsize": [
6,
6
],
"plot_fontfamily": "sans-serif",
"plot_fontscale": 1.0,
"plot_invert_xaxis": false,
"plot_invert_yaxis": false,
"plot_linewidth": 1.5,
"plot_multi_cmap": "none",
"plot_reference_alpha": 0.5,
"plot_reference_color": "black",
"plot_reference_linestyle": "--",
"plot_seaborn_palette": "deep6",
"plot_seaborn_style": "darkgrid",
"plot_split": false,
"plot_statistics": [
"rmse",
"median",
"mean",
"std",
"min",
"max"
49
cvlife.net ],
"plot_texsystem": "pdflatex",
"plot_trajectory_alpha": 0.75,
"plot_trajectory_cmap": "jet",
"plot_trajectory_linestyle": "-",
"plot_usetex": false,
"plot_xyz_realistic": true,
"ros_map_alpha_value": 1.0,
"ros_map_unknown_cell_value": 205,
"save_traj_in_zip": false,
"table_export_data": "stats",
"table_export_format": "csv",
"table_export_transpose": true
}
如果你想要對某一項參數進行修改,比如你想修改輸出的圖像格式,你可以使用如下命令:
evo_config set plot_export_format png
又比如你想做如下的操作:
1.將畫圖背景更改成白色網格
evo_config set plot_seaborn_style whitegrid
2.將字體改為襯線型并調為 1.2 倍大小
evo_config set plot_fontfamily serif plot_fontscale 1.2
3.將畫圖所使用的線型改為 -
evo_config set plot_reference_linestyle -
4.將所畫圖的圖像大小調整為 10 9(寬 高)
evo_config set plot_figsize 10 9
5.當你想要將配置還原為默認時,只需要使用命令:
evo_config reset
當你對 evo 的使用有一個大致的理解之后,我覺得你再摸索和使用就會方便很多,當你看完
本篇博客之后,如果你還想進一步了解它更細致的使用,你可以瀏覽的 evo 在 github 上的
wiki,網址為:https://github.com/MichaelGrupp/evo/wiki
參考 https://www.guyuehome.com/37988
https://blog.csdn.net/u011341856/article/details/104594392
https://blog.csdn.net/qq_42601453/article/details/121024209

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

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

相關文章

交換機基本原理

文章目錄 前言一、交換機的轉發行為二、交換機的轉發原理1.MAC地址表2.交換機初始狀態3.學習MAC地址4.ARP協議5.交換機轉發數據幀6.目標主機回復 三、華為交換機基本命令1.VRP視圖分層2.命令行補全3.命令行幫助4.配置設備名稱5.命令等級6.用戶界面7.配置console認證8.配置用戶界…

python-Django項目:圖書后臺管理系統

具體操作:請參考 Django項目:圖書后臺管理系統

基于深度學習的圖像補全

基于深度學習的圖像補全是一項利用深度學習技術來填補圖像中缺失區域的研究領域。這項技術可以有效地恢復損壞或不完整的圖像,使其變得完整和自然,廣泛應用于圖像修復、圖像編輯、視頻恢復和增強現實等領域。以下是關于這一領域的系統介紹: …

運維鍋總詳解計算機緩存

本文從OSI模型中的每一層緩存介紹、常見開源中間件緩存舉例、TCP/IP協議棧中的緩存機制、操作系統中的緩存、訪問緩存數據的時間范圍統計等方面對計算機中的緩存進行詳細介紹。希望對您有所幫助! 一、OSI模型中的每一層緩存 1. 物理層(Physical Layer&…

Unity--異步加載場景

Unity–異步加載場景 異步加載場景其實和異步加載資源是一樣的,只是加載的內容比較特殊而已. 也可以將場景視為特殊資源. 1.SceneManager.LoadScene 加載場景的方式,在Unity 中加載場景是通過SceneManager.LoadScene("場景名稱"); 來實現加載場景,這和UE4中的Open…

如何在Java中實現批量數據處理

如何在Java中實現批量數據處理 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 1. 引言 在大數據時代,處理大量數據是許多應用程序中必不可少的需…

自動化立體倉庫出入庫能力及堆垛機節拍

導語 大家好,我是社長,老K。專注分享智能制造和智能倉儲物流等內容。 新書《智能物流系統構成與技術實踐》人俱樂部 完整版文件和更多學習資料,請球友到知識星球【智能倉儲物流技術研習社】自行下載 自動化立體倉庫的出入庫能力、堆垛機節拍以…

安全協議:SSL/TLS與Java實現

在當今的互聯網環境中,數據安全至關重要。SSL(Secure Sockets Layer)和其繼任者TLS(Transport Layer Security)是確保數據在網絡中安全傳輸的關鍵技術。本文將詳細介紹SSL/TLS協議的工作原理,并通過Java代碼…

掌握電路交換與分組交換:計算機網絡的核心技術

計算機網絡是現代信息社會的基石,而交換技術是實現網絡通信的核心。本文將詳細介紹兩種典型的交換方式:電路交換和分組交換,幫助基礎小白快速掌握這兩種技術的基本概念和區別。 什么是電路交換? 電路交換(Circuit Swi…

Java中的服務化架構設計與實現

Java中的服務化架構設計與實現 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 1. 引言 隨著軟件系統規模的不斷擴大和業務需求的增加,傳統的單體…

CentOS7開啟sshd失敗解決方法

Could not load host key: /etc/ssh/ssh_host_rsa_key Could not load host key: /etc/ssh/ssh_host_ecdsa_key Could not load host key: /etc/ssh/ssh_host_ed25519_key sshd: no hostkeys available – exiting. 1、檢查主機密鑰文件是否存在 ls -l /etc/ssh/ssh_host_*2、…

Centos系統遷移

目前,CentOS 全系列版本已經于l六月底正式停止維護,這意味著 CentOS 時代徹底終結,也意味著部署在 CentOS 7 上的業務系統將面臨前所未有的安全挑戰。 本文推薦由紅帽衍生出來的且可以做到真正無縫替代的linux版本Open Euler 注&#xff1a…

【前端】面試八股文——輸入URL到頁面展示的過程

【前端】面試八股文——輸入URL到頁面展示的過程 1. DNS解析 當用戶在瀏覽器中輸入URL并按下回車時,首先需要將域名轉換為IP地址,這個過程稱為DNS(域名系統)解析。具體步驟如下: 瀏覽器緩存:瀏覽器首先檢…

科普文:Linux服務器性能調優概敘

概敘 Java web應用性能分析之服務端慢和優化概敘_cpu飆高java-CSDN博客 Java web應用性能分析之【CPU飆升分析概述】_web頁面性能分析cpu占滿是因為死循環,還是循環過多-CSDN博客 在我們的軟件服務中,軟件部署的服務器,一般都是linux服務器&#xff0c…

ubuntu20.04安裝lio-sam

1、boost版本 boost版本查看:cat /usr/include/boost/version.hpp | grep "BOOST_LIB_VERSION" boost版本為1.78,為1.71時編譯報錯,報錯內容為: error: missing binary operator before token "(" 60 |…

面向txt/json/xlsx/csv的文件讀寫及編碼問題

專欄介紹 1.專欄面向零基礎或基礎較差的機器學習入門的讀者朋友,旨在利用實際代碼案例和通俗化文字說明,使讀者朋友快速上手機器學習及其相關知識體系。 2.專欄內容上包括數據采集、數據讀寫、數據預處理、分類\回歸\聚類算法、可視化等技術。 3.需要強調的是,專欄僅介紹主…

每日一道算法題 彩燈裝飾記錄 I

題目 LCR 149. 彩燈裝飾記錄 I - 力扣(LeetCode) Python # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right …

Redis五種數據結構及其常用使用場景

引言 Redis 是一種高性能的鍵值對數據庫,支持多種數據類型,每種類型都有其獨特的使用場景和優勢。在本篇博客中,我們將深入探討 Redis 的五種主要數據結構:字符串(String)、哈希(Hash&#xff…

Java中的RPC遠程過程調用技術詳解

Java中的RPC遠程過程調用技術詳解 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在分布式系統中,RPC(Remote Procedure Call&#xf…