
概述
小车外形:

功能简介
利用摄像头识别前车尾部的AprilTag,得到前车位置,传回stm32主控板处理,使两车在行驶时保持恒定距离,实现自动跟车。
openMV4摄像头
1.1 Apriltag识别与串口传输
AprilTag是一个视觉基准库,在AR,机器人,相机校准领域广泛使用。通过特定的标志(与二维码相似,但是降低了复杂度以满足实时性要求),可以快速地检测标志,并计算相对位置。
Apriltag示例:

通过识别Apriltag,可以得到x,y,z三个方向的距离以及偏移角度。这里只需要三维的距离即可,通过串口传回stm32.


STM32主控板(型号为F407)
2.1 时钟与中断配置
附上stm32时钟示意图:

定时器示意图:

定时器分配:

所有时钟初始化的函数:(每个函数的详细内容在后面)

2.2 串口收发与数据处理
串口中断:USART1,USART2
串口初始化函数(以USART1为例):


串口中断处理函数:


字符串接收与处理(从openMV接收到的数据):



字符串转化为两位小数浮点数(用于后续PID控制):


2.3 LCD显示模块
LCD模块用于调试时观察数据,调试完成可以删去,因为显示屏很耗时,使处理速度变慢
驱动函数总览:

TFT屏幕初始化:

字符串显示函数;



2.4 电机、舵机与编码器
定时中断:TIM2,用于修改电机和舵机的PWM占空比
初始化函数:


TIM2中断处理函数:

PWM输出:TIM3(舵机),TIM8(电机)
初始化函数(以TIM8为例):



编码器初始化函数:


编码器返回速度值:


定时从编码器取数,注意,时间不一样,取回的数值也不一样,取决于实际速度以及编码器线数。这里50ms取一次:

2.5 PID控制
PID库函数:


主函数中的PID调节:

定时器TIM2中断里改变占空比:

电源与电机驱动
3.1 L298N电机驱动板
电源与电机驱动

因为后面两路电机要求同速,故把AB两通道用线短接,用一路PWM控制两路电机。
下面是使用说明:

具体控制代码见上面TIM2中断处理函数中,利用两路定时器轮流输出PWM(另一路为零),即可控制电机正反转。
3.2 LM2596降压模块

手册中的典型连接:

原理图如下:

3.3 电源部分注意事项
1.电池用的是12v航模锂电池,为了防止过放导致电池损坏,必须要在电池输入端加一个电压表模块,如下图:

2.控制部分电源和电机舵机电源分开,因为电机舵机启动时会过大电流,导致电压不稳定,影响芯片供电。这里LM2596给电机供电,一个LM2596给舵机供电,另一个LM2596给单片机和openMV供电。
3.控制电源和电机舵机电源分别加开关,下程序的时候先关闭电机和舵机的电源。因为此时控制器没有给信号,电机和舵机可能会不受控制的运动。