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