在之前的文章中,我們介紹了如何構(gòu)建簡單的車輛模型,并基于FMI2.0構(gòu)建了其FMU,其最終結(jié)構(gòu)為:
今天將會(huì)和大家分享如何在aiSim中,通過UDP和aiSim車輛動(dòng)力學(xué)API(Vehicle Dynamics Interface, VDI)來實(shí)現(xiàn)和外部的FMU車輛動(dòng)力學(xué)模型的聯(lián)合仿真。
一、操作步驟
車輛動(dòng)力學(xué)仿真是aiSim的核心組件,能夠根據(jù)駕駛指令來確定車輛的運(yùn)動(dòng)變化?;跍?zhǔn)確可靠的車輛動(dòng)力學(xué)模型,可以確保車輛模擬更加真實(shí)。在aiSim可以將FMU單獨(dú)視作動(dòng)態(tài)庫來實(shí)現(xiàn)車輛動(dòng)力學(xué),也可以基于VDI和UDP來實(shí)現(xiàn)和FMU的聯(lián)合仿真。
1、實(shí)例化VDI
VDI中提供了5種不同的車輛動(dòng)力學(xué)模型,包括:
(1)2d:橫向自行車模型
(2)23d:底盤俯仰和側(cè)傾分離的橫向自行車模型
(3)3d:具有3D剛性車身和獨(dú)立車輪懸掛的橫向輪胎模型(計(jì)算量很大)
(4)拖車模型:用于牽引車輛
(5)FMU:基于FMI對于車輛動(dòng)力學(xué)的不同描述
整個(gè)聯(lián)合仿真的進(jìn)程可以分四個(gè)部分:
(1)根據(jù)車輛名稱匹配對應(yīng)的ego
(2)在VehicleDB.json或是ego自己的asset包中確認(rèn)所定義的車輛動(dòng)力學(xué)模型
(3)實(shí)例化專屬的VDI來處理FMU,定義必須的輸入/輸出數(shù)據(jù)
(4)通過socket和pyfmi處理FMU
在實(shí)例化VDI時(shí),我們將會(huì)遵循以下四個(gè)部分來獲取車輛動(dòng)力學(xué)的相關(guān)數(shù)據(jù)
2、通過UDP實(shí)現(xiàn)FMU的讀取
在實(shí)例化VDI的同時(shí),初始化一個(gè)UDP接口來處理收到的數(shù)據(jù)。
如果我們通過UDP來實(shí)現(xiàn)FMU的讀?。榱?a class="article-link" target="_blank" href="/baike/518271.html">分布式系統(tǒng)),那么我們還需要pyfmi和socket來協(xié)助我們讀取和寫入FMU的數(shù)據(jù),整個(gè)腳本主要實(shí)現(xiàn)功能為:
(1)創(chuàng)建UDP的socket,用于監(jiān)聽和讀取來自VDI的數(shù)據(jù)
(2)解析來自VDI的數(shù)據(jù),獲取動(dòng)力學(xué)數(shù)據(jù)和標(biāo)志信號,后者主要用于步進(jìn)操作
(3)基于標(biāo)志信號步進(jìn)式執(zhí)行仿真
(4)基于fmipy讀取FMU中定義的各種動(dòng)力學(xué)數(shù)據(jù),并將其打包成UDP,在讀取時(shí),同樣遵循modelDescription.xml中的定義。
3、效果展示
在完成以上工作后,可以啟動(dòng)整個(gè)進(jìn)程,看一下分布式聯(lián)合仿真的效果。FMU和對應(yīng)的腳本運(yùn)行在PC1上,aiSim運(yùn)行在PC2上。
以上就是關(guān)于功能模型接口FMI的聯(lián)合仿真的全部內(nèi)容,通過FMU我們可以快速的在不同工具之間進(jìn)行集成,而不需要進(jìn)行大規(guī)模的模型移植或是繁瑣的聯(lián)調(diào)。
如果涉及到聯(lián)合仿真,每個(gè)子系統(tǒng)都需要對應(yīng)的仿真器進(jìn)行求解,在通信時(shí)數(shù)據(jù)的交換頻率和吞吐量都會(huì)對延時(shí)造成影響,從而造成仿真的偏差,可以優(yōu)化不同的通信機(jī)制或是采用案例中主動(dòng)觸發(fā)的方式來減少負(fù)面影響。