從零開始做自動駕駛定位 十五 第一階段總結

2021-10-25 07:33:04 字數 2044 閱讀 2509

測試資料:提取碼: n9ys

本篇文章對應的**tag為 14.0

**在後續可能會有調整,如和文章有出入,以實際**為準

第一階段到這裡終於可以告一段落了!

這段時間裡,我們做了這樣幾件事:

1)建立了乙個基礎的ros工程,為了使**清晰,我們把topic發布、接收和感測器資料都封裝了起來。

2)在此基礎上對資料進行了預處理,包括時間同步、點雲畸變補償、桿臂補償等。

3)資料預處理之後,做了建圖的工作,具體包括四個模組:前端里程計、後端優化、閉環校正、建圖視覺化。

4)在得到點雲地圖之後,我們又基於這個地圖做了定位。

5)為了證明程式的可擴充套件性,我們用a-loam替換了我們的前端里程計,以此為例子來解釋如果想把其他地方看到的模組加入到這套系統中來,應該怎麼做。

在編寫**的過程中,我們堅持了乙個重要原則,那就是面向過程,而不只是面向結果。這個在之前的文章中已經多次提過了,我們在之前的工作裡經過了三次大的**結構調整,之所以要這麼做,就是為了復現乙個程式的開發過程,而不是一開始就給出乙個完整的結構。

1)自動駕駛定位要不要建圖?

2)建圖要不要加閉環?

3)程式設計是先實現再整理比較好,還是直接寫最優方式比較好?

這套系統還有非常多的問題:

1)如果仔細看地圖,會發現有些地方還有重影,同時也會發現,都是在轉彎的地方,所以明顯是畸變沒有補償好,這一點在畸變補償那一節已經對原因做了分析,要解決這一問題就要從kitti的原始資料入手了,而不是用二次處理過的bag檔案,這個相對於我們現有的程式來講,改動量比較大,以後要不要解決得看有沒有時間。

2)目前的定位僅僅是雷達定位,其中的gnss和imu資料都沒有加入進來做融合。這一項工作後續是要做的,不過要等到第三階段,現在是第一階段,中間的第二階段要做什麼我們一會兒再講。

3)我們預留了比較多的擴充套件介面,比如點雲匹配時除了使用當前的ndt以外,還可以增加icp、gicp等各種匹配方式,後端優化時除了使用g2o,還可以增加ceres、gtsam等,借助於多型的方式,在擴充套件時會很方便,不需要更改各個模組的核心**,按照介面編寫我們需要增加的功能就行。這一部分的擴充套件,我們會在後面的時間裡不定期完成,畢竟它已經不會影響到框架了,只是各種方法的對比測試而已。

4)目前建圖是適應kitti的場景大小做的,這其實屬於小場景,當場景足夠大,大到上百公里的時候,當前的模式是適應不了的。解決的思路是把大場景分解成小場景,為了兼顧效率和精度,需要我們在程式中自適應的去調整場景分解策略,這種場景分解在建圖和定位中均有需求,而且策略不一樣。

需要注意的是,設計這種自適應分解策略是要耗費一定精力的,但它是值得的,不能為了開發時候省事就手動去分解。在自動駕駛的場景裡,任何手動的方式將來都會被淘汰,換句話說,手動的方式實現的方法,在這個行業是沒有生命力的,自動化是大勢所趨。現在還有某些公司使用手動方式是因為他們還處在demo階段,小批量下精度重於效率,但是自動駕駛不可能永遠處在這個階段,誰更能適應將來商業化落地的要求,誰才能脫穎而出,而效率是商業化要求的重中之重。 開發人員設計方法時應該面向使用者考慮問題,而不是只考慮自己省事,使用者使用的簡單都是我們開發的複雜換來的,不能以複雜、麻煩為理由不去做,這是我們的責任,多簡單的道理,你可以不考慮,使用者也可以不用,最終只能被淘汰。

剛才我們提到了把點雲定位與其他方式的融合放在第三階段,中間有乙個第二階段。

第二階段要做的是gnss+imu(編碼器可選加)的組合導航。因為這種方式其實對融合的要求更高、難度更大,我們在乙個更高要求的任務中才能討論的更清楚,更容易接近它的本質。之後再進行第三階段的事情就簡單許多了。

我之前是做高精度組合導航的,在機械人或者自動駕駛領域使用的更多的是低精度mems組合導航。所以這一階段在介紹到每一部分的時候都會橫向對比,和高精度中的器件、方法做對比,通過這種對比,應該會有更多的思考。

具體內容留在下一階段再聊吧。

從零開始做自動駕駛定位 四 前端里程計之初試

測試資料 提取碼 n9ys 本篇文章對應的 tag為 4.0 在後續可能會有調整,如和文章有出入,以實際 為準 前端里程計本質上其實就是乙個點雲匹配方法,通過匹配累計位姿而已,此處選用的是ndt匹配方法。本著先跑通再研究理論的原則,本篇先用它來實現功能,後面會專門介紹它的理論。為了程式清晰,我們把前...

關於任幹從零開始做自動駕駛的個人總結

for size t i 0 i local map frames size i map filter ptr filter map cloud ptr,map cloud ptr return true 計算相對位姿 中的做法為假設雷達做的是勻速運動,即 位姿為上一時刻的注 ndt和icp配準需乙...

從零開始自動駕駛 gazebo學習入門01

一 開啟gazebo 1 在terminal輸入gazebo開啟乙個空白世界 2 在gazebo中有自帶的世界,可以使用roslaunch命令開啟 roslaunch gazebo ros 回車 會自動顯示自帶的多種世界 下圖為自帶的mud world,其他的世界可以按照提示命令去開啟。二 檢視la...