面向SDV的在環測試深度解析——仿真中間件SIL KIT應用篇

1.引言

在汽車行業向軟件定義汽車(SDV)轉型的過程中,傳統硬件在環(HIL)測試方案因難以適應新的技術架構與需求,其局限性日益凸顯。傳統HIL對硬件依賴性強,擴展性差,更換ECU或傳感器需額外硬件支持,成本高且周期長、難以協調多供應商的異構模型,通信協議之間轉換復雜、對實時場景支持有限(如μs級響應),且難以保證分布式系統的全局時間同步。而以上這些問題痛點通過軟件在環(SIL),依托仿真中間件都可以迎刃而解。所謂“在環”指的是將待測軟硬件置于一個模擬的閉環系統中進行測試和驗證,好像被“圈”在一個由輸入、處理和輸出構成的環路中,不斷地與模擬環境進行交互,以驗證各種情況下的功能和性能是否正確和穩定。而軟件在環,就是這基礎上將待測試的嵌入式軟件從硬件環境中抽象出來,在完全虛擬環境中進行運行和測試。

2.仿真中間件SIL KIT的應用生態

SIL仿真中間件通過虛擬化、標準化通信和分布式架構,可有效解決傳統HIL在擴展性、復雜性和成本方面的局限性。尤其在新型電子架構和自動駕駛開發中,逐漸成為不可替代的測試驗證手段。借助仿真中間件SIL KIT可以實現以下功能:

  1. 通過SIL KIT可創建虛擬ECU節點,無需物理硬件即可模擬各類控制器功能
  2. 支持虛擬 CAN、LIN 和以太網
  3. 提供標準化通信層,如SOME/IP,兼容多種工具鏈
  4. 提供全局仿真時鐘(精度可達±100μs),支持確定性調度
  5. SILKIT可優化大數據傳輸(如激光雷達點云)

SIL KIT的設計目標之一是實現輕松連接不同的工具,并在算法開發的初期階段進行功能驗證。SIL KIT提供抽象通信服務、虛擬車輛網絡、虛擬時間同步和生命周期管理服務。可與虛擬以太網和 CAN 網絡、Linux 虛擬輸入 / 輸出設備、功能模型接口(FMI)標準實現互操作,并支持流行的系統仿真器 QEMU。目前越來越多的第三方軟件工具支持SIL KIT。這種靈活性與高性能相結合,使 SIL Kit 成為軟件定義汽車(SDV)架構下 SIL 測試的完美基礎。

圖 1?SIL KIT生態圖

???????2.1?FMU導入器

SIL KIT可以通過FMI標準接口將FMU作為仿真的一個節點進行訪問,通過YAML配置文件進行FMU和SIL KIT仿真之間的數據和時間同步設置。SIL KIT提供了Synchronized時間同步模式,使得FMU通過SIL KIT的虛擬時間同步與其他SIL KIT參與者同步。可確保在處理下一個仿真步驟之前,FMU接收到來自虛擬時間中先前時間點的所有數據,并立即執行 FMU 的仿真步驟。 ??????

圖 2?SIL KIT與FMU集成

多個FMU之間數據的mapping可以通過配置VariableMapping來快速實現在序列化數據之前將數據進行交換和共享以及類型轉化。??

圖 3?多個FMU之間的數據mapping

??????????????2.2?SIL KIT 網絡模擬器

SIL KIT 網絡模擬器可在網絡層面實現通信行為模擬。它支持 CAN、CAN FD、CAN XL、LIN、FlexRay 和以太網,并將特定總線行為集成到 SIL Kit 仿真環境中。

  1. 可模擬帶寬和網絡延遲等基本參數
  2. 可確保準確模擬特定總線行為,如 CAN 網絡中的仲裁或 FlexRay 集群中的調度
  3. 由網絡模擬器賦能的 SIL Kit 仿真能夠進行更精細的分析,并使仿真結果更具實際意義
  4. 能在早期階段評估網絡設計,包含在過載條件下

? ? ??

圖 4?網絡模擬階段圖

??????????????2.3?SIL KIT 監測器

SIL KIT檢測器是用來收集、存儲并展示來自SIL KIT系統的信息。它是SIL KIT庫的多功能擴展,包含數據庫后端和輕量級 Web 客戶端。通過其Web界面,用戶可以評估已結束的仿真,并監控正在運行的仿真的實時視圖,有助于對仿真進行詳細分析,提供全面的統計數據,并幫助識別配置錯誤和系統異常行為。

