天天看點

從零開始做自動駕駛定位(七): 裡程計精度評價文純屬轉載,并認真學習一遍,感謝大佬分享!

文純屬轉載,并認真學習一遍,感謝大佬分享!

本文章配套源代碼位址: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榜單中的距離誤差名額就可以直接對應了。

執行指令之後會得到如下圖形

從零開始做自動駕駛定位(七): 裡程計精度評價文純屬轉載,并認真學習一遍,感謝大佬分享!

由于每隔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

繼續閱讀