文純屬轉載,并認真學習一遍,感謝大佬分享!
本文章配套源代碼位址:https://github.com/Little-Potato-1990/localization_in_auto_driving
測試資料:https://pan.baidu.com/s/1TyXbifoTHubu3zt4jZ90Wg提取碼: n9ys
本篇文章對應的代碼Tag為 7.0
代碼在後續可能會有調整,如和文章有出入,以實際代碼為準
==================================================================================================
一、概述
由于我們的整體思路是逐漸改進來完成這個系列文章,是以每一步改進之後,實作了怎樣的效果,提升了多少,是要有一個比較的,也就是這裡的裡程計精度評價。
我們沒必要自己寫精度評價算法,有開源的 評價方法evo 可以使用,我們隻需要把對應的gnss資料和裡程計資料存儲下來,在運作完之後使用evo進行資料處理就可以了。
是以本片文章的内容并不多。
二、實作方法
一共分兩步:存資料 和 評價
我們在釋出裡程計的函數PublishData前面再加一個函數 SaveTrajectory 去存儲資料就好。自然需要的就是建立檔案夾、建立txt檔案、往檔案裡寫資料了。
bool FrontEndFlow::SaveTrajectory() {
static std::ofstream ground_truth, laser_odom;
static bool is_file_created = false;
if (!is_file_created) {
if (!FileManager::CreateDirectory(WORK_SPACE_PATH + "/slam_data/trajectory"))
return false;
if (!FileManager::CreateFile(ground_truth, WORK_SPACE_PATH + "/slam_data/trajectory/ground_truth.txt"))
return false;
if (!FileManager::CreateFile(laser_odom, WORK_SPACE_PATH + "/slam_data/trajectory/laser_odom.txt"))
return false;
is_file_created = true;
}
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) {
ground_truth << gnss_odometry_(i, j);
laser_odom << laser_odometry_(i, j);
if (i == 2 && j == 3) {
ground_truth << std::endl;
laser_odom << std::endl;
} else {
ground_truth << " ";
laser_odom << " ";
}
}
}
return true;
}
由于建立檔案夾和建立檔案這類功能是通用功能,是以我們在工程目錄tools檔案夾下定義一個FileManager類,專門存放此類小功能。
其中此處兩個功能對應的函數就分别是CreateDirectory和CreateFile。存資料就是往txt檔案裡寫兩個位姿矩陣。
2. EVO評價
1)安裝EVO
可以直接pip安裝
pip install evo --upgrade --no-binary evo
2)使用EVO評價資料
EVO評價資料有兩種模式,對應的指令分别是 evo_rpe 和 evo_ape ,前者評價的是每段距離内的誤差,後者評價的是絕對誤差随路程的累計。
評價每段距離内的誤差可以使用如下指令
evo_rpe kitti ground_truth.txt laser_odom.txt -r trans_part --delta 100 --plot --plot_mode xyz
其中 --delta 100 表示的是每隔100米統計一次誤差,這樣統計的其實就是誤差的百分比,和kitti的odometry榜單中的距離誤差名額就可以直接對應了。
執行指令之後會得到如下圖形
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yYyYjYlN2NzMjY3UzYzgjMjNzY2ImM3kDO0IGM2MGZi9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
由于每隔100米計算一次,是以是離散的點連成的折線。具體的統計名額如下
最大誤差: 1.843837 %
平均誤差: 0.805469 %
最小誤差: 0.240367 %
RMSE: 0.903959 %
評價總累計誤差可以用如下指令
evo_ape kitti ground_truth.txt laser_odom.txt -r full --plot --plot_mode xyz
會得到這樣的圖形
其中灰色部分就是累計誤差,具體的名額如下
最大值:60.786025 m
平均值:19.478159 m
RMSE: 26.941895 m
從零開始做自動駕駛定位(六): 傳感器時間同步
從零開始做自動駕駛定位(八): 點雲畸變補償
編輯于 02-27