1. 程式人生 > >ADAS/AD控制器模組開發11

ADAS/AD控制器模組開發11

前言

本文講下與UDS相關的Configuration模組和感測器Alignment模組。

Configuration模組即配置模組。什麼叫Configuration?即在軟體構建過程中,那些能夠控制軟體構建過程的資料(一般以引數形式存在)

Alignment模組即校準模組,一般指感測器外參校準;有時也把Alignment叫做EOL/Online/Auto Calibration,即下線標定、線上標定和自動標定;甚至還存在其他稱呼,以下為大家梳理下概念,做個總結:

  1. 下線標定(EOL,End of Line Calibration) = 工廠標定(Factory Calibration);主要指在汽車產線生產最後階段(機能線)對整車上各個零部件功能模組進行離線的外部幾何引數標定(校準)活動。如雷達、攝像頭等,都需要對pan、tilt、roll三個外參角度進行標定,消除誤差。

2. 線上標定(Online Calibration) = 服務站標定(Service Calibration)。在雷達或攝像頭模組更換過後,需要重新進行外參校準,消除誤差。但是你總不能把車再開回工廠進行標定,所以還有個線上的標定功能,經常在4S店用,開啟功能,在路上跑幾圈,標定成功,這也叫服務站標定。

既然談到了Calibration標定,那麼標定又是什麼呢? 即開發過程中,軟體構建完成後,需要匹配的資料;注意只是資料,那些可執行、可編譯的程式碼一定不是標定資料。例如,標定引數(Parameters,車輛怠速的引擎轉速、發動機特性圖)、車輛特性引數(自適應值,例如節流閥限位器)、配置引數(例如國家程式碼、左舵右舵等)。

這麼比較下來,你會發現,標定(Calibration)是一個相對General(一般化)的說法。Configuration Parameter 也屬於 Calibration Parameter中的一部分。實際專案中,儘量避免什麼都用“標定”來形容,否則其他人容易誤會!因為演算法和功能的標定也叫標定,感測器外參的校準也可以叫標定、一些車輛或者系統的其他配置引數的修改,也特麼能叫標定,聽的人一臉懵逼!

Calibration這個詞在本文中,還用在ACC/AEB/LKA等feature的功能演算法標定中,為了更好的區分,本文中對感測器的標定都統一為Alignment(校準),免得跟功能標定混淆。

Configuration配置

ECU的Configuration模組一般包括兩種配置型別。

一種是車輛配置。該Config是通過整車VCAN網路,不停傳送配置引數;而Config模組也需要不停的檢查當前的配置引數,看是否需要在NVM中更新。

一種是直接配置。這類配置引數通常做成DID,並通過UDS診斷服務直接向NVM中進行讀寫。

a. 常見配置引數大致有:

  1. 引擎配置:按排量,例如1.6L、2.0L、2.0T、HEV、PHEV、BEV等;
  2. 車型資訊:例如福特的B479、B515;泛亞的SGM358/256/226;長城的CHB121、CHB071、CHB131、CHB071eAD等等;
  3. FCW的HUD功能配置:無、有、進階FCW-HUD功能;
  4. AHBC功能配置: 關閉、開啟、切到GFHB功能;
  5. LKS功能配置:關閉、LDW、LDW/LKA;
  6. LKS開關配置:直接(硬)開關、網路(軟)開關;
  7. DMS功能配置:關閉、開啟;
  8. TSR功能配置:關閉、僅基於視覺感知、融合感知;
  9. AEB功能配置:關閉、視覺雷達融合目標、Vision Only目標;
  10. ACC功能配置:關閉、視覺雷達融合目標;
  11. 左右舵配置:未定義、左舵、右舵,未使用;
  12. 車輛銷售市場區域:未定義、歐洲、北美、亞太中國、亞太其他、非洲、澳大利亞;
  13. 擋風玻璃加熱控制:通過硬開關、通過網路軟開關;
  14. LKS執行器型別配置:觸覺電機、EPS、AFS(主動前輪轉向)
  15. 頭燈型別配置:未定義、鹵素大燈、鐳射大燈、LED大燈,未使用;
  16. 車速單位選擇:未定義、kph、mph、未使用;

以上是一些常用的配置引數。這些配置引數以一定儲存策略(Strategy)進行儲存、修改。

一般Configuration在軟體實現上很簡單,因為它根本就不算一個模組,只不過是某對兒.h和.c檔案構成的一個數據列表。甚至與其他一些標定引數一起,混在某個總的Data Dictionary中,沒有專門區分。但我寫這一系列文章主要是面向專案實戰的。實戰中,在系統層面,Configuration可以單獨拎出來強調、描述,有很大實戰意義。

b. Configuration的校驗

配置引數的校驗有很多種,一種是對一些關鍵引數進行檢查,如果一些關鍵引數配置無效或者在defined timeout time計數期間仍舊沒有配置完成,對應的Feature和功能就會無法開啟,禁止執行;

另一種校驗是對產品的硬體版本號、軟體版本號、feature功能版本號進行檢查,若實際HW/SW/Feature的版本號不符合DID中記錄的應該具備的版本號,那麼就校驗出錯,提醒開發人員檢查。

Alignment感測器校驗

這裡的感測器並不是指純粹的感測器,一般是集成了感測器模組的ECU總成模組。

記得在第一篇文章《ADAS/AD開發01 - 行業背景、概念&名詞介紹、展望》中介紹過這個概念,一般Sensor指感測器,ECU指控制器(包含運算、電源、儲存等一系列功能的一個較大的PCB主機板,裡面有 各種晶片、Flash、SDRAM、EEPROM、電容、接外掛等等,也叫車載電腦)。ECU可以單獨封裝,也可以與感測器或執行器封裝在一起,組成一個模組。在ADAS/AD相關的模組中,一般不與執行器封裝在一起,都是與感測器封裝。比如,封裝了前視鏡頭模組(Sensor)+包含視覺處理演算法的ECU的一個模組,就被稱為智慧前視攝像頭模組。經常有人圖方便,省去模組二字,直接說智慧前視攝像頭,有些外行人就會一臉懵逼,以為只是個鏡頭感測器。雷達模組同理。

但是,域控制器就屬於比較正統的ECU,就是一個單純的域控制器模組,外圍的視覺、雷達點雲資訊傳進去後,只做運算,輸出控制量給控制執行器的ECU,然後執行器的ECU(EPS、ESP、VCU或ECM)直接控制執行器執行轉向、加速、減速命令。(是不是有點像前端開發的檢視控制器ViewController與檢視View的關係?)

a. EOL Alignment

以智慧前視攝像頭(IFC)為例。

EOL校驗這個topic有幾個要點,講清了就OK了。標定演算法和具體細節就不贅述。強調幹這項工作時的畫面感。不強調技術本身。

  1. EOL Alignment的演算法及標定步驟;
  2. EOL標定目標板和目標板資訊。要知道這個目標板中畫的形狀(Layout)和各種幾何尺寸;
  3. 目標板和車輛組成的標定臺架資訊。如目標板高低,距離車多遠、攝像頭在車上的位置,如高度、距中心軸的偏置、距離車頭距離等。
  4. 儲存以上標定目標板和臺架幾何資訊的DID(基於UDS診斷服務),將DID資訊填充後利用診斷儀或其他裝置寫入IFC中;
  5. 使用對應的UDS服務,呼叫EOL標定的RID(Routing Control功能),進行標定;
  6. 標定成功後,重啟車輛(相當於重啟了IFC),一般ECU的重啟timing都是資料儲存timing,自動儲存標定外參和標定成功的狀態值。

圖1 EyeQ3 常用標定目標板

b. Online Alignment

服務站標定一般用於給4S店員工使用,一般都用診斷儀就能完成。太簡單了,就不講了。描繪下那種工作畫面好了:

換上新的IFC模組後,診斷儀插上OBD口,向IFC傳送診斷命令,設定服務站標定,當標定開始後,開車上車道線清晰、路況較好的路段,開幾分鐘,正常開車,不需要做其他的。等標定成功後,系統提示成功,車輛停到路邊,熄火,再重啟,沒有報錯的話,搞定!

Alignment演算法原理:

校準原理一般都比較簡單:

  1. 通過影象邊緣檢測,檢測出目標板上的特定形狀,計算出形狀的收斂點(比如圓形和圓心的關係);或者直接識別出點(比如那種黑白相間的馬賽克形狀);
  2. 根據點與點的位置,拉一條直線,作為水平線的參考;你也知道這條線的長度以及在目標板上的位置,以及這條線距離地面的高度等;
  3. 這條線的中點一般在目標板中間,左右對稱;
  4. 根據這個水平線中點和這條水平線,作為參照,對比攝像頭檢視影象的鏡頭光軸中心點距離中點的距離,生成一個帶對角線的矩形。計算高度差、偏置差和翻滾角度差(Roll),再根據高度差和偏置差與攝像頭與目標板水平線中點的水平距離,算出Pan和Tilt角;
  5. 若三個角度都沒超出角度閾值,認為誤差滿足要求,記錄下三個角度。