# smart car
**Repository Path**: likeworld/smart-car
## Basic Information
- **Project Name**: smart car
- **Description**: 摄像头直立智能小车(智能车竞赛),使用摄像头识别道路寻迹和使用加速度计和陀螺仪时小车保持平衡的两轮平衡小车。
- **Primary Language**: C
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 10
- **Forks**: 0
- **Created**: 2018-07-19
- **Last Updated**: 2025-02-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# smart car
#### Description
摄像头直立智能小车(智能车竞赛),使用摄像头识别道路寻迹和使用加速度计和陀螺仪时小车保持平衡的两轮平衡小车。
#### Software Architecture
软件IDE:IAR
主控单片机:MK60
硬件制作software:Altium designer
#### Instructions
软件代码只要分为三个部分:直立环(保持车身直立)、速度环(控制速度)、转向环(控制小车根据路径转向)。
三个环的解释参照下面表述:
>直立环(PD控制):直立环言简意赅的说就是让直立车站起来,首先我想说两个概念:机械零位和姿态传感器角度,把这两个搞清楚你就可以搞清楚怎么站起来。机械零位:就是小车在不借助外力和系统内力的前提下,自己能够站起来,这个时候小车姿态相对于空间的位置状态就是它的机械零位;姿态传感器:是陀螺仪和加速度计集合的模块,陀螺仪可以读出角度,加速度计可以得出角速度,我们一般将两个值合起来滤波之后得出角度值,为什么呢?因为:加速度计对四轴或小车的加速度比较敏感,取瞬时值计算倾角误差比较大;而陀螺仪积分得到的角度不受小车加速度的影响,但是随着时间的增加积分漂移和温度漂移带来的误差比较大。所以这两个传感器正好可以弥补相互的缺点。依据机械零点,小车已经可以站立但这是不够的,因为外力会破坏这个平衡状态,这时你就需要用姿态传感器读出小车的角度,然后利用小车的向前或者向后加速来让小车回复到原先角度从而恢复平衡。
>调试方法:首先用上位机看滤波的波形的跟随性以及准确性,很多新手拿到传承的代码就开始调参数,结果怎么也站不起来,波形不对当然站不起来,波形调对后,就可以开始调PD值了,先不用D,调P让小车能够站起来但是小车会来回运动保持平衡,然后开始慢慢加D,D的效果会使直立更硬。
>速度环(PI控制):速度环原理方面,主要是PI控制,I的作用是用来消除稳态误差,但是I大了引起震荡,小了加速反应慢,而且用 I 就容易引起超调,所以必须要用积分分离每二十次清零一次I。
>调试方法:将速度设置为零,然后调PD值,直到直立车可以到原地站住并且可以在外力干扰的情况下能在较短时间站住。(具体调试方法可以搜索卓晴老师的直立车教学视频)
>转向环(PD控制和模糊PD控制):转向环是车的关键所在,如果一个弯道,车用1m/s的速度能过去,用3m/s的速度能过去,说明你的车调的差不多了。摄像头转向是用的图像循迹(具体图像处理算法我会添加在附件中),大体思路是先从中间往两边搜线,在搜到线之后,沿着边界搜线,另外赛道的特殊元素十字和圆环必须特殊处理,我们采用处理十字的方式是:使用全白行识别,用误差等于全白列所在列数处理全白列数补线处理,处理圆环的方式是:用全白列识别,用直接给固定误差处理。调试方法:转向依然是采用的PD控制,比例控制参数可以使得车模方向恢复正确位置。当该参数逐步增加时,车模方向回复速度逐步加快。当比例参数增加到一定数值之后,车模的方向回复由于过快,会出现方向过冲现象。此时通过增加微分控制参数可以抑制这种方向过冲的现象。通过几次组合测试,可以选择一组合适的比例控制和微分控制参数使得车模方向控制即迅速又不会出现过冲现象。
#### Contribution
1. 实现了摄像头采集图像并实现了对图像的处理,可以识别出小车运行道路以及圆环、十字等特殊道路。
2. 采用了PI、PD控制和模糊PD控制等方法、根据小车运行效果,我们可以得出这些控制显著提升了控制效果。