標注:本文來自本實驗室單超的研究成果。
數字孿生用于虛擬描述真實存在的一個或多個特定實體的數字復制品,也就是說建立的數字孿生模型是物理實體的實時數據表達,因此本文擬建立的CAN 數字孿生模型需要做到虛擬CAN 總線和實體CAN 總線的實時的狀態同步,并且要有一定的數據表達能力,實時同步和數據展示是本文探索的重點。由于Simulink 和Carla 都有python 接口可以調用,本文采用python 編程語言作為數據流通的媒介以實現Carla 和Simulink 的實時數據交互。本文直接使用python 的matplotlib 庫作為繪制工具,繪制源數據即模型的模擬結果從matlab 的workspace 中獲取。
Simulink CAN 仿真模型設計
查看Simulink 的CAN 通信模塊的配置參數。CAN Pack 模塊提供的功能為把原始數據封裝成CAN 報文并發送到總線網絡中,相當于ECU 報文封裝的功能,因此使用該模塊的前提是確定封裝數據的數據結構,也就是說需要確定CAN 應用層協議的選擇。本文選擇honda_civic_sedan_16_diesel_2019_can_generated.dbc,該文件對應的是東風本田civic sedan 2019 款的汽車CAN 總線所有非拓展幀的報文格式。本文先針對汽車速度相關報文進行分析。表示汽車速度對應的報文格式如圖所示,報文ID 為777,字段的構造均以小端的方式。
汽車速度對應報文數據段結構
轉向信息對應報文數據段結構
檔位相關報文數據段結構
CAR_SPEED 字段以第7 bit 作為起始點,長為16 bit,數據范圍在0~65535 之間,注釋提供的單位為國際車速單位kph,對應千米每小時。由于COUNTER 和CHECKSUM字段存在部分重合,且CHECKSUM 和COUNTER 不屬于數據段應表示的部分,經考慮,在構造數據結構時刪除CHECKSUM 和COUNTER,在CAN Pack 模塊中構造的信號結構如圖所示。
STEERING_SENSORS 報文中,STEER_SENSOR_STATUS_x 字段被STEER_ANGLE_RAGE字段覆蓋,在模型中重現數據結構時刪除上述5 個字段,只保留GEAR_SHIFTER 和GEAR 字段。GEARBOX 報文中,COUNTER 和CHECKSUM 不屬于數據段內容,經考慮,在模型中重現數據結構時刪除COUNTER 和CHECKSUM。
報文數據結構在模型中重現的步驟是類似的,本文先按流程構建CAR_SPEED 報文,并提供詳細的配置說明,之后再提供STEERING_SENSOR 和GEARBOX 構造結果,最后展示整個模型。
參數配置完成后的CAN Pack 模塊生成了6 個字段輸入端口,1 個CAN 報文輸出端口,為6 個配置輸入端口配置常量模塊作為輸入,CAN Pack 模塊將依據一定的采樣頻率構造報文。后續環節將使用python 調用matlab 結構更改常量的值作為輸入數據的方式。
CAN Transmit 模塊用于將CAN Pack 模塊的報文輸出輸入到CAN 總線內,配置為默認設置即可。
CAN Transmit 模塊配置
CAN Transmit 模塊
對于Virtual Channel 還有額外的配置模塊,用于控制總線傳輸速度,同樣保持默認配置即可。
CAN Channel Configuration 模塊配置
CAN Receive 模塊用于從指定的虛擬CAN 隧道接收報文,可選擇過濾標準數據幀和擴展數據幀,這里保持默認配置,接收所有報文,采樣時間設置為0.1 秒,每0.1 秒觸發目標調用函數,并輸出CAN 報文。
CAN Receive 模塊配置
最終創建的CAN Receive 模塊如圖所示,沒有輸出端口,輸出為一個函數觸發端口,一個報文輸出端口,這兩個端口和Simulink Function-Call Subsystem 模塊對接。
之后進入Function-Call System 內部,加入CAN Unpack 模塊,該模塊會解析指定ID 的標準數據幀數據結構,拆分并輸出,內部配置和CAN Pack 模塊流程相同,先確定CAN 報文數據結構,再添加字段。
創建后的模塊位于Function-Call System 模塊中,會有對應的6 個輸出,將這6 個輸出接入Function-Call System 的輸出。
創建Real-Time Sync 模塊,使得整個模型在模擬實時模擬。
STEERING_SENSORS 和GEARBOX 的數據結構配置也同樣按照上述流程進行。
值得說明的是——honda_civic_sedan_16_diesel_2019_can_generated.dbc 內部含有51 個不同CAN 報文數據結構定義,所以對如此數量的CAN 報文類型一個一個去實現對應的CAN Pack 模塊和CAN Unpack 模塊重復工作量較大,本文在這里只針對典型的汽車數據,如車速,轉向角,檔位相關的數據作為輸入,模擬這三類報文在仿真CAN 總線上的傳輸。
fqj
-
自動駕駛
+關注
關注
784文章
13899瀏覽量
166703 -
數字孿生
+關注
關注
4文章
1340瀏覽量
12296
發布評論請先 登錄
相關推薦
評論