数学模型

定义: 为机器人的航向角。为驱动轮轮距。为转弯半径。为左驱动轮线速度,为右驱动轮线速度。
机器人在做圆周运动,内侧驱动轮与外侧驱动轮留下的轨迹均为圆弧,因此外侧驱动轮与内侧驱动轮的路程差为对应的两个圆弧的长度差。根据几何学,建立数学模型:
化简:
转弯半径:
可见机器人的转向是由左右两轮差速决定的。
运动学模型
我们假设车轮不发生轴向滑动,则在机器人坐标系中:
假设我们以两驱动轮中点的速度来衡量机器人的速度,则:
在大地坐标系中:
在平面上运动的机器人有一个旋转自由度,两个平移自由度,因此至少要用3个状态变量来表示。选择状态变量:
选取被控变量:
则机器人的运动学模型可以表示为:
将上述的三个方程离散化:
即得到机器人的离散时间状态空间模型。
Simulink模型搭建
Simulink模型的本质就是运动学模型。Simulink建模的方法也就是先选定输入和输出,然后通过各个环节的连接,实现各种运算,最终形成一个系统。
以左、右两轮的线速度作为输入,以x,y, 及导数作为输出,在simulink中绘制系统:

注:输出x,y, 是便于绘图观察。实际上机器人状态使用它们仨的导数就可以描述了。上图左下角的W是一个常数模块。
为了便于模型的调整,在两轮间距、三个积分器的初值位置,不需要填入具体的值,而只需填入一个自拟的变量名。(此时该模块会标红报错,但后续会解决这个问题,所以这一步不管它):

设置好两轮间距的常数、x,y, 积分器初始值的变量名后,系统会变成这样:

全部选中,右键,封装为子系统。然后选中子系统,右键,Mask→Create Mask。在弹出的页面中点一下parameters,再点左侧的edit。

在Prompt那一栏里填“提示”,也就是变量的新名字。Name那一栏填“名字”,就是之前自拟的变量名(要和填在子系统里的内容一样)。嫌麻烦的话可以都填一样的:

关闭这个界面,再双击子系统,就会看到刚刚设置的mask了。在这里可以输入变量的值,方便每次运行时修改。

然后只要给对应的输入,观察对应的输出,就可以愉快地进行仿真了。
除了添加参数外,还可以在mask上设置子系统的图标。右键:

比如设置左右两轮间距为0.4,左右两轮转速都为1,x初始位置为-5,y初始位置为5,初始位置为pi/2:

运行仿真的结果为:


Simulink模型与.m文件联动
这时的simulink模型只能以simulink中产生的某些信号(如常数,矩形脉冲,正余弦等)作为输入。如果想要与.m文件联动,只需要添加From Workspace模块,并输入变量名即可。

注意使用时要先运行.m文件,这时产生的变量会被存储在Workspace里,Simulink就可以通过变量名访问变量了。
值得注意的一点是,使用这个功能导入的数据,必须含有一个时间戳。也就是矩阵的第一列,应该用来指定每一行对应的时间。矩阵的其他列才是数据。

同理,可以使用To Workspace的模块,将产生的数据输出到工作区,然后使用.m文件处理。输出的数据是结构体的嵌套,按照结构体的调用规则调用即可。