zoukankan      html  css  js  c++  java
  • 项目经历

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

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

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

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

    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为负数,其导数为负数,所以就往反方向减小

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

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

  • 相关阅读:
    mongoDB 索引
    mongoDB _id:ObjectId("xxxx")详解
    mongoDB: cursor not found on server
    mongoDB group命令详解
    Python 中,matplotlib绘图无法显示中文的问题
    python常用
    deepin下安装python的Tkinter库
    wireshark抓包常见提示含义解析
    TimeUnit
    Java回调机制解析
  • 原文地址:https://www.cnblogs.com/Sunqingyi/p/12862765.html
Copyright © 2011-2022 走看看