十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

STM32+OpenMV视觉巡线小车:从摄像头到电机的完整工程链路

STM32+OpenMV视觉巡线小车:从摄像头到电机的完整工程链路 简介这是一份面向STM32与OpenMV学习者的视觉巡线小车完整工程适合电子竞赛备赛、课程设计及机器人爱好者二次开发。工程覆盖底层驱动到上层算法全链路基于TB6612的直流减速电机控制、编码器测速STM32定时器PWM、正交编码、中断与串口通信OpenMV端图像二值化和线性回归处理PID速度环、转向环及串级控制算法并带串口接收数据解析。资源共1017个文件以C源文件563个和头文件247个为主同时包含OpenMV的Python脚本、CubeMX配置.ioc、Keil工程及相关编译产物压缩包大小30.71MB目录结构清晰便于按模块学习和二次开发。已有2276人学习使用可在此基础上快速搭建视觉巡线小车深入理解PID与图像处理联合调试。 做视觉巡线小车很多人卡壳的点其实不是某一个算法而是整套工程从摄像头到电机之间能不能串起来。最近我又把一套基于STM32OpenMV的视觉巡线完整工程从头到尾整理了一遍从硬件接线到OpenMV端的寻线逻辑再到STM32端的定时器PWM、差速转向和增量式PID一次性打通了整条链路。这套方案不是随手写的demo而是实实在在跑过赛道、可以连续跑十几圈不脱线的工程。下面会把选型逻辑、通讯协议、控制代码这些真正决定成败的细节讲清楚适合准备课程设计、竞赛小车或者刚开始接触视觉控制方向的同学直接参考。1. 整体思路与选型逻辑1.1 为什么采用STM32OpenMV主从架构视觉巡线小车本质上是一个闭环控制问题摄像头获取赛道信息计算出小车相对赛道中心线的偏移量然后驱动电机完成转向和前进。市面上常见方案有好几种纯OpenMV、纯K210、STM32OpenMV、STM32灰度传感器。我最后选了STM32OpenMV是因为它把“图像处理”和“实时控制”两个环节彻底分开了。OpenMV的强项是图像预处理和色块识别用MicroPython写一个找线算法几十行就能搞定。但它本质还是一个微控制器如果把图像处理和PWM输出都压在它身上场景复杂一点就会出现掉帧或者电机响应延迟。STM32虽然在图像处理上帮不上什么忙但定时器PWM、外部中断、串口接收这一套外设非常成熟硬件实时性远好于在OpenMV里用线程跑控制的方式。所以主从分工最清晰OpenMV只算偏差把偏差通过串口发给STM32STM32只做控制收到偏差后计算PID输出调节两轮差速。有人会问K210算力更强为什么不用说实话K210跑视觉模型确实比OpenMV有优势但它的开发环境、烧录工具、社区资料相对分散做一个中等复杂度的巡线项目有点“杀鸡用牛刀”。OpenMV的IDE自带阈值编辑器和帧缓冲区调试改颜色阈值所见即所得新手入门非常友好。我后面会详细讲这个调试流程。1.2 硬件清单与接线避坑整套硬件我列一个清单照着买基本不会踩坑器件型号参考作用主控STM32F103C8T6最小系统板接收偏差、计算PID、输出PWM视觉模块OpenMV4 H7 Plus图像采集、巡线、发送偏差电机驱动TB6612FNG双路H桥驱动直流电机电机带编码器直流减速电机1:30驱动车轮可扩展测速闭环电池2节186507.4V或3S锂电供电降压模块LM2596或AMS1117方案给主控和视觉模块供电车架亚克力/3D打印两轮差速底盘承载机构关键接线关系直接列出来OpenMV P4 (TX) → STM32 PA10 (RX)OpenMV P5 (RX) → STM32 PA9 (TX)两边GND必须共地。STM32 PA6、PA7 → TB6612的PWMA、PWMB这两个引脚复用TIM3_CH1、TIM3_CH2。TB6612的AIN1/AIN2、BIN1/BIN2接到STM32普通GPIO我习惯用PB12/PB13这几个不冲突的脚控制正反转。电机电源从电池直接取逻辑电路用降压模块分开供电但所有GND统一接在一起。这里有两个高频坑。第一个是OpenMV的串口引脚在MicroPython里对应UART(3)物理引脚就是P4、P5很多人把USB调试口当成串口用结果OpenMV IDE里print正常STM32就是收不到数据。第二个是关于OpenMV上电通过USB连接电脑时由USB供电脱机跑的时候需要外部给VIN供电范围要看模块丝印一般是5V到12V电流尽量留足余量至少1A以上别试图用STM32板子上的3.3V去给它供电板载稳压芯片大概率带不动。1.3 标准库工程搭建思路工程目录我按标准库的习惯分成几块USER: main.c, stm32f10x_it.c SYSTEM: delay.c, sys.c, usart.c HARDWARE: motor.c, pwm.c, pid.c CORE: core_cm3.c, startup_stm32f10x_hd.s FWLib: stm32f10x_gpio.c, stm32f10x_tim.c, stm32f10x_usart.c如果只做这个小车标准库完全够用资料多寄存器映射也更直观。已经有HAL基础的同学直接用HAL也没问题核心逻辑在两种库上是一样的。Keil5安装时要注意如果电脑里之前装了C51版的Keil直接装MDK就行IDE会兼容但不要把两个版本装到同一个目录。新建工程选启动文件时STM32F103C8T6属于中等容量对应startup_stm32f10x_md.s别选到HD的大容量启动文件否则下载后容易跑飞。下载调试用ST-Link V2配STM32 ST-LINK Utility或者直接在MDK里设置好就能烧录。2. OpenMV端巡线算法与串口通讯2.1 阈值调整与画面预处理把OpenMV接上电脑打开IDE连接后先看到实时画面。把镜头朝下对着赛道然后打开Tools菜单里的Threshold Editor框选地上的黑线区域它会自动生成一组LAB阈值。LAB色彩空间比RGB更接近人对颜色的感知对光照变化更鲁棒所以这里一定用LAB阈值不要用RGB。拿到阈值后我习惯在初始化里强制关闭自动增益和自动白平衡。这两个默认值是打开的当小车从亮处进入暗处时画面亮度会自动变化同一个LAB阈值有时识别得到黑线、有时识别不到本文还有配套的精品资源点击获取
返回列表