傳感器標定是無人車最基礎也是最核心的模塊之一。作為軟件層提供的第一項服務,標定質量和准確度極大地影響着感知、定位地圖、PNC 等模塊。在 Apollo 開源自動駕駛平台中,我們提供了豐富的多傳感器標定服務,如激光雷達、慣導、攝像頭、多普勒雷達等多種傳感器之間的標定。算法覆蓋常規 Level 2-Level 4 級別自動駕駛的傳感器配置和標定需求。
在本文中,我們將從 L4 傳感器標定中兩項核心服務(激光雷達到慣導的標定,攝像頭到激光雷達的標定)入手,詳細介紹 Apollo 標定服務的流程、相關注意事項和常見問題分析,希望 Apollo 開發者和合作伙伴可以參考學習並順利完成高質量的傳感器標定。
多傳感器標定
多傳感器標定是指對於擁有不同特性和不同觀測范圍的傳感器,去准確地找到它們之間的相對位置關系。以上圖為例,雖然它們分別來自於不同的傳感器(攝像頭和激光雷達),擁有不同的觀測角度和不同的數據表達形式, 但是我們也可以設計相應的算法,來准確找到他們的相對位置關系。
傳感器之間的相對位置關系,我們通常會用一個 4×4 的轉換矩陣 M 來表示。通過這個轉換矩陣 M,我們可以將一個傳感器坐標系下的點 x 轉換成另一個傳感器坐標系下的點y。在一個典型的 3D 空間中,傳感器的位移、旋轉、尺寸變化都可以用一個 4×4 的轉換矩陣來表示。以上圖為例,左上角 3*3 的矩陣 R,表示傳感器的旋轉尺寸變化等。右上角的 3×1 的向量 T,表示傳感器之間的位移關系。
對於左上角 3×3 的矩陣 R,基於它的正交性和行列值為 1,我們可以將 3×3 共 9 個參數的 R,轉換成 4 維的四元素向量。所以,傳感器的標定問題,可以簡化成尋找 7 個未知的參數,包括 4 維的 4 元數向量和3維的位移向量。和動輒上百萬參數的深度學習相比,尋找 7 位未知的參數,聽起來像是小菜一碟。
多傳感器標定可能遇到的困難
但實際中,多傳感器標定會遇到各種各樣的問題,它們可能來自於硬件、車載 OS 和通信系統,這就導致多傳感器標定成為了無人車中一個問題“黑洞”。
那么,多傳感器標定為什么會有這么多困難呢?簡單來說,因為不同傳感器的特性和不同的觀測角度,會導致標定算法有巨大的差異。例如,攝像機可以提供豐富的像素信息,但缺乏有用的 3D 信息,而激光點雲可以提供非常准確的 3D 信息,但是信號比較稀疏,並且噪音較大。而不同傳感器的觀測范圍,觀測角度不同,導致標定時不能充分的使用所有傳感器的信號。另外,傳感器標定是硬件和車載 OS 准備充分后的第一個模塊,因此它需要容忍傳感器的噪音,並對傳感器的狀態有足夠靈敏的反應。
Apollo 將多傳感器標定變的簡單可依靠
為了解決這些困難,Apollo 開源平台通過任務分解和算法設計,將多傳感器標定變的簡單可依靠。首先需要粗略的手量傳感器之間的相對位置;其次需要采集有用的傳感器標定數據;最后通過 Apollo 平台的多傳感器標定服務產生准確的標定參數。如同為標定任務建立一個“蟲洞”,使得標定變得更高效。
在本次分享中,我們將依次介紹以上所描述的各個步驟。在最后一個步驟中,外參的優化主要由 Apollo 服務提供,不在本次分享中敘述。
粗略估計標定參數
圖中是一個典型的 Apollo3.5 傳感器方案示例圖。我們可以看到多個激光雷達、攝像頭以及多普勒雷達被安裝在不同的位置,所以需要我們對傳感器進行不同的標定服務。
這一張圖是一個 Apollo3.5 中多傳感器安裝位置和坐標系的俯視圖。不同顏色的箭頭代表着不同的方向。例如,紅色代表 x 軸方向,綠色代表 y 軸方向,藍色代表 z 軸方向;實心圓代表垂直於紙面向外,空心圓代表垂直於紙面向里。我們可以發現,不同的傳感器會有不同的坐標系,而相同的傳感器在不同的位置也會有不同的坐標系。
在手量傳感器標定初值時,一定要分清楚從哪一個源傳感器到哪一個目標傳感器。生成傳感器參數時,一定要注意,這些數值是在目標傳感器坐標系下,位移向量以米為單位,轉換矩陣 4 元素以弧度值為單位。
采集有效的傳感器標定數據
完成初值丈量之后,下一步就是采集有用的標定數據。它主要有兩個步驟,分別是通過 Apollo Cyber RT 錄取有用的數據,並用新開發的 Apollo 數據提取工具,從錄取的數據中提取產生有用的信息。下面,我們為大家詳解如何通過 Apollo Cyber RT 錄取有用的數據。
錄取數據之前的先行檢測
在錄取數據之前,我們有一些先行的效驗步驟來檢測傳感器狀態。在進入 Apollo Docker 之后,我們可以使用 cyber_monitor 命令來檢查安裝的傳感器,有對應的 cyber 信息。在圖中 cyber_monitor 顯示中,左右兩列分別是 cyber 消息名稱和對應的幀率。綠色代表消息正常收發,紅色代表該消息沒有出現。
通過 cyber_monitor,我們可以檢查相應傳感器的幀率是否正常。例如,激光雷達的幀率是 10 赫茲,而攝像機的幀率最低不能低於 15 赫茲,GPS 和慣導的信號幀率為 100 赫茲。
我們還要特別注意,GPS 的信號是否正常,質量是否夠高。如圖紅色框中,Narrow_INT 是正常狀態,而三個方向上的標准方差應該處於 1~2 厘米級別。
在安裝 Apollo 平台的車輛上,我們還可以通過 cyber_visualizer 命令來查看傳感器的原始數據,保證數據質量,例如,圖像是否模糊,激光雷達點雲是否噪音過多。如果上述的檢查有各種問題,通常是由於其硬件安裝和 EOS 系統的配置不正確導致的。
按照 Apollo 的建議進行數據采集
在通過上述初步檢查之后,我們可以按照 Apollo 的建議采集有用的傳感器標定數據。對於激光雷達,我們只需采集原始點雲數據;對於攝像頭,我們建議采集未壓縮的原始圖像信息;對於慣導和 GPS 需采集它的 odometry 信息。右圖三個紅框分別展示了典型的圖像信息、點雲信息以及 GPS 和慣導信息。在使用 Apollo Dreamview 進行數據采集前,大家可以通過上述步驟修改相應腳本里消息列表,以適配你的傳感器方案。
例如激光雷達到慣導的標定,無人車以數字 8 的行車軌跡,進行數據采集。行駛速度在 5~10 英里每小時,需要行駛大概 8 圈。因為激光雷達到慣導的標定不需要攝像頭圖像信息,因此可以通過上一段中介紹的方法,更改腳本里消息列表來過濾掉圖像消息,以減小采集數據包的大小。更詳細的激光雷達到慣導的標定手冊,請參照圖中鏈接(https://github.com/ApolloAuto/apollo/blob/master/docs/specs/lidar_calibration.pdf)。
在采集時,我們希望場景中沒有過多的動態障礙物,且地面基本平整,而且場景中有類似於樹木、電線桿、隔離墩、少量停放的汽車之類的靜態障礙物。
而對於攝像頭到激光雷達的標定,我們可以通過簡單的“4 個 5”來進行開車模式的指導。在一個較為空曠的、擁有大量靜態障礙物的場景中,無人車以大約 5 英里每小時的速度直線行駛大約5米后剎車,之后完全停止大約 5 秒。重復上述步驟 5 到 6 次。
如果不能找到上述那樣的數據采集場景,也可以在一個停放較多車輛的停車場里完成數據采集。只需注意不要有過多的動態障礙物,例如行人和行駛的車輛。
數據采集之后的檢測
當完成數據采集之后,可以運用圖中的命令來查看每一個采集下來的數據包。通過計算每秒鍾采集數據的幀率,可以大致了解數據是否完整的被存放下來。例如 GPS 慣導信號,我們可以看到 4 秒左右的數據包中,大約有 430 個數據消息,它的幀率基本在 100 赫茲,符合預期。而紅框中所標示的攝像頭,它的消息數量為 0,如果我們需要完成該攝像頭的標定,那說明數據采集不成功,這多半是由於硬件和車載 OS 系統沒有按照 Apollo 平台的要求來安裝和配置。
通過 Apollo 工具提取有效數據
當完成數據采集之后,我們可以通過近期開發的 Apollo 平台中數據分析提取工具,來提取有用的標定信息。它是開源的提取工具,只需一行命令,就可以自動完成數據提取和數據壓縮。在 Apollo 的 GitHub 上,這個工具相對應的目錄如右圖所示。
和以前的一些工具相比,這個工具更加智能,而且會極大的減少標定所需上傳的數據。
這個工具相應的命令和配置如圖所示。它的配置主要包括三個部分,第 1 個是 IO 配置,主要是指定標定任務名稱,以及相應的輸出路徑。第 2 個配置,主要為指定輸入的數據包路徑,它可以是完整的數據包路徑列表,也可以是一個包含多個數據包的文件夾路徑。最后一部分主要是指定所需要提取的消息名稱以及采樣率。對於小容量消息,我們建議完整的保留它,因此采樣率為 1。
通過 Apollo 產生准確的標定參數
而對於攝像頭的內參標定,在這里給大家一些基本的建議。 攝像頭內參標定需要采集棋盤格的圖像,要求棋盤格的成像能夠覆蓋圖像的各個區域,並且圖片中的棋盤格必須完整。采集步驟如下:將設備固定在三腳架上,開啟攝像頭,觀察標定板在攝像頭上的成像。將圖像分為圖中所示 5 個區域,將標定板正對攝像頭並移動標定板將成像置於這 5 個區域內。在每個區域內,分別繞標定板的 X、Y 軸旋轉正負 30 度左右各一次,繞Z軸旋轉正負 45 度左右各一次,並采集圖像。
采集完相應的棋盤格圖像之后,可以使用 OpenCV 自帶的攝像頭內參標定工具完成標定。步驟如圖所示。完成內參標定后,請按照 Apollo 建議內參文件格式,生成相應的內參文件。
當完成上述步驟后,可以將數據提取工具產生的壓縮包以及攝像頭的內參文件,發給 Apollo 服務團隊,完成傳感器的標定。
Apollo 的需要和反饋
在這里,我們總結了一些 Apollo 傳感器標定服務所需要的數據等,並給出了兩個示例的傳感器標定數據提取工具配置文件。
短期內的預期
在不久的將來,我們將陸續開放更多的傳感器工具和服務,並進一步優化算法,完成更精准的標定,同時降低傳感器標定上傳所需數據量,提高標定數據質量。