Adams/Car和Matlab联合仿真_adams/car与matlab联合优化-程序员宅基地

技术标签: Adams/Car  Adams  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
解决方法:这里是由于你在第三步中设置的参数出现错误所导致的。具体原理我不太懂,估计是车做不到按你设置的参数运动。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39078049/article/details/79601391

智能推荐

安装centos7之后要做的几件事_centos libtoolize-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏6次。本文主要记录安装Centos7之后要做的几件事,作为备忘一 安装第三方源:(此处以aliyun为例)ps:本文所配置环境均为root权限下,如需在普通环境下配置,命令之前请加上sudoEPEL源: yum install epel-release执行完该命令后,在 /etc/yum.repos.d 目录下会多一个 epel.repo 文件ELRepo 源ELRepo 包含..._centos libtoolize

echarts 显示下载按钮,echarts 自定义按钮,echarts 添加按钮-程序员宅基地

文章浏览阅读2.5k次。echarts 显示下载按钮,echarts 自定义按钮,echarts 添加按钮 &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&_echarts 图标上的下载按钮不能用

el-table表头添加图标_el table 表头加图片-程序员宅基地

文章浏览阅读149次。el-table的表头添加特殊内容。_el table 表头加图片

如何防止网页的背景图片重复 no-repeat_网页重复背景-程序员宅基地

文章浏览阅读1.2w次。(1)现在一般都用css设定了,比如在一个div下设背景图片切不让其重复,则可设一个样式,比如:.nobgrepeat{background:url(背景图片地址) left top no-repeat;}(2)也可以设置背景图片的高宽,要与背景图片的大小一样注意:但是有时候加了 no-repeate之后,图片就会不见了,这种情况与设置的 left _网页重复背景

计算机网络的性能指标以及相关计算_计算机网络数据率计算公式-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏17次。用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的"最高数据率"单位和速率一样:b/s(kb/s,Mb/s,Gb/s);RTT计算公式:因为是从发送方发送完数据才开始计算的所以公式中并没有结点A的发送时延,但是有结点B的发送时延;结论:若主机在一段链路上连续不断的发送分组,则总时延为所有分组的发送时延+信号在这一段链路上的传播时延;吞吐量受网络的带宽或额定速率的限制;分组丢失率,是指在一定的时间范围内,传输过程中的丢失的分组数量与总分组数量的比率;_计算机网络数据率计算公式

012信息打点-Web应用&企业产权&指纹识别&域名资产&网络空间&威胁情报_资产指纹和应用-程序员宅基地

文章浏览阅读188次。针对各种应用的信息收集(Web网站、APP应用、PC应用、小程序应用、微信公众号等企业资产分五类:Web应用、APP应用、PC端应用、小程序应用、微信公众号、其他产品信息收集目标:某某企业、某某学校、网址、ip地址_资产指纹和应用

随便推点

《QT从基础到进阶·三十五》QT插件实现侧边工具栏tabBar_qt侧面工具栏-程序员宅基地

文章浏览阅读655次,点赞3次,收藏4次。内部先拿到TabBar的dll转为QObject,再把QObject强转为TabBarPlugin对象,这是插件的使用方法,也可以直接new一个TabBarPlugin对象。四个小工具也是由插件实现,先拿到他们的对象,通过对象指针获取他们的界面,再把每个界面addWidget添加到标签栏中。(2)调换tabBar标签栏中所有界面的循序和删除小工具界面。(3)把tabBar标签栏中的小工具界面拖出来在放回去。3、现在可以对标签栏上的所有界面进行交互。(1)可以收缩和展开tabBar。_qt侧面工具栏

Microsoft Office LTSC 2021企业办公新标杆,稳定高效助力业务发展-程序员宅基地

文章浏览阅读267次,点赞4次,收藏10次。总的来说,Office套件的功能特色在于其强大的文档处理、数据分析、演示制作和邮件管理等功能,以及各应用程序之间的协同工作,能够极大地提高用户的工作效率。除了上述三个主要应用程序外,Office套件还包括其他应用程序,如Outlook、OneNote、Publisher和Access等,每个应用程序都有其独特的功能特色,满足用户在不同场景下的办公需求。Office是一款功能强大的办公软件套件,包含了多个应用程序,每个应用程序都有其独特的功能特色。

Elasticsearch--解决JVM 堆内存使用率很高的问题_elasticsearch8占用大量内存-程序员宅基地

文章浏览阅读2k次,点赞22次,收藏16次。本文介绍如何解决ES的JVM 堆内存使用率飙升的问题。_elasticsearch8占用大量内存

《Selenium 2 自动化测试实战》读书笔记_selenium2自动化测试实战-程序员宅基地

文章浏览阅读136次。最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试 & 自动化测试的理论知识,遂拿过来学习学习。所以本文几乎没有实践内容,大多都是概念和工具的 mark,后续若有实践,我会来补充的。_selenium2自动化测试实战

树莓派4B 与 stm32 通信_树莓派4b 与 stm32 采用usb-ttl通信-程序员宅基地

文章浏览阅读1.7w次,点赞33次,收藏486次。本文用来记录智能控制课设中的通信环节的实现硬件便是树莓派4Bstm32(我用的是正点原子的STM32F103ZET6的核心板)从头开始做的,带着你去从烧录树莓派,安装STM32的编译环境开始,直到二者成功通信。如何使用串口助手进行调试,以及如何通过代码进行通信。1.准备环节(树莓派已经烧录好镜像可以正常使用,stm32也已经装好keil5的同学可以略过)1.1 树莓派新买的树莓派4B一般TF卡没有烧入镜像(也就是树莓派的操作系统)官方推荐系统是以下三种32位Lite版(无桌面)32位桌面版_树莓派4b 与 stm32 采用usb-ttl通信

Ubuntu系统下JDK环境切换_ubuntu切换jdk-程序员宅基地

文章浏览阅读251次。请注意,如果系统上没有安装Java,你将看到一个类似"command not found"的错误信息,这意味着你需要先安装Java。如果你需要切换到一个新的Java版本,首先需要安装该版本。这将列出系统中已安装的Java版本,并要求你选择默认的Java版本。完成上述步骤后,你已经成功安装并配置了新的Java版本。如果需要切换回先前的Java版本或者安装其他版本,重复步骤2和步骤3即可。首先,我们需要检查系统上已安装的Java版本。接下来,需要配置系统使用新安装的Java版本。_ubuntu切换jdk