Adams/Car和Matlab聯合仿真

網上給的Adams/Car+Matlab/Simulink聯合仿真教程很多,但是我自己調卻仍然出各種問題,最後終於成功,感慨中間全是細節……

參考了MSC軟件的官方微博,和百度文庫中的一篇

本人是個Adams小白,之前完全沒接觸過,所以纔出各種問題,大神們勿噴。

言歸正傳,記錄一下步驟和我遇到過的問題,給大家一個參考。

聯合仿真教程

首先確保Adams/Car和Matlab都是32位或都是64位,否則會出錯誤,以下我以64位爲例。然後確保兩者工作路徑一致,這裏可以直接在兩個程序的桌面快捷方式右鍵->屬性->起始位置中定義。程序打開後的保存路徑就默認爲你設置的工作路徑了。把Adams安裝目錄下Controls\win64\adams_plant.mexw64複製到你之前設置的工作路徑中,防止後面出錯。

在啓動Adams/Car之前,你需要先到C:\User(用戶)\xxx(你的用戶名)\.acar,在最上面Desired user mode中輸入如下:

!----------------------------------------------------------------------!
! Desired user mode (standard/expert)
ENVIRONMENT   MDI_ACAR_USERMODE        standard
ENVIRONMENT   MDI_ACAR_USERMODE        expert
ENVIRONMENT   MDI_ACAR_PLUS_AVIEW      yes
!
!----------------------------------------------------------------------!
這樣你才能在Adams/Car中打開View界面。

然後我這必須先啓動一個License Server(沒細究爲什麼),然後啓動Adams/Car,File->Open->Assembly,在Assembly Name白框中右鍵->Search-><acar_shared>/assemblies.tbl打開MDI_Demo_Vehicle.asy官方例車。

隨後開始進行聯合仿真設置:

1.輸入輸出變量定義

正常來說,自己新建的模型中需要自定義變量,新建變量參考百度文庫這篇。但是例車上已有了相應變量,因此只需將其指定爲輸入輸出變量即可。這裏以輸出body_velocity_x爲例,按照需求自行調整。注意:加粗部分很關鍵!!!

首先,Tools->Plugin Manager中Adams/Controls的兩個框打鉤。

然後,Tools->Adams/View Interface打開另一視圖,確保此時左偏上的下拉菜單顯示的是MDI_Demo_Vehicle.testrig

稍微解釋下上面的原因,我的理解是整車裝配會把包括SDI和車體各個部分的變量全部從整車模型的接口中引出,所以控制器中的變量你都可以在MDI_Deno_Vehicle.testrig中找到。而如果你輸出變量直接從SDI中定義,你會發現輸出的.m文件中接口號都是0,即無法連接到對應接口。所有輸入輸出變量都必須從MDI_Demo_Vehicle下的變量定義。

點擊上方標籤欄Elements左側的Pout定義輸出變量,Plant Output Name改爲.MDI_Demo_Vehicle.testrig.POUTPUT_speed(這裏隨便起),Id按自動生成的,Comment不用填,Variable Name框裏右鍵->Variable Class->Browse,選擇MDI_Demo_Vehicle->testrig->body_velocity_x,OK確定。

同樣,點擊上方標籤欄Elements左側的Pin定義輸入變量。右側邊欄Browse->Elements->Data Elements中能夠看到四個例車中定義的輸出變量,其中包括driver_demands一項。雙擊打開,能夠看到Variable Name中包括

.MDI_Demo_Vehicle.testrig.vas_steering_demand.variable,
.MDI_Demo_Vehicle.testrig.vas_throttle_demand.variable,
.MDI_Demo_Vehicle.testrig.vas_brake_demand.variable,
.MDI_Demo_Vehicle.testrig.vas_gear_demand.variable,
.MDI_Demo_Vehicle.testrig.vas_clutch_demand.variable
這五項。而這五項則是仿真激勵輸出中各控制策略的5個輸入。這5個變量將在第三節中詳細介紹,這裏僅給出結論:

