知识小课堂继续开讲!
还记得上一讲青棘为大家讲授了那些知识吗?
没错!
就是模型设置、运动副设置、驱动与力设置以及检验设置是否正确四部分内容。
坑友们消化得怎么样啦?检验设置正确后,我们就进入下一步啦!
排排坐!听讲座!!
5
Adams与Matlab联合仿真的设置
由于四足的控制系统比较复杂,在adams中无法完美设置控制函数,因此选用Matlab进行控制。点击“单元->系统单元”中的第一个,创建状态变量(图5.1)。其可以作为adams的与其它软件交互的输入输出。
图5.1
在新的窗口中“名称”一栏可修改状态的名字,点击应用即建立完一个状态变量(图5.2)。
图5.2
建立八个状态变量作为输入,分别命名为“FR1、FR2、FL1、FL2、BR1、BR2、BL1、BL2”,对应于每个腿上的驱动。在软件左侧物品栏的“单元->系统单元”中存放着刚刚建立的状态变量。
建立完成输入变量后要与相应的驱动相关联。双击某一驱动,在出现的窗口中点击“函数(时间)”右侧的省略号,出现函数设置窗口(图5.3),删除最上方自带函数,在“辅助”左侧的栏目中单击,选择“数据单元“,选中其第一栏”Algebraic Variable Value“,点击辅助,在出现的小窗口中双击,弹出之前建立的状态变量,选中对应的状态变量,依次点击每个窗口的确定,即完成一个状态变量与驱动的绑定。最后结果如图5.4。重复操作,完成状态变量与对应驱动的绑定。
图5.3
图5.4
有输入就有输出,所以接下来创建作为输出的状态变量。
同样点击“单元->系统单元”的“x”,点击图5.2中“F(time,…)”一栏右侧的省略号,在弹出的窗口中选择“位移->Distance along X”,点击辅助,在弹出的窗口的双击“终点标记点”的空白处,在之后弹出的窗口中选择要测量的点,此处选择身体的质心(图5.5),点击确定,最后将状态变量名字改为“shenticmx” 即将状态变量与车身质心的x方向位移绑定(图5.6)。重复上述过程,得到车身质心的y方向位移,z方向位移。选择“速度”,得到车身质心的x,y,z方向速度。
图5.5
图5.6
最重要的是得到驱动的力矩大小,它的获取有些不同。
首先右击“驱动”文件夹下要得到其数据的某一驱动,点击“测量”,弹出的界面(图5.7),“特性”选择“力矩”。分量选择“Z”(由于力矩是z方向),点击确定,关闭弹出的窗口。
图5.7
点击图5.3中界面右下方“获取对象数据”下方,选择测量,双击右侧的灰色区域,在弹出的窗口中点开“ghost”,下方出现刚刚选择测量的驱动(图5.8),选中,确定。再点击“插入对象名称”,确定,命名,确定(图5.9)。重复操作,得到对角两足共四个驱动。所有状态变量如图5.10。
图5.8
图5.9
图5.10
接下来即可将adams与matlab建立联系。
点击“插件->Adama Controal”,选择“机械系统导出”(图5.11),在弹出的窗口中(图5.12),双击“输入信号”下的区域,弹出之前设定的状态变量,选中作为输入的状态变量,确定; 双击“输入信号”下的区域,选择作为输出的状态变量,确定。修改右上两栏的名称。在“目标软件”一栏中选择“MATLAB”。点击确定,会在admas的工作目录中就会生成4个相应的文件。
图5.11
图5.12
6
Matlab中与Adams联合仿真的设置
打开adams的工作目录,在其中找到以下四个文件(如图6.1)。打开Matlab,将此四个文件拖到matlab的工作目录下,或直接将matlab的工作目录改为此文件所在目录。
图6.1
在matlab中打开“Myghost1.m”,运行(每次仿真前保证相应的m文件运行)。在命令行中得到(如图6.2)的内容,即输入与输出的状态变量。
之后在命名行中输入“adams_sys”,得到(如图6.3)框图。通过这个框图,实现MATLAB对ADMAS模型的控制。
图6.2
图6.3
点击MATLAB中的“Simulink”,新建一个“Blank Model”文件,将上图中的内容复制到新建的界面中,并添加相应的组件。如果不用的话可以删掉上图两个红框。双击“admas_sub”,打开如下框图(如图6.4)。
图6.4
双击“MSC Software“,打开编辑窗口(如图6.5)。在“Animation”中选择“interactive”即交互,simulation mode选择第一项,在“Communication interval”中填入0.0005,即交互时间间隔为0.0005秒。如果运动的幅度过于剧烈,变化很快,最好将交互时间设置小,并且将“Plant input Interpolation order”及其下一行设置为1,防止报错。
图6.5
为了方便,在Matlab中采用“S函数”进行控制的编写。
S-函数是系统函数(System Function)的简称,是指采用非图形化的方式(即计算机语言,区别于Simulink的系统模块)描述的一个功能块。用户可以采用MATLAB代码,C,C++,FORTRAM等语言编写S-函数。S-函数由一种特定的语法构成,用来描述并实现连续系统、离散系统以及复合系统等动态系统;S-函数能够接受来自Simulink求解器的相关信息,并对求解器发出的命令作出适当的响应。
Matlab为2016版,其它版本可能有所不同。打开simulink的库,点击“User-Defined Function“,打开”S-Function Example“,选择”MATLAB file S-function”,双击“level-1“,选择最下方的模板,即打开了matlab的s-函数模板。复制模板,粘贴到新建的m文件中,在其基础上修改编写自己的S-函数。
S-函数模板中的函数特别多,但目前主要使用到的有“mdlInitializeSizes“(模型初始化函数)与”mdlOutputs(t,x,u)“(计算输出函数)。
找到“mdlInitializeSizes“的函数主体部分,将其初始化部分设置如下:
sizes = simsizes;
sizes.NumContStates=1; %连续状态变量个数;
sizes.NumDiscStates=0; %离散状态变量个数;
sizes.NumOutputs =1; %输出变量个数;
sizes.NumInputs =1; %输入变量个数 。
(根据需要的输入变量个数修改)
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; % at least one sample time is needed。
找到“mdlOutputs(t,x,u)“的函数主体部分,其设置如下:
%计算输出
function sys=mdlOutputs(t,x,u)
% sys =(u)*180/pi; %直接使用简单的式子;
% sys=30*u(1)+sin(u(2)); %如果有多个输入,将在交互界面中将输入用“Mux“整合;
sys=Move(u,1); %调用自己编写的函数。
为了以后修改方便,将所有使用的S-函数调用同一个“Move(t,n)”函数(t表示时间,n表示腿的时序)。
为每条腿上的驱动构建一个S-函数。打开simulink的库,点击“User-Defined Function“, 将右侧框图中的“S-Function”拖入图6.5所以界面中,双击拖入的图形,在“S-function name:”中填入自己编写的S-函数名称。之后在库中点击“Sources”,拖入“Ramp”信号作为S-函数的输入。最后得到的图形(如图6.6)。
图6.6
选中右侧的所有输出状态变量,点击菜单栏中,选择第二项,即可以保存下每次仿真的数据。仿真结束之后点击第一项可以查看结果。
7
联合仿真结果显示
编写好初步的对角步运动控制算法后,点击开始按钮,进入联合仿真,matlab会自动打开adams,adams中会出现相应的仿真动画,但仿真动画无法保存,如果需要动画,建议录屏。
运动过程截屏如下:
查看仿真结果:
运动中三个方向的位移曲线如下:
蓝线x方向,黄线z方向,红线y方向
如果发现机器人走的很歪,说明初步的算法明显不够完善,需要找到方法保证前进方向恒定。
点“在看”给我一朵小黄花
领取专属 10元无门槛券
私享最新 技术干货