项目经历

_我参加的是恩智浦智能车竞赛。它主要是制作一辆以摄像头为传感器的自动寻迹小车。

我在这个项目中主要负责电路的设计以及图像处理程序的编写。

整体上划分为机械与硬件,嵌入式平台设计,转向与转速控制,图像处理,测试与验证

整个系统采用了分层的设计,分为

1.机械与硬件层,主要是电路板以及车模的机械结构调整

2.嵌入式平台层,实现任务的调度,嵌入式软件系统的初始化,硬件驱动

3.控制与图像层,使用PID算法进行转速转向控制,对图像进行处理为转向服务,主要实现图像的处理,寻找中线,以及与Matlab2011a和VS2010配合实现对算法的快速仿真验证,大大提高开发效率

     分层的目的是为了简化系统的复杂度,做到局部可控,便于后期的维护           

                  

电路设计方面

我们分为了两个部分,

一个是控制板,他放置摄像头,并引出线来连接各个硬件,

二是驱动板,用于放置电机驱动芯片,编码器接口等。

功率越大的器件,越靠近电源供电的话,那对整个系统工作的影响就越小。

大功率器件的电源和地最好贴着走,不要包含小功率的器件。

基本公式

U=IR

P=U^2/R=UI

电阻

电阻虽然标识是100欧,但是实际它是有一定精度的

它的最大电压由功率和阻值来决定

二极管

U<0,也就是对二极管加反向电压,电流为0,相当于开路

U>0,会有一定的压降比如0.7V左右,相当于短路

串并联

串联各元器件处电流处处相等,并联电压相等

实际中,导线也是有阻抗的

功率越大的器件,越靠近电源供电的话,那对整个系统工作的影响就越小。

PWM是一个交变电流,根据电磁感应定律,会产生交变磁场,所以大功率器件的电源线要贴着布线。

嵌入式平台的搭建

在任务调动上采用的是while循环中执行图像处理和舵机转角的控制,在定时器中断中进行电机的控制。

驱动层上的设计.h负责接口,.c负责实现

图像处理的验证

如果等所有代码都完成了,再进行验证测试的话,如果一旦出现问题,再返工重新设计,尽可能的将验证测试提前,越早期发现错误,那风险也就越低。但是嵌入式系统软件和一般软件系统不太一样,因为要与实物配合才能进行测试验证。我们将代码中比较重要的控制算法分出来,不等到硬件全部制作完再去验证,而是在matlab中进行测试验证

使用matlab的交叉编译来将编写的C语言图像处理算法在matlab中进行测试,之后再烧到单片机中进行真实赛道的测试

mex交叉编译的原理就是将matlab中输入的参数传递给我们编写的C语言代码,之后运行C语言代码后,再将结果返回到matlab中

算法思路是

  1. 判断有没有出界,如果出界,则不做处理,保持原来的方向偏差不变,否则开始寻找新的中线
  2. 逐行扫,先寻找中间位置,然后向左右寻找左右边界
  3. 根据左右边界计算左右边界的斜率变化,然后递推得到最终的左右边界值
  4. 根据左右边界,计算中线
  5. 将中线做均值滤波
  6. 滤波后的中线,映射到实际的物理坐标上(单位为cm)
  7. 根据速度,计算三个中线偏差值

三个中线偏差值为远偏差,中偏差以及近偏差

远偏差用于识别入弯出弯,并进行减速控制

中偏差用于转向控制。

速度来调整远偏差与中偏差的边界

PID算法

分析建模

系统的输入对象是PWM,输出是车速

以电机转速为例,当前值是由编码器测出的,目标值是我们设定的,这样就会的到一个偏差e

假设速度是从0开始到目标值

设一个周期即单位时间速度的变化为x,这一周期的偏差为e

x=u-c

u=kp*e

可以看出随着时间流逝,e会逐渐的小,变化率也会逐渐减小,直至为0

(x+c)/kp=e,可以看出,当x=0,也就是速度不变的时候,e始终不为0,也就是始终都不能达到目标值

这个误差就叫做静差

所以要把这个静差补上,就需要使用积分环节,它相当于速度比预定的低就加速,速度比预定的高就减速

当只有比例时是不会发生速度超过目标值的,但是加上比例环节后就有可能超过目标值,超出的部分叫做超调。

即过大的积分环节比例系数会使系统有比较大的超调,并产生振荡,使稳定性变坏

增大积分时间I有利于减小超调,减小振荡,使系统的稳定性增加,但是系统静差消除时间变长。

增大比例系数一般会加快系统响应

增加微分环节,因为当超出目标值时,e为负数,其导数为负数,所以就往反方向减小

微分环节主要作用是在响应过程中抑制偏差向任何方向的变化”
“微分常数不能过大,否则会使响应过程提前制动,延长调节时间”

测试使用的是串口打印调试

原文地址:https://www.cnblogs.com/Sunqingyi/p/12862765.html