最近由于机器人学作业的缘故不得不使用matlab,仿真的时候使用了simulink模块,而作业要求中要求修改模型中的参数来查看参数对结果的影响,在百度中查询到的一些方式都是通过GUI调整的:

在simulink仿真中如何设定初始条件

这种方式交上去老师运行的时候可能会出现一些偏差,并且修改一次参数后面的实验得手动再调回来。。

好在,simulink模块提供了代码中修改参数的方式,主要由get_param和set_param函数来实现的。

这里以sl_braitenberg模块来举例,看一下具体怎么操作。

1.查看模块情况:

直接加载模型就可以从GUI中查看到模块情况,包括内部子模块以及其所具有的参数等:

>> sl_braitenberg

1

这里我需要知道Bicycle模块中具体参数情况,那么双击Bicycle模块 (左边第一个大方块) 即可看到详情:

2

关于组件的模块名称,只需要双击之后弹窗,弹窗中"Block Parameters:"之后的就是对应的组件的模块名,这个值在后面对参数的参数也是很重要的

后面的所有操作都必须先调用如下命令加载模型,否则会提示模型没有加载:

load_system('sl_braitenberg')

2.获取模块参数名称和参数值

了解参数名等信息之后,我们便可以在代码中获得初始参数的情况了:

利用get_param函数,调用方式:

get_param(‘模块名/组件模块名’,‘参数名称’)

有一个问题就是,参数名称和这里显示的不一样,所以首先我们需要获得参数名称,这里以Bicycle子模块为例:

>> temp=get_param('sl_braitenberg/Bicycle','DialogParameters');
>> temp

3

对比之前GUI中的图可以看到作者命名之洒脱。。

得到了参数名称列表,我们就可以具体得到其值了,这里我以GUI中看起来最为复杂的Initial State为例,按照参数名称列表,用代码获取时其名称应该是x0:

>> temp=get_param('sl_braitenberg/Bicycle','x0');
>> temp

4

可见我们在代码中成功取得了模型的初始值。

3.修改代码的参数

既然能够读取到参数,那么修改参数也就是很简单的一件事了,这里用set_param函数实现:

set_param(‘模块名/组件模块名’,‘参数名称’,‘值’)

这里我仍以Initial State为例,在设置其参数之前仿真结果:

sim('sl_braitenberg')   %进行仿真

5

然后修改代码,设置新的初始位置:

set_param('sl_braitenberg/Bicycle','x0','[10,20,pi/6]')
sim('sl_braitenberg')   %进行仿真

运行可以看到明显的结果:

6

这里有两点需要注意:

  1. 设定变量的值的时候其值是字符串,需要用单引号引起来。
  2. 对初始参数的修改会直接作用到模型上,会影响到后面的实现,所以可以通过最后把模型的值初始改回来让它不会对后面的实验造成影响。

比如:

set_param('sl_braitenberg/Bicycle','x0','[10,20,pi/6]') %设置新的初始位姿
sim('sl_braitenberg')   %进行仿真
set_param('sl_braitenberg/Bicycle','x0','[5,5,0]') %恢复原来初始位姿
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