国际期刊投稿平台
登录 | 注册
当前位置: 首页 > 科学研究与应用 > 基于K210的自动驾驶控制系统设计
科学研究与应用

科学研究与应用

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

发布时间:2025-11-05
作者: 王煜磊,陈延吉,周娴 :南京师范大学中北学院 江苏丹阳;
摘要: 本文研究整个系统由STM32f407单片机、12V18650锂电池、AT8236电机驱动模块、直流电机、MPU6050陀螺仪、K210视觉模块组成。旨在利用K210完成交通信号标识符的实时检测,通过STM32单片机实现检测结果与车辆运动的协同控制。相比传统使用工业相机的方案,本设计采用K210的KPU神经网络加速器进行本地化图像处理,在保证实时性的同时降低了系统功耗和硬件成本。
Abstract: The entire system of this study consists of STM32F407 microcontroller, 12V18650 lithium battery, AT8236 motor drive module, DC motor, MPU6050 gyroscope, and K210 vision module. Intended to utilize K210 for real-time detection of traffic signal identifiers, and achieve coordinated control between detection results and vehicle motion through STM32 microcontroller. Compared to traditional solutions that use industrial cameras, this design adopts the K210 KPU neural network accelerator for localized image processing, which reduces system power consumption and hardware costs while ensuring real-time performance.
关键词: STM32单片机;K210视觉模块;自动驾驶
Keywords: STM32 microcontroller; K210 visual module; autonomous driving

引言

全球范围内,交通事故造成的人员伤亡和财产损失屡见不鲜,是一个长期困扰人们的重大社会问题。自动驾驶技术的出现为解决这一问题提供了新的可能性,通过结合传感器、人工智能和实时数据处理等先进技术,自动驾驶小车能够实现更高的交通安全水平,减少由人为操作失误引发的交通事故。

本研究以STM32单片机为主控制器,集成K210视觉模块,设计了一套适用于微型自动驾驶小车的低成本控制系统,总体流程如图1。项目重点解决两个问题:一是利用K210完成交通信号标识符的实时检测与定位,二是通过STM32实现检测结果与车辆运动的协同控制,最终达到自动驾驶的目的。

图1 总体流程图

1 STM32单片机部分

单片机构造如图2所示,主要应用了主控制逻辑模块、串口通信模块、电机驱动模块。三个模块通过“串口接收→指令解析→电机控制”的链路紧密协作:串口通信模块负责外部指令的实时输入,主控制逻辑模块通过多任务机制实现指令到动作的决策,电机驱动模块将决策转化为PWM(脉冲宽度调制)信号驱动物理运动。这种分层设计既保证了各模块的独立性(便于维护与扩展),又通过明确的接口实现了高效协同,为小车控制系统提供了稳定、实时、可靠的核心功能支持。

IMG_256
图2 单片机构造

2 模块设计

2.1 主控制逻辑模块

主控制逻辑模块是整个小车控制系统的核心决策层,程序如图3所示,它可以实时操作系统实现任务的创建、调度与协同,负责将串口接收的外部指令转化为电机的具体动作。其核心功能是通过多任务机制保证系统的实时性,同时完成“指令解析—动作映射—电机控制”的闭环流程。

图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,与外部设备保持一致,避免数据传输错误。

屏幕截图 2025-09-28 211103
图4 串口通信模块代码

然后模块采用中断驱动方式接收数据,通过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占空比的线性映射。

图片5
图5 电机驱动模块程序

例如,速度-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像素)排除远处或过小的干扰目标,最后得出信号标识符的中心坐标与大小。

图6 K210识别过程流程图

在小车进行路标识别任务中,系统先要运用实时目标检测技术对图像进行目标检测,将输入图像像素后,模型直接输出边界框坐标(中心点x/y、宽高w/h)和类别概率,无需中间候选框生成步骤,以便系统快速识别处理。接着系统将采用锚点框机制,为系统提供先验的边界框形状,以便帮助网络能够更加准确的预测物体的位置,防止因位置错误导致识别到其他图像。

摄像头识别到路标时将路标用矩形框框出(即锚点框机制)并解读路标信息,获取到任务后将需要用到的字母标识储存入变量,作为后续执行任务的实参。完成该过程后与STM32通讯,发送获取成功执行下一步的指令。

在这过程中字母标识的设定是执行任务的关键,其中字母标识包括了前进、右转、左转、停止,程序如图7所示,用B代表前进,用D代表右转,用C代表左转,用H代表停止。本视觉主要识别前进、右转、左转、停止指令。

图像防抖是一个系统性概念,贯穿了从图像采集到后期处理的整个流程。系统会维护一个小型的识别结果缓冲区(比如存储最近5-10帧的识别结果)。当K210处理每一帧图像并得到一个识别结果(如“前进B”“停止H”)后,它不会立即发送给STM32,它会检查缓冲区,只有当同一个结果(如“停止H”)连续出现多次,系统才判定这是一个“有效”的指令。如果中间出现了不同的结果或识别失败,则缓冲区被清空或重置,重新开始计数。

其核心目的是排除噪声等环境干扰,消除或最大程度减轻因设备振动、物体运动等因素导致的图像失真,包括运动模糊、画面抖动等问题,从而为后续的图像分析、识别、测量等应用提供高质量的图像数据。在实验中难免带来晃动导致误差,引发芯片识别错误传达错误指令,导致识别错误的问题。为减少识别错误,本实验系统设计了防抖决策算法,以减少识别错误,导致实验误差。具体代码如图7所示。

IMG_256
图7 K210视觉模块代码

4 结语

本研究开发了一种基于K210视觉模块的基本路标图像识别。该系统通过由K210组成的神经网络摄像头获取视觉图像,利用K210的运行卷积神经网络算法,结合阈值判断和分类训练实现路标图像识别,并通过LCD屏幕分别显示路标图像全貌和识别结果。通过重复测试并对比路标图像识别结果,分析了路标图像复杂度、动态特性及识别环境对识别正确率和处理速度的影响。

为验证系统性能,搭建了实物测试平台并进行了一系列实验。测试结果表明,该系统运行稳定,能够满足实时视觉处理需求。其中,防抖决策模块的表现尤为关键,该算法通过设置连续多次识别确认机制,成功过滤了超过90%的瞬时误识别与抖动。在实际应用中,系统经由USART串口输出的控制指令如前进、转向、停止均表现出高度的可靠性。实验成果充分证明了,本设计所实现的“感知—决策—执行”闭环系统,在资源受限的嵌入式边缘计算场景下,具备良好的实用价值与推广潜力。

参考文献:

  1. [1] 张勇, 唐颖军, 陈爱国, 等. STM32单片机原理及应用——基于STM32F103C8与STM32CubeMX[M]. 北京: 清华大学出版社, 2024.
  2. [2] 张淑清, 胡永涛, 张立国. 嵌入式单片机STM32原理及应用[M]. 北京: 机械工业出版社, 2019.
  3. [3] 王建, 徐国艳, 陈竞凯, 等. 自动驾驶技术概论[M]. 北京: 清华大学出版社, 2019.
  4. [4] 杨世春, 曹耀光, 陶吉, 等. 自动驾驶汽车决策与控制[M]. 北京: 清华大学出版社, 2020.
联系我们
人工客服,稿件咨询
投稿
扫码添加微信
客服
置顶