Apollo 無人駕駛平台中多傳感器標定


傳感器標定是無人車最基礎也是最核心的模塊之一。作為軟件層提供的第一項服務,標定質量和准確度極大地影響着感知、定位地圖、PNC 等模塊。在 Apollo 開源自動駕駛平台中,我們提供了豐富的多傳感器標定服務,如激光雷達、慣導、攝像頭、多普勒雷達等多種傳感器之間的標定。算法覆蓋常規 Level 2-Level 4 級別自動駕駛的傳感器配置和標定需求。

在本文中,我們將從 L4 傳感器標定中兩項核心服務(激光雷達到慣導的標定,攝像頭到激光雷達的標定)入手,詳細介紹 Apollo 標定服務的流程、相關注意事項和常見問題分析,希望 Apollo 開發者和合作伙伴可以參考學習並順利完成高質量的傳感器標定。

多傳感器標定

enter image description here

多傳感器標定是指對於擁有不同特性和不同觀測范圍的傳感器,去准確地找到它們之間的相對位置關系。以上圖為例,雖然它們分別來自於不同的傳感器(攝像頭和激光雷達),擁有不同的觀測角度和不同的數據表達形式, 但是我們也可以設計相應的算法,來准確找到他們的相對位置關系。

enter image description here

傳感器之間的相對位置關系,我們通常會用一個 4×4 的轉換矩陣 M 來表示。通過這個轉換矩陣 M,我們可以將一個傳感器坐標系下的點 x 轉換成另一個傳感器坐標系下的點y。在一個典型的 3D 空間中,傳感器的位移、旋轉、尺寸變化都可以用一個 4×4 的轉換矩陣來表示。以上圖為例,左上角 3*3 的矩陣 R,表示傳感器的旋轉尺寸變化等。右上角的 3×1 的向量 T,表示傳感器之間的位移關系。

enter image description here

對於左上角 3×3 的矩陣 R,基於它的正交性和行列值為 1,我們可以將 3×3 共 9 個參數的 R,轉換成 4 維的四元素向量。所以,傳感器的標定問題,可以簡化成尋找 7 個未知的參數,包括 4 維的 4 元數向量和3維的位移向量。和動輒上百萬參數的深度學習相比,尋找 7 位未知的參數,聽起來像是小菜一碟。

多傳感器標定可能遇到的困難

enter image description here

但實際中,多傳感器標定會遇到各種各樣的問題,它們可能來自於硬件、車載 OS 和通信系統,這就導致多傳感器標定成為了無人車中一個問題“黑洞”。

enter image description here

那么,多傳感器標定為什么會有這么多困難呢?簡單來說,因為不同傳感器的特性和不同的觀測角度,會導致標定算法有巨大的差異。例如,攝像機可以提供豐富的像素信息,但缺乏有用的 3D 信息,而激光點雲可以提供非常准確的 3D 信息,但是信號比較稀疏,並且噪音較大。而不同傳感器的觀測范圍,觀測角度不同,導致標定時不能充分的使用所有傳感器的信號。另外,傳感器標定是硬件和車載 OS 准備充分后的第一個模塊,因此它需要容忍傳感器的噪音,並對傳感器的狀態有足夠靈敏的反應。

Apollo 將多傳感器標定變的簡單可依靠

enter image description here

為了解決這些困難,Apollo 開源平台通過任務分解和算法設計,將多傳感器標定變的簡單可依靠。首先需要粗略的手量傳感器之間的相對位置;其次需要采集有用的傳感器標定數據;最后通過 Apollo 平台的多傳感器標定服務產生准確的標定參數。如同為標定任務建立一個“蟲洞”,使得標定變得更高效。

enter image description here

在本次分享中,我們將依次介紹以上所描述的各個步驟。在最后一個步驟中,外參的優化主要由 Apollo 服務提供,不在本次分享中敘述。

粗略估計標定參數

enter image description here