圖 5監測器界面

3.仿真中間件SILKIT示例

綜上所述SIL KIT很適合用于自動駕駛算法測試,接下來我們將以自動駕駛ACC功能為例,了解SIL KIT是如何將基于VTD的毫米波雷達數據以CANFD的形式、攝像頭數據以以太網的形式與ACC算法相連接形成閉環,并觸發ACC功能的。

?

圖 6?ACC Demo數據流

3.1 CAN FD的模擬

SIL KIT經過二次開發支持導入并解析DBC文件,可根據信號長度、初始值、Offset、Factor、Layout等構建CAN或CAN FD報文,以原始數據形式發出或對接收到的Message進行解析。如圖 7為原始DBC文件及圖 8解析后的DBC文件。

圖7?原始DBC文件

圖 8?解析后的DBC文件

基于SIL KIT源碼編寫CanWriter、CanReader程序,其中CanWriter建立新線程用于讀取RDB_OBJECT_STATE_t信息,通過vehicle_state_canfd_vehicle_state_pack函數將傳感器數據打包成Message,隨后通過SendFrame函數發布信息到SilKit-Can總線上。

啟動CanWriter、CanReader程序后,在CANoe端激活SIL KIT,并在CAN節點中添加對應DBC文件,在CanWriter、CanReader程序、CANoe Trace中可以觀測到SIL KIT總線上發布的Message,如圖 9、圖 10所示。

圖 9 CanWriter、CanReader終端

圖 10?CANoe Trace CAN報文

3.2 以太網的模擬

在VTD中配置傳感器,同時基于SIL KIT源碼編寫 EthernetWriter、EthernetReader程序,在EthernetWriter中,利用SerializeSensorObjectMsg函數將傳感器數據序列化至payload,同時利用SendFrame函數將payload中的傳感器數據發布至SilKit-Ethernet總線上。對源碼進行編譯前確認CMakeLists.txt中確認已包含所需頭文件的路徑或源文件,如RDBHandler.cc、RDBHandler.hh等。

啟動程序后,在EthernetWriter、EthernetReader程序、CANoe Trace窗口可監控到以太網數據,如圖 11、圖 12、圖 13所示。

圖 11?EthernetWriter終端

圖 12?EthernetReader終端

圖 13?CANoe Trace Ethernet報文

3.3 算法搭建

ACC DEMO算法采用Simulink搭建,生成為C++代碼后導入SIL KIT,算法作為一個SIL KIT總線節點接入來獲取SIL KIT總線上發布的傳感器數據作為函數輸入,根據當前車速、前車速度與前車的距離等車輛狀態信息,算出本車的加速度,圖 14為算法節點數據流。

圖 14?算法節點數據流

算法計算出的車輛控制信號通過指針推入到初始化過得RDBHandler消息中指定的內存塊,通過TCP發送到TaskControl,并在parseRDBMessageEntry中調用本函數,來不斷覆蓋VTD 的DRIVER_CTRL信息實現對VTD中本車的控制。

??????????????3.4?集成與閉環效果

SIL KIT使用 YAML 配置文件來定義仿真環境和參與者的參數,圖 15YAML配置文件里定義了仿真環境的注冊地址和啟用了日志追蹤。

圖15 ?YAML配置文件

在 SIL KIT的仿真場景中,往往存在多個參與者。sil-kit-registry則作為集中式的協調中心,負責管理和協調這些參與者之間的通信與交互。記錄了所有參與者的信息,像參與者的名稱、連接的網絡端點等。當一個新的參與者啟動并嘗試加入仿真環境時,需向sil-kit-registry進行注冊。sil-kit-registry接收這個注冊請求,并將該參與者的信息添加到注冊表中。同時會把其他已注冊參與者的信息提供給新加入的參與者,這樣新參與者就能知道在仿真環境中還有哪些其他參與者,并與它們建立通信,圖 16為sil-kit-registry注冊列表圖。

圖 16 ?sil-kit-registry終端

完成注冊后,運行源碼編譯后的可執行文件,進而可實現不同抽象層次的通信,并執行ACC算法,場景中添加ACC算法后的Ego車可根據前車的速度和相對距離等實時調整本車速度,達到跟車效果,如圖 17所示。

圖 17?仿真結果

4.總結

軟件定義汽車(SDV)正引領汽車行業的變革,其強調軟件在汽車功能實現與創新中的核心地位。在SDV的復雜開發與測試流程里,軟件在環(SIL)仿真技術至關重要,軟件在環測試無需實際的硬件設備,只需在計算機上運行軟件和模擬模型,可大大減少硬件采購、維護和更新的成本。而仿真中間件SIL KIT在軟件在環中更是扮演著不可或缺的角色,它為SDV生態系統中的各類組件與工具搭建起互聯互通的橋梁,有力推動著汽車軟件開發的高效迭代與創新。SIL KIT為自動駕駛算法的開發與測試提供了豐富的資源與環境。開發人員能借助SIL KIT連接自動駕駛算法仿真模塊與高精度地圖仿真、車輛動力學仿真、傳感器仿真等多個模塊。驗證算法在復雜場景下的準確性與可靠性,加速算法迭代優化。下一期內容將介紹虛擬ECU的開發,深入探討基于Vector的vVIRTUALtarget的vECU生成,以及在SIL中的應用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906351.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows使用anaconda安裝pytorch cuda版本

Windows安裝PytorchCUDA環境_使用conda安裝pytorch cuda10.2版本-CSDN博客

Axure中使用動態面板實現圖標拖動交換位置

要在Axure中實現圖標拖動交換位置的功能,可以通過動態面板結合交互事件來實現。 實現步驟 準備圖標元素 將每個圖標轉換為動態面板(方便拖動和交互)。 設置拖動交互 選中圖標動態面板 → 添加“拖動時”交互 → 選擇“移動”當前動態面板&am…

從零開始的嵌入式學習day24

標準IO 頭文件需求&#xff1a; #include <stdio.h>1.fopen和fclose (1)fopen fopen的函數功能是打開一個文件。 首先看看fopen的函數聲明&#xff1a; FILE *fopen(const char *path, const char *mode);第一個參數path是文件地址&#xff0c;傳入的是不可變的字符…

抓包分析工具與流量監控軟件

目錄 一、抓包分析工具&#xff1a;定位問題的“放大鏡” 1.1 工作原理簡述 1.2 主流工具盤點 1.3 抓包的實戰應用 二、流量監控軟件&#xff1a;網絡全景的“雷達系統” 2.1 功能特征 2.2 常用工具概覽 2.3 實戰應用場景 五、結語&#xff1a;深入可見&#xff0c;安…

DRIVEGPT4: 通過大語言模型實現可解釋的端到端自動駕駛

《DriveGPT4: Interpretable End-to-End Autonomous Driving via Large Language Model》 2024年10月發表&#xff0c;來自香港大學、浙江大學、華為和悉尼大學。 多模態大型語言模型&#xff08;MLLM&#xff09;已成為研究界關注的一個突出領域&#xff0c;因為它們擅長處理…

Vue3 Form 表單限制輸入小寫字母、數字和下劃線

方案一&#xff1a;Element Plus 表單驗證 <template><el-form :model"form" :rules"rules" ref"formRef" label-width"120px"><el-form-item label"用戶名" prop"username"><el-input v-m…

23、電網數據管理與智能分析 - 負載預測模擬 - /能源管理組件/grid-data-smart-analysis

76個工業組件庫示例匯總 電網數據管理與智能分析組件 1. 組件概述 本組件旨在模擬一個城市配電網的運行狀態&#xff0c;重點關注數據管理、可視化以及基于模擬數據的智能分析&#xff0c;特別是負載預測功能。用戶可以通過界面交互式地探索電網拓撲、查看節點狀態、控制時間…

單片機復用功能重映射Remap功能

目錄 一、查看“DS5319 stm32f10x中等密度mcu數據手冊&#xff08;英文&#xff09;”手冊 二、查看“RM0008 STM32F10xxx參考手冊&#xff08;中文&#xff09;”手冊 三、重映射&#xff08;Remap&#xff09;功能程序編寫 自己學習過程中容易遺忘的知識點&#xff0c;記錄…

鏈表面試題9之環形鏈表進階

那么上一題我們已經知道了雙指針的變法以及拓展的用法&#xff0c;那么這里我們直接難度升級。 想回去復習的這里放個鏈接&#xff1a;鏈表的面試題8之環形鏈表-CSDN博客 題目鏈接&#xff1a;142. 環形鏈表 II - 力扣&#xff08;LeetCode&#xff09; 我們來看這道題目主要…