通過實際測試,發現只有當輸入變量是例車中的這5個輸入時,纔會對輸出產生影響,即在生成的Simulink文件中改變輸入,在輸出端看到了變化。而將其他一些量作爲輸入,發現仿真的輸出並沒有改變。這裏僅是我個人的嘗試結果,如果有其他見解請務必留言交流,非常感謝!

Plant Output Name改爲.MDI_Demo_Vehicle.testrig.PINPUT_brake,Id按自動生成的,Comment不用填,Variable Name框裏右鍵->Variable Class->Browse,選擇MDI_Demo_Vehicle->testrig->vas_brake_demand->variable,OK確定。

2.整車模型輸出

標籤欄切換到Plugins,點擊Controls->Plant Export,彈出窗口中修改File Prefix爲car_1(隨便寫,後面匹配即可),點擊Input_Signal處From Pinput,添加MDI_Demo_Vehicle中的PINPUT_torque,確保變量在下面框中第一行(我的默認出現在第二行,會報錯)。同樣步驟操作右側框,添加MDI_Demo_Vehicle中的PINPUT_angle。然後修改Target Software爲MATLAB,Adams/Solver Choice改成Fortran(C++沒試過),確定。此時你的工作路徑中應該出現了acar.txt(操作記錄),car_1.m文件和adams_plant.mexw64。

3.仿真激勵輸出

左上Tools->Select Mode->Switch to A/Car Standard Interface切換回界面,Simulate->Full-Vehicle Analysis->File Driven Events,設置Output Prefix爲speed,Simulation Mode設爲files_only,Driver Control Files中右鍵<acar_shared>/driver_controls.tbl,你可以看到彈出的文件夾中包含很多.dcf文件,這些就是例車的駕駛控制文件。請按照此路徑打開文件夾,複製其中的一個.dcf並重命名爲test.dcf,用記事本打開,參照這篇教程中第8章駕駛機器部分對文件進行修改。讀完教程後,你應當就對上面的5個輸入變量有了一定認識,這裏我的理解是整輛車只有這5個變量是自變量,其他所有變量都是因變量,故而你對其他變量輸入的數值會被計算數值所覆蓋,而這5個變量則是可以輸入的接口。這裏我簡單的將所有5個輸入改成開環控制,完整文本如下:

$---------------------------------------------------------------------MDI_HEADER
[MDI_HEADER]
 FILE_TYPE     = 'dcf'
 FILE_VERSION  = 2.0
 FILE_FORMAT   = 'ASCII'
(COMMENTS)
{comment_string}
'DCF file for cosimulation'
$--------------------------------------------------------------------------UNITS
[UNITS]
 LENGTH  =  'meter'
 FORCE   =  'newton'
 ANGLE   =  'deg'
 MASS    =  'kg'
 TIME    =  'sec'
$---------------------------------------------------------------------EXPERIMENT
[EXPERIMENT]
EXPERIMENT_NAME = 'COSIMULATION'
STATIC_SETUP    = 'STRAIGHT'
INITIAL_SPEED   = 16.667
INITIAL_GEAR    = 3
INITIAL_CLUTCH  = 0

(MINI_MANEUVERS)
{mini_manuever     abort_time   step_size}
'COSIMULATION'      12.0         0.1
$--------------------------------------------------------------------COSIMULATION
[COSIMULATION]
(STEERING)
  ACTUATOR_TYPE     =  'ROTATION'
  METHOD            =  'OPEN'
  MODE              =  'ABSOLUTE'
  CONTROL_TYPE      =  'CONSTANT'
  CONTROL_VALUE     =  0
(THROTTLE)
  METHOD            =  'OPEN'
  MODE              =  'ABSOLUTE'
  CONTROL_TYPE      =  'CONSTANT'
  CONTROL_VALUE     =  0
(BRAKING)
  METHOD            =  'OPEN'
  MODE              =  'ABSOLUTE'
  CONTROL_TYPE      =  'CONSTANT'
  CONTROL_VALUE     =  0
(GEAR)
  METHOD            =  'OPEN'
  MODE              =  'ABSOLUTE'
  CONTROL_TYPE      =  'CONSTANT'
  CONTROL_VALUE     =  3
(CLUTCH)
  METHOD            =  'OPEN'
  MODE              =  'ABSOLUTE'
  CONTROL_TYPE      =  'CONSTANT'
  CONTROL_VALUE     =  0
(END_CONDITIONS)
{measure       test   value   allowed_error filter_time delay_time group}
'VELOCITY'     '<<'     1         0.1           0.0         0.0

這裏推薦在修改完成後,先把上文的Simulation Mode設爲interactive,執行後用Review->Animation Controls進行仿真,觀察自己的設置是否正確(也可以在Review->PostProcessing Window中顯示變量變化曲線),以確定.dcf文件修改正確。然後刪除掉除工作路徑中除步驟2中提到的文件外的其他文件,重新執行仿真激勵輸出,Simulation Mode設爲files_only,繼續下面的步驟。

files_only輸出後,你在Message Windows中應該看不到任何Error並提示written successfully,如果有請重複輸出一遍,還有就請檢查你的變量設置。檢查你的工作路徑,這時應當出現了名爲speed_test(即以test爲.dcf文件的名爲speed的文件)的6個文件(包括.acf和.m文件)和名爲speed_test_controls的.acf文件

4.聯合仿真實現

打開Matlab,打開工作路徑中的car_1.m文件,ADAMS_prefix = 'car_1' 修改爲ADAMS_prefix = 'speed_test' ,ADAMS_init = 'file/command=car_1_controls.acf' 修改爲ADAMS_init = 'file/command=speed_test_controls.acf' ,保存文件。

在Matlab命令行窗口中輸入car_1,此時應當顯示

%%% INFO : ADAMS plant actuators names :
1 xxxxxxxx
%%% INFO : ADAMS plant sensors   names :
1 xxxxxxxx

並且在右側加載了很多變量。在命令行中繼續輸入adams_sys,應當彈出Simulink窗口,包括兩個紅色框和一個名爲adams_sub的橙色框。左上角新建模型,將adams_sub(橙色框)複製進去,添加階躍輸入,輸出接示波器,然後點擊運行。模型底部一開始會顯示compiling,當顯示running後表面模型編譯成功,此時就可以打開示波器查看參數了。推薦輸入用一個階躍輸入,輸入數值要大(因爲默認單位較小,比如速度單位是mm/s,力矩單位N·mm),我的例子中設置爲了10000,看到了明顯變化。

以上就是聯合仿真的全部步驟,下面就可能遇到的問題給出說明。

可能遇到的問題

1.Adams/Car仿真激勵輸出錯誤

Adams中問題報錯:

ERROR:    Invalid operand in expression
ERROR:      ( <<,>>.__MDI_SDI_TESTRIG.steering_wheel_torque )

並且沒有輸出curve_crc.m和curve_crc_controls.acf,打開car_1.m文件後,ADAMS_uy_ids的兩個量都是0。

解決方法:輸入輸出變量設置部分,應當選擇MDI_Demo_Vehicle->testrig下的變量。

2.Simulink中S-function不存在

Simulink中問題報錯:

Error reported by S-function 'adams_plant':S-Function 'adams_plant' does not exist

解決方法:將Adams安裝路徑下controls->win64下的adams_plant.mexw64拷貝到工作路徑中

3.Simulink中S-function啓動失敗

Simulink中問題報錯:

Error reported by S-function 'adams_plant' in xxxxx:Error in Adams(server) simulation startup.

解決方法:仍然應該是輸入輸出變量的定義部分出現錯誤,請仔細按照教程檢查。

4.Simulink編譯成功,運行中終止

Simulink中問題報錯:

Error reported by S-function 'adams_plant' in 'untitled/adams_sub/ADAMS Plant/S-Function':
AEI_Outputs: Adams output evaluation failure at time 0.005000
解決方法:這裏是由於你在第三步中設置的參數出現錯誤所導致的。具體原理我不太懂,估計是車做不到按你設置的參數運動。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章