圖中是一個典型的 Apollo3.5 傳感器方案示例圖。我們可以看到多個激光雷達、攝像頭以及多普勒雷達被安裝在不同的位置,所以需要我們對傳感器進行不同的標定服務。

enter image description here

這一張圖是一個 Apollo3.5 中多傳感器安裝位置和坐標系的俯視圖。不同顏色的箭頭代表着不同的方向。例如,紅色代表 x 軸方向,綠色代表 y 軸方向,藍色代表 z 軸方向;實心圓代表垂直於紙面向外,空心圓代表垂直於紙面向里。我們可以發現,不同的傳感器會有不同的坐標系,而相同的傳感器在不同的位置也會有不同的坐標系。

enter image description here

在手量傳感器標定初值時,一定要分清楚從哪一個源傳感器到哪一個目標傳感器。生成傳感器參數時,一定要注意,這些數值是在目標傳感器坐標系下,位移向量以米為單位,轉換矩陣 4 元素以弧度值為單位。

采集有效的傳感器標定數據

enter image description here

完成初值丈量之后,下一步就是采集有用的標定數據。它主要有兩個步驟,分別是通過 Apollo Cyber RT 錄取有用的數據,並用新開發的 Apollo 數據提取工具,從錄取的數據中提取產生有用的信息。下面,我們為大家詳解如何通過 Apollo Cyber RT 錄取有用的數據。

錄取數據之前的先行檢測

enter image description here

在錄取數據之前,我們有一些先行的效驗步驟來檢測傳感器狀態。在進入 Apollo Docker 之后,我們可以使用 cyber_monitor 命令來檢查安裝的傳感器,有對應的 cyber 信息。在圖中 cyber_monitor 顯示中,左右兩列分別是 cyber 消息名稱和對應的幀率。綠色代表消息正常收發,紅色代表該消息沒有出現。

enter image description here

通過 cyber_monitor,我們可以檢查相應傳感器的幀率是否正常。例如,激光雷達的幀率是 10 赫茲,而攝像機的幀率最低不能低於 15 赫茲,GPS 和慣導的信號幀率為 100 赫茲。

enter image description here

我們還要特別注意,GPS 的信號是否正常,質量是否夠高。如圖紅色框中,Narrow_INT 是正常狀態,而三個方向上的標准方差應該處於 1~2 厘米級別。

enter image description here

在安裝 Apollo 平台的車輛上,我們還可以通過 cyber_visualizer 命令來查看傳感器的原始數據,保證數據質量,例如,圖像是否模糊,激光雷達點雲是否噪音過多。如果上述的檢查有各種問題,通常是由於其硬件安裝和 EOS 系統的配置不正確導致的。

按照 Apollo 的建議進行數據采集

enter image description here

在通過上述初步檢查之后,我們可以按照 Apollo 的建議采集有用的傳感器標定數據。對於激光雷達,我們只需采集原始點雲數據;對於攝像頭,我們建議采集未壓縮的原始圖像信息;對於慣導和 GPS 需采集它的 odometry 信息。右圖三個紅框分別展示了典型的圖像信息、點雲信息以及 GPS 和慣導信息。在使用 Apollo Dreamview 進行數據采集前,大家可以通過上述步驟修改相應腳本里消息列表,以適配你的傳感器方案。

enter image description here