游戲引擎學習第299天:改進排序鍵 第二部分

回顧并為當天內容做準備 我們會現場編寫完整的游戲代碼。回顧上周發現自己對游戲中正確的排序規則并沒有清晰的理解。主要原因是我們更擅長三維游戲開發&#xff0c;缺乏二維游戲和二維游戲技術的經驗&#xff0c;對于二維精靈排序、模擬三維效果的最佳方案等沒有太多技巧和經…

Redis從入門到實戰 - 高級篇(中)

一、多級緩存 1. 傳統緩存的問題 傳統的緩存策略一般是請求到達Tomcat后&#xff0c;先查詢Redis&#xff0c;如果未命中則查詢數據庫&#xff0c;存在下面的問題&#xff1a; 請求要經過Tomcat處理&#xff0c;Tomcat的性能成為整個系統的瓶頸Redis緩存失效時&#xff0c;會…

Python訓練營打卡 Day31

文件的規范拆分和寫法 今日的示例代碼包含2個部分 notebook文件夾內的ipynb文件&#xff0c;介紹下今天的思路項目文件夾中其他部分&#xff1a;拆分后的信貸項目&#xff0c;學習下如何拆分的&#xff0c;未來你看到的很多大項目都是類似的拆分方法 知識點回顧&#xff1a;文件…

2025年護網行動藍隊防御全解析:構建智能動態防御體系

2025年&#xff0c;隨著網絡攻擊手段的智能化、混合化升級&#xff0c;護網行動中的藍隊防御已從傳統的被動防護轉向“動態感知、智能研判、主動反制”的立體化模式。如何在攻防不對稱的對抗中實現“看得見、防得住、溯得清”&#xff1f;本文將結合前沿技術與實戰經驗&#xf…

React Contxt詳解

React Contxt詳解 React 的 Context API 是用于跨組件層級傳遞數據的解決方案&#xff0c;尤其適合解決「prop drilling」&#xff08;多層組件手動傳遞 props&#xff09;的問題。以下是關于 Context 的詳細解析&#xff1a; 文章目錄 React Contxt詳解一、Context 核心概念二…

使用 lock4j-redis-template-spring-boot-starter 實現 Redis 分布式鎖

在分布式系統中&#xff0c;多個服務實例可能同時訪問和修改共享資源&#xff0c;從而導致數據不一致的問題。為了解決這個問題&#xff0c;分布式鎖成為了關鍵技術之一。本文將介紹如何使用 lock4j-redis-template-spring-boot-starter 來實現 Redis 分布式鎖&#xff0c;從而…

Vue響應式系統演進與實現解析

一、Vue 2 響應式實現詳解 1. 核心代碼實現 // 依賴收集器&#xff08;觀察者模式&#xff09; class Dep {constructor() {this.subscribers new Set();}depend() {if (activeEffect) {this.subscribers.add(activeEffect);}}notify() {this.subscribers.forEach(effect &g…

Mujoco 學習系列(一)安裝與部署

這個系列文章用來記錄 Google DeepMind 發布的 Mujoco 仿真平臺的使用過程&#xff0c;Mujoco 是具身智能領域中非常知名的仿真平臺&#xff0c;以簡單易用的API和精準的物理引擎而著稱&#xff08;PS&#xff1a;原來Google能寫好API文檔啊&#xff09;&#xff0c;也是我平時…

Ai學習之openai api

一、什么是openai api 大家對特斯拉的馬斯克應該是不陌生的&#xff0c;openai 就是馬斯克投資的一家研究人工智能的公司&#xff0c;它就致力于推動人工智能技術的發展&#xff0c;目標是確保人工智能對人類有益&#xff0c;并實現安全且通用的人工智能。 此后&#xff0c;O…

leetcode 合并區間 java

用 ArrayList<int[]> merged new ArrayList<>();來定義數組的list將數組進行排序 Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));如果前面的末尾>后面的初始&#xff0c;那么新的currentInterval的末尾這兩個數組末尾的最大值&#xff0c;即…

std::vector<>.emplace_back

emplace_back() 詳解&#xff1a;C 就地構造的效率革命 emplace_back() 是 C11 引入的容器成員函數&#xff0c;用于在容器尾部就地構造&#xff08;而非拷貝或移動&#xff09;元素。這一特性顯著提升了復雜對象的插入效率&#xff0c;尤其適用于構造代價較高的類型。 一、核…