當前位置:廣州虹科電子科技有限公司>>技術文章>>康謀分享 | 自動駕駛聯(lián)合仿真——功能模型接口FMI(四)
康謀分享 | 自動駕駛聯(lián)合仿真——功能模型接口FMI(四)
在上一篇文章:,我們講述了在構建FMU中,,如何通過fmi_simple_car.cpp來實現(xiàn)FMI2.0,,即如何實現(xiàn)一個簡單的車輛模型來進行車輛動力學仿真。今天康謀接著展示如何通過simple_car.cpp和simple_car.h構建車輛模型本身,。
一,、操作步驟
首先simple_car.cpp主要構建了車輛所需的多個動力學參數(shù),包括底盤的位姿,、車輪的狀態(tài)等,,而simple_car.h提供多個函數(shù)來實現(xiàn)基于FMI2.0標準將參數(shù)寫入到車輛中。
simple_car.cpp主要分為三部分:
初始化車輛動力學參數(shù)
計算參數(shù)并更新車輛的運動變化
根據(jù)車輛的位姿計算車輪的坐標
在頭文件中,,除了定義相關函數(shù)外,,還提供了車輛的一些靜態(tài)參數(shù),用于協(xié)助動力學參數(shù)的計算,,比如給定車輛的轉向傳動比,、軸距、最大附著加速度,、車輪半徑等,。
1、實例化
我們來看一個simple_car.cpp中實現(xiàn)車輛狀態(tài)更新的簡單示例:
const double wheel_angle =val_refs[STEERING_ANGLE] / m_steer_transmission_ratio;
const double curvature = wheel_angle / m_wheelbase
const double yaw_rate = curvature * val_refs[CHASSIS_SPEED]
這三個分別計算了轉向角,、曲率和偏航率,。基于這個三個值,,再結合車輛的靜態(tài)參數(shù),,我們可以計算并推算出其他的車輛運動姿態(tài)參數(shù)。
我們也會通過加速踏板和剎車踏板的狀態(tài)來計算車輛(底盤的縱向加速度),,其中m_max_adh_acc為在頭文件中預先定義的最大附著加速度:
if val_refs[BRAKE_PEDAL_POSITION] < 0.0
{
val_refs[CHASSIS_LONGITUDINAL_ACCELERATION] = val_refs[BRAKE_PEDAL_POSITION] * m_max_adh_acc;
}
可以注意到我們使用了宏定義的[STEERING_ANGLE],、[CHASSIS_LONGITUDINAL_ACCELERATION]和[BRAKE_PEDAL_POSITION]。
使用這一方式的原因:一是為了計算不同參數(shù)時清晰明了,,此外更重要的是這和FMU中的modelDescription.xml文件所對應,,modelDescription.xml規(guī)定了FMU的結構,其結構可以參考FMI系列的第二篇文章,。
2,、關注參數(shù)
在XML文件中,需要關注的參數(shù)類型為name和valuReference,,STEERING_ANGLE這一name對應的valuReference值為3,,那么為了方便我們使用這些參數(shù),可以把這些定義的宏寫入到value_reference_ids.h中,,當然也可以寫入simple_car.h這一頭文件里,。
3、Cmake 編譯
在完成simple_car.cpp,、simple_car.h和FMU描述文件modelDescription.xml文件的構建,,最后一步就是要將其編譯成為所需FMU文件并生成我們的動態(tài)庫文件(.so/.dll)。
我們采用Cmake來進行編譯,,除了定義源文件,、添加庫、特定目錄,、鏈接庫(主要是glm和fmi2_interface)以外,,我們還需要針對FMI平臺進行配置:
以上就是基于FMI2.0構建FMU的全部內(nèi)容,在下一期中我們將介紹在仿真軟件aiSim中通過車輛動力學API來實現(xiàn)和FMU的聯(lián)合仿真,。