首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

四足机器人Adams与Matlab联合仿真设置下

知识小课堂继续开讲!

还记得上一讲青棘为大家讲授了那些知识吗?

没错!

就是模型设置、运动副设置、驱动与力设置以及检验设置是否正确四部分内容。

坑友们消化得怎么样啦?检验设置正确后,我们就进入下一步啦!

排排坐!听讲座!!

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方向

如果发现机器人走的很歪,说明初步的算法明显不够完善,需要找到方法保证前进方向恒定。

点“在看”给我一朵小黄花

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191120A0NWX200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券