例如激光雷達到慣導的標定,無人車以數字 8 的行車軌跡,進行數據采集。行駛速度在 5~10 英里每小時,需要行駛大概 8 圈。因為激光雷達到慣導的標定不需要攝像頭圖像信息,因此可以通過上一段中介紹的方法,更改腳本里消息列表來過濾掉圖像消息,以減小采集數據包的大小。更詳細的激光雷達到慣導的標定手冊,請參照圖中鏈接(https://github.com/ApolloAuto/apollo/blob/master/docs/specs/lidar_calibration.pdf)。

在采集時,我們希望場景中沒有過多的動態障礙物,且地面基本平整,而且場景中有類似於樹木、電線桿、隔離墩、少量停放的汽車之類的靜態障礙物。

enter image description here

而對於攝像頭到激光雷達的標定,我們可以通過簡單的“4 個 5”來進行開車模式的指導。在一個較為空曠的、擁有大量靜態障礙物的場景中,無人車以大約 5 英里每小時的速度直線行駛大約5米后剎車,之后完全停止大約 5 秒。重復上述步驟 5 到 6 次。

enter image description here

如果不能找到上述那樣的數據采集場景,也可以在一個停放較多車輛的停車場里完成數據采集。只需注意不要有過多的動態障礙物,例如行人和行駛的車輛。

數據采集之后的檢測

enter image description here

當完成數據采集之后,可以運用圖中的命令來查看每一個采集下來的數據包。通過計算每秒鍾采集數據的幀率,可以大致了解數據是否完整的被存放下來。例如 GPS 慣導信號,我們可以看到 4 秒左右的數據包中,大約有 430 個數據消息,它的幀率基本在 100 赫茲,符合預期。而紅框中所標示的攝像頭,它的消息數量為 0,如果我們需要完成該攝像頭的標定,那說明數據采集不成功,這多半是由於硬件和車載 OS 系統沒有按照 Apollo 平台的要求來安裝和配置。

通過 Apollo 工具提取有效數據

enter image description here

當完成數據采集之后,我們可以通過近期開發的 Apollo 平台中數據分析提取工具,來提取有用的標定信息。它是開源的提取工具,只需一行命令,就可以自動完成數據提取和數據壓縮。在 Apollo 的 GitHub 上,這個工具相對應的目錄如右圖所示。

enter image description here

和以前的一些工具相比,這個工具更加智能,而且會極大的減少標定所需上傳的數據。

enter image description here

這個工具相應的命令和配置如圖所示。它的配置主要包括三個部分,第 1 個是 IO 配置,主要是指定標定任務名稱,以及相應的輸出路徑。第 2 個配置,主要為指定輸入的數據包路徑,它可以是完整的數據包路徑列表,也可以是一個包含多個數據包的文件夾路徑。最后一部分主要是指定所需要提取的消息名稱以及采樣率。對於小容量消息,我們建議完整的保留它,因此采樣率為 1。

通過 Apollo 產生准確的標定參數

enter image description here

而對於攝像頭的內參標定,在這里給大家一些基本的建議。 攝像頭內參標定需要采集棋盤格的圖像,要求棋盤格的成像能夠覆蓋圖像的各個區域,並且圖片中的棋盤格必須完整。采集步驟如下:將設備固定在三腳架上,開啟攝像頭,觀察標定板在攝像頭上的成像。將圖像分為圖中所示 5 個區域,將標定板正對攝像頭並移動標定板將成像置於這 5 個區域內。在每個區域內,分別繞標定板的 X、Y 軸旋轉正負 30 度左右各一次,繞Z軸旋轉正負 45 度左右各一次,並采集圖像。

enter image description here

采集完相應的棋盤格圖像之后,可以使用 OpenCV 自帶的攝像頭內參標定工具完成標定。步驟如圖所示。完成內參標定后,請按照 Apollo 建議內參文件格式,生成相應的內參文件。

enter image description here

當完成上述步驟后,可以將數據提取工具產生的壓縮包以及攝像頭的內參文件,發給 Apollo 服務團隊,完成傳感器的標定。

Apollo 的需要和反饋

enter image description here

在這里,我們總結了一些 Apollo 傳感器標定服務所需要的數據等,並給出了兩個示例的傳感器標定數據提取工具配置文件。

短期內的預期

enter image description here

在不久的將來,我們將陸續開放更多的傳感器工具和服務,並進一步優化算法,完成更精准的標定,同時降低傳感器標定上傳所需數據量,提高標定數據質量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM