概述
小车外形:
功能简介
利用摄像头识别前车尾部的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.控制电源和电机舵机电源分别加开关,下程序的时候先关闭电机和舵机的电源。因为此时控制器没有给信号,电机和舵机可能会不受控制的运动。
相关文章