基于matlab的智能车仿真程序

基于MATLAB的智能车仿真程序——建模篇

在家无聊,自己用matlab写了一个智能车的仿真程序,其实网上也有plastid的资源,但下载后发现它的仿真步长是10ms,也就是0.1s再高速运动下的仿真效果猜测是不咋地的,然后舵机和电机模型也都是不可见的,自己无法编辑。就决定自己写一个。然后我这次仿真用的是摄像头作为传感器,摄像头的角度和安排高度可以自己调整,第一次发文,不怎么会用,多多包涵。

建模

仿真的主要任务就是建模,对智能车的机械结构,电机,舵机,摄像头等等建立数学模型。

电机建模

电机的控制,是通过程序输出的pwm波来实现电机的加速,减速,正转,反转。因为没有资料,我的推断如下,pwm波是通过程序改变有效信号的占空比,有效信号的值是固定的,占空比的变化,导致一个脉冲的面积变化,也就是功的变化,那么单位时间内的总功,也就是功率变化,所以pwm归根结底是控制是电机的输出功率。
所以我排除了利用牛二建立加速度模型,选择了建立恒功率加速模型。
高中知识,不必多讲,大家都会的。不过程序中我加入了判断,速度与功率的正负号,所以我的程序中车是可以倒车的,但并没有实际作用。还加入了一个“启动功率”,这个是基于我平常做车的经验加上去的(我发现在我平常做车的时候,当车停下来时,需要更大的pwm输出才能让他启动,我程序中设置的是2w)。

舵机及转向建模

相比电机,舵机的建模会复杂一些,但也不难。我们知道舵机的扭转前轮的速度跟舵机的扭矩和安装方式,还有车辆的机械结构有关,但我身边没有现车,我也忘记了舵机的安装方式,不好分析其机械结构的运作方式。所以我这里直接将舵机的设置成了匀速扭转,我的程序中是180°/s。也就是前轮改变方向的角速度。然后是转向模型。关于前轮的转向模型,网上也有很多资源,我只简单说一下。

在这里插入图片描述
上图不难推出转向半径的计算公式,知道,车长,车宽,前轮转角,可以算出各种信息,然后,三角形OAB一个余弦定理就出来,就是OA的长,车身的转向角度,知道速度,知道时间(dt),然后算出经过的路径长,除以转向半径就是车身转过的角度(图中就是阿尔法2减阿尔法1)。对于形式过程中,仿真时间间隔较短,(我使用的是1ms),用v·dt· ee是车身的方向向量,就可以模拟车辆的运动位移过程了)。

摄像头建模

这个的确让我头疼了很久,奈何空间想象能力不行,推导了很久,虽然最终建立了模型,但不怎么好表达自己的想法。可能会描述不清,大家见谅。
摄像头采集图像是从一个3维的空间中采集图像,不过幸运的是我们赛道大多是平面的,所以我将摄像头分解到了两个方向进行建模。
第一个方向,与车轴线重合的竖直方向
在这里插入图片描述
图中O点是摄像头所在的位置其后方是摄像头感光元件CCD所在的位置,其上的感光元件是等距的,对应的也正是最终我们得到图像中的每一行所在的位置。图中A点就是我们最终图像的第一行的位置(最下方),B点就是最上方的那一行,假设我们的得到图像是60·80的图像,作等腰三角形OAC,然后将AC等分成80分,与O点连接,延长线与AB的交点交点就是图像中每一行采集信息的位置。这里知道摄像头高度,A点位置,B点位置,用几次余弦定理,就可以得到每一行所采集信息的位置。
另外一个方向,鸟瞰的方向,也就是从赛道上方垂直向下看的方向。
在这里插入图片描述
将摄像头的采集光线,投影到一个平面(地面),就得到图中的样子,图中AB,CD就是之前所说的第一行,与最后一行。图像是60·80的,则每一行有60个数据,对于第一行AB就是将AB等分成60份,对应每一列的数据。CD与中间的各行是同理的。这里需要提前知道的数据是摄像头采集角度图中是2倍的阿尔法。

当然要生成完整的图像,还需要一张赛道的地图。我自己做了一张如下的。
在这里插入图片描述
图中U形弯的下方是起点,有两个向赛道内的突起。
下面是我写好程序后在赛道起点摄像头采集的图像。
在这里插入图片描述在这里插入图片描述
右边是在起点处的图像,左边是在起点前第一个入弯后的图像,此时车身已经转过了90°可以看到前面弯道。
第一次发稿,描述不清,多多包涵。大家需要程序的化可话以联系我,因为代码还有很多需要完善的地方。后续有时间会出代码篇的。

发布了1 篇原创文章 · 获赞 3 · 访问量 413

猜你喜欢

转载自blog.csdn.net/weixin_42208428/article/details/104315456
今日推荐