
科学研究与应用
Journal of Scientific Research and Applications
- 主办单位:未來中國國際出版集團有限公司
- ISSN:3079-7071(P)
- ISSN:3080-0757(O)
- 期刊分类:科学技术
- 出版周期:月刊
- 投稿量:5
- 浏览量:648
相关文章
暂无数据
基于K210的自动驾驶控制系统设计
Design of Automatic Driving Control System Based on K210
引言
全球范围内,交通事故造成的人员伤亡和财产损失屡见不鲜,是一个长期困扰人们的重大社会问题。自动驾驶技术的出现为解决这一问题提供了新的可能性,通过结合传感器、人工智能和实时数据处理等先进技术,自动驾驶小车能够实现更高的交通安全水平,减少由人为操作失误引发的交通事故。
本研究以STM32单片机为主控制器,集成K210视觉模块,设计了一套适用于微型自动驾驶小车的低成本控制系统,总体流程如图1。项目重点解决两个问题:一是利用K210完成交通信号标识符的实时检测与定位,二是通过STM32实现检测结果与车辆运动的协同控制,最终达到自动驾驶的目的。
1 STM32单片机部分
单片机构造如图2所示,主要应用了主控制逻辑模块、串口通信模块、电机驱动模块。三个模块通过“串口接收→指令解析→电机控制”的链路紧密协作:串口通信模块负责外部指令的实时输入,主控制逻辑模块通过多任务机制实现指令到动作的决策,电机驱动模块将决策转化为PWM(脉冲宽度调制)信号驱动物理运动。这种分层设计既保证了各模块的独立性(便于维护与扩展),又通过明确的接口实现了高效协同,为小车控制系统提供了稳定、实时、可靠的核心功能支持。
2 模块设计
2.1 主控制逻辑模块
主控制逻辑模块是整个小车控制系统的核心决策层,程序如图3所示,它可以实时操作系统实现任务的创建、调度与协同,负责将串口接收的外部指令转化为电机的具体动作。其核心功能是通过多任务机制保证系统的实时性,同时完成“指令解析—动作映射—电机控制”的闭环流程。
该模块首先通过调用Motor_Init()和uart2_init()完成电机与串口的硬件配置,建立“输入—输出”链路的物理基础;其次通过while(1)循环持续检测USART2_RX_STA(串口接收状态标志),当最高位0x8000置位时,表明有新指令到达;再次采用switch-case结构将单字节指令(如0x41对应前进)映射为具体的电机动作,实现指令与行为的直接绑定;然后通过vTaskDelay函数实现动作的时间控制(如前进2.3秒),该函数使任务进入阻塞态,释放CPU资源给其他任务,兼顾实时性与资源效率;最后指令执行完毕后,通过USART2_RX_STA=0清除接收标志,避免重复处理同一指令,确保系统稳定性。
2.2 串口通信模块
串口通信模块是系统与外部设备的接口,负责实现“外部指令输入—数据缓冲—状态通知”的功能。该模块采用中断驱动方式接收数据,确保指令的实时性与可靠性,为上层控制逻辑提供稳定的输入支持。
首先模块通过usart2_init函数完成USART的硬件配置,包括时钟使能、引脚复用、通信参数设置与中断配置。通过GPIO将PD5和PD6引脚复用为USART2的TX和RX功能,实现硬件层面的通信链路;GPIO参数采用推挽输出(GPIO_OType_PP)增强TX引脚的驱动能力,上拉电阻(GPIO_PuPd_UP)确保空闲时引脚为高电平,符合通信协议;中断优先级使得USART2的抢占优先级设为1,高于USART1(优先级3),确保电机控制指令的接收中断优先响应;最后通信参数配置为8位数据位、1位停止位、无校验位,波特率115200,与外部设备保持一致,避免数据传输错误。
然后模块采用中断驱动方式接收数据,通过USART2_IRQHandler中断服务函数实现实时数据接收与状态更新。关键代码如图4。
该机制的核心特点包括:
中断触发:当USART2接收寄存器(DR)非空时(USART_IT_RXNE置位),触发中断服务函数,确保数据到达后立即被处理。
缓冲区设计:USART2_RX_BUF作为数据暂存区,容量50字节,可满足多字节指令的存储需求;USART2_RX_STA为16位状态变量,低14位记录接收长度(0x3FFF掩码),高1位(0x8000)作为接收完成标志,实现“长度计数+状态标记”的双重功能。
溢出保护:当接收长度超过缓冲区容量(50字节)时,通过USART2_RX_STA =0重置状态,避免缓冲区越界导致的数据错乱。
异步通知:通过USART2_RX_STA=0x8000置位完成标志,为主控制逻辑的serial_task提供明确的“数据就绪”信号,实现无轮询的数据交互。
最后,模块通过全局变量与主控制逻辑交互,形成“中断接收—标志通知—主任务处理”的异步协作模式。这种设计避免了主任务对串口的轮询,降低了CPU占用率,同时通过中断的高优先级保证了指令接收的实时性。
2.3 电机驱动模块
电机驱动模块是系统的执行层,负责将主控制逻辑的速度指令转化为电机的物理动作。程序如图5所示,该模块基于STM32的定时器外设生成PWM信号,通过控制PWM的占空比调节电机转速,通过双PWM通道的差值控制电机转向,最终实现小车的运动控制。
该函数首先通过条件判断将输入速度限制在-100~100,避免因指令异常导致电机过载,这个是软件层面的安全保护;其次用速度值乘以168(16800/100)得到PWM偏差值(-16800~16800),实现速度与PWM占空比的线性映射。
例如,速度-20对应偏差-3360,对应PWM占空比的20%变化;然后每个电机通过两个PWM通道(如PWMA1和PWMA2)的差值实现正反转。当motor1<0时,PWMA1随负偏差减小,PWMA2固定为中点,形成PWMA1
模块通过Motor_Init(初始化)和Motor_SetSpeed(速度控制)两个接口函数与主控制逻辑交互。主控制逻辑只需传入速度指令(-100~100),即可实现电机的正反转与转速调节,体现了“硬件抽象”的设计思想,降低了上层逻辑的复杂度。
3 K210视觉模块程序部分
机器视觉模块采用K210视觉芯片,内部程序编译软件采用了CanMV IDE集成开发环境,主要用于识别交通标识符,完成直行、转弯和停止的相应任务,这些执行行动部分功能主要采用视觉传感器获取信号并传递信息给STM32单片机,进行综合判断并执行行动。
K210依靠OV2640摄像头以每秒25帧的速率来采集图像,识别过程如图6所示,图像处理流程共分为三个步骤:
一是颜色特征提取。采用LAB色彩空间实施信号标识符识别,与RGB空间相比,可更有效地区分红绿色,可以通过LCD显示屏实时显示视觉识别结果和系统运行状态。
二是形态学处理。对二值化图像开展开运算来去除小噪声点,利用闭运算填充信号标识符里的空洞,把处理核的大小设成3×3像素,此参数可有效去掉直径小于10像素的干扰区域。
三是目标定位算法。遍历图像中所有契合颜色阈值的连通区域,求取每个区域的质心坐标以及面积,通过进行面积筛选(设定阈值在500-5000像素)排除远处或过小的干扰目标,最后得出信号标识符的中心坐标与大小。
在小车进行路标识别任务中,系统先要运用实时目标检测技术对图像进行目标检测,将输入图像像素后,模型直接输出边界框坐标(中心点x/y、宽高w/h)和类别概率,无需中间候选框生成步骤,以便系统快速识别处理。接着系统将采用锚点框机制,为系统提供先验的边界框形状,以便帮助网络能够更加准确的预测物体的位置,防止因位置错误导致识别到其他图像。
摄像头识别到路标时将路标用矩形框框出(即锚点框机制)并解读路标信息,获取到任务后将需要用到的字母标识储存入变量,作为后续执行任务的实参。完成该过程后与STM32通讯,发送获取成功执行下一步的指令。
在这过程中字母标识的设定是执行任务的关键,其中字母标识包括了前进、右转、左转、停止,程序如图7所示,用B代表前进,用D代表右转,用C代表左转,用H代表停止。本视觉主要识别前进、右转、左转、停止指令。
图像防抖是一个系统性概念,贯穿了从图像采集到后期处理的整个流程。系统会维护一个小型的识别结果缓冲区(比如存储最近5-10帧的识别结果)。当K210处理每一帧图像并得到一个识别结果(如“前进B”“停止H”)后,它不会立即发送给STM32,它会检查缓冲区,只有当同一个结果(如“停止H”)连续出现多次,系统才判定这是一个“有效”的指令。如果中间出现了不同的结果或识别失败,则缓冲区被清空或重置,重新开始计数。
其核心目的是排除噪声等环境干扰,消除或最大程度减轻因设备振动、物体运动等因素导致的图像失真,包括运动模糊、画面抖动等问题,从而为后续的图像分析、识别、测量等应用提供高质量的图像数据。在实验中难免带来晃动导致误差,引发芯片识别错误传达错误指令,导致识别错误的问题。为减少识别错误,本实验系统设计了防抖决策算法,以减少识别错误,导致实验误差。具体代码如图7所示。
4 结语
本研究开发了一种基于K210视觉模块的基本路标图像识别。该系统通过由K210组成的神经网络摄像头获取视觉图像,利用K210的运行卷积神经网络算法,结合阈值判断和分类训练实现路标图像识别,并通过LCD屏幕分别显示路标图像全貌和识别结果。通过重复测试并对比路标图像识别结果,分析了路标图像复杂度、动态特性及识别环境对识别正确率和处理速度的影响。
为验证系统性能,搭建了实物测试平台并进行了一系列实验。测试结果表明,该系统运行稳定,能够满足实时视觉处理需求。其中,防抖决策模块的表现尤为关键,该算法通过设置连续多次识别确认机制,成功过滤了超过90%的瞬时误识别与抖动。在实际应用中,系统经由USART串口输出的控制指令如前进、转向、停止均表现出高度的可靠性。实验成果充分证明了,本设计所实现的“感知—决策—执行”闭环系统,在资源受限的嵌入式边缘计算场景下,具备良好的实用价值与推广潜力。
参考文献:
- [1] 张勇, 唐颖军, 陈爱国, 等. STM32单片机原理及应用——基于STM32F103C8与STM32CubeMX[M]. 北京: 清华大学出版社, 2024.
- [2] 张淑清, 胡永涛, 张立国. 嵌入式单片机STM32原理及应用[M]. 北京: 机械工业出版社, 2019.
- [3] 王建, 徐国艳, 陈竞凯, 等. 自动驾驶技术概论[M]. 北京: 清华大学出版社, 2019.
- [4] 杨世春, 曹耀光, 陶吉, 等. 自动驾驶汽车决策与控制[M]. 北京: 清华大学出版社, 2020.
