基于stm32f407的跟随行驶系统项目报告(利用openmv+超声波模块)

news2024/9/16 23:13:34

2023年全国大学生电子设计竞赛(TI杯)

20240529

摘要

本项目的硬件结构:基于STM32F407芯片为主控芯片,由TB6612电机驱动,控制左右轮电机的转动控制小车提供前进前进的速度,通过控制两轮的差数达到稳定转向目的。由OPENMV视觉处理对路径的判断,达到小车能够在指定的路径行驶,通过给后车安装超声波测距,可以得到两车之间的实时距离从而做出相对的动作,达到两车之间的间距在20~30cm之间。通过无线透传通信模块,两车之间可以实时相互收发数据,达到两车之间相互通信的目的。通过3s航模电池,以及两个稳压来给整个跟随小车提供稳定的电源模块,并由OLED和一个蜂鸣器,三个led小灯来完成整个项目所需的必要数据、声音、灯光信号的显示。

目  录

一、系统方案

1.方案比较与选择

2.方案描述

二、理论分析与计算

1.图像处理模块 6

2.路径规划模块 6

三、电路与程序设计

1.电路设计

2.程序设计

四、测试方案与测试结果

1. 使用仪器

2.测试项目

3.测试结果分析

五、参考文献

跟随行驶系统

一、系统方案

1.方案比较与选择

(1)视觉识别模块

方案一:利用五路红外寻迹模块识别跑道的指示线,达到小车能够在规定的黑色指示线上面行驶。此方案价格便宜,操作难度较小,在较低的速度下能够正常巡线,能够完成要求一、二但是提高速度进行要求三、发挥项一的时候不能够完成正常的巡线。

方案二:利用OPENMV进行视觉识别,通过串口给STM32实时提供指示线的坐标位置,并通过PID每10ms计算一次实际位置和想要到达的目标位置的差值,通过不断的实时‘调整’来达到小车能够按照项目要求在规定的指示线内正常行驶。操作难度较小,能够较好的达到预期设置的0~1m/s任意速度并在项目要求的指示线内行驶。

综合以上两种方案,方案二对于本项目而言更加适合。方案二能够准确无误的达到项目要求一、二、三、发挥一对视觉识别处理的一系列的要求,而方案一只能够达到部分项目要求。故选择方案二。

  1. 两车之间的通信模块

方案一:利用两个无线透传模块分别安装在本项目的前车和后车,通过STM32主控板的串口连接无限透传模块,使用无限透传的互传模式,达到两车之间的实时数据互传功能。此方案价格便宜,操作复杂程度较小,能够及时、准确的发送和接收数据。

方案二:利用两个蓝牙模块分别安装在本项目的前车和后车,通过STM32主控板的串口连接蓝牙模块,使用蓝牙的收发功能,达到两车之间的实时数据发送和接收项目需求。此方案价格便宜,操作复杂程度较小,并且能够准确的受到、发送数据。

综合以上两种方案,方案一对于本项目而言更加适合。方案一相对于方案二而言,方案一收发数据的时间、准确度、处理时间都更加短。故因此选择方案一。

  1. 距离探测模块

方案一:通过在后车安装超声波模块,实时探测两车之间的距离并将数据通过STM32主控板的串口传到STM32中央数据处理模块给出对应的行为指令,达到控制两车之间的距离保持在20~30cm之间。将超声波安装在小车的前方,所能探测的范围是角度为30°边长为1m的扇形范围,即使小车有一定的偏移也能及时探测出来。

方案二:通过使用视觉识别模块的OPENMV测距,进行对两车之间的实时距离探测,并通过STM32主控板的串口传输到STM32中央数据处理模块给出相对应的行为命令,达到控制两车之间的距离保持在20~30cm之间。视觉识别模块选用的OPENMV在小车高速行驶的过程中,所探测两车之间的距离会突变,不够稳定,也不够准确。

综合以上两种方案,方案一对于本项目而言更加适合。方案一在距离探测的准确度高于方案二,并且方案一在高速行驶的时候探测的稳定性高于方案二。故因此选择方案一。

  1. 电源及动力输出模块

方案一:通过两块3s的LIPO航模电池给跟随行驶系统的前车和后车提供电力。利用两块稳压模块分别将电压降低到5v和9v,5v给STM32主控板和OPENMV供电,9v给TB6612电机驱动供电,并通过TB6612直接控制前车的左右轮编码器电机,后车也如上配置。保证了整个系统电压的稳定,也给控制动力输出提供了一个良好的环境,也能准确的控制前后车的直线行驶、弯道行驶速度、稳定性。

方案二:通过4节5号可充电电池串联作为跟随行驶系统前车 提供12v的电压。利用两块稳压将电源提供的12v电压降低到5v和9v,9v给L298N供电,并提供L298N直接控制前车的左右轮的编码器电机。5v给STM32主控版和OPENMV供电,后车也如上配置。此方案价格便宜,5号电池提供的持续电压不稳定,整个电源及动力输出模块都不稳定。

综合上述两种方案,本系统需要足够稳定的电源以及动力输出模块来保证前后小车行驶的稳定性,因方案一比方案二的电源输出电源更加稳定,方案一的动力输出也比方案二的动力输出更加稳定。故选择方案一。

  1. 方案描述

根据以上方案比较、分析与综合考虑,本系统最终确定的系统框图如图1所示,实物平面图如图2所示。


图1系统框图

图2实物平面图

跟随行驶系统通过OPENMV画框识别指示线的X轴坐标通过串口发给STM32中央控制,STM32通过调用定时器每个10ms计算一次小车实际的位置与目标行驶位置的差值,并不断调整达到前后小车都可以在指示线规定的范围内行驶。通过超声波实时探测两车之间的距离数据并将其通过无线透传传递到两车的STM32中央控制模块,当两车距离小于20cm进行后车减速前车速度不改变,当两车的距离大于30cm后车加速,前车减速,后车加速。达到两车在行驶过程中间距为20~30cm保持运动平衡。

利用STM32每10ms计算输出的速度与编码器电机返还的实际速度的差值并进行差分和微分的调整,使STM32控制输出的速度与实际输出的速度相差范围在:-0.1~0.1m/s。通过OLED显示两车正在进行题目的第几项、编码器速度、完成要求所花的时间,通过蜂鸣器声响提示小车正在走内圈或者已经停止。

二、理论分析与计算

   1. 视觉识别模块

本模块的自动巡线以及速度控制为并行PID实时控制调制该控制的公式原理如下公式1、公式2、公式3。通过 PID 计算得出执行量,若小车出 现偏离,控制小车的两个电机差速旋转,并朝着偏差减小的 方向动作。在 PID 算法的控制下,小车可实现稳定循迹 。

公式1

公式2


公式3

其中

误差比例的系数,

为OPENMV传输过来的实际数据与目标值的差值,

为误差积分的系数,

为误差微分的系数,a(t)为编码器与输出速度的差值,公式1和公式2中的

均不相等,u为最终速度需要改变的数值。

2. 小车停车算法

在摄像头成像范围下方设置一个长1500 像素、宽 40 像 素的矩形检测区域,如图 3 所示。在此范围内寻找宽度与停 车标识相当的黑色色块,若在此区域内检测到黑色色块,则传送信号到单片机中,主控制器判定为到达停车点,立即将输出的目标速度设置为零,并且关闭转向环的干扰即可停在题目要求的范围内。

3 矩形检测区域

三、电路与程序设计

1. 电路设计

电池输出电源通过两个稳压分别将电压稳定在9v、5v 分别将9v电压共给TB6612,5v共给STM32F407和OPENMV。STM32F407通过OPENMV、编码器获得小车实时状况利用无线透传传递数据进而实时调控两车的姿态和对应位置距离,最终通过STM32控制蜂鸣器、LED小灯来提示是否已经完成项目要求。具体实物图如图4所示。


图4 两车实物图

2. 程序设计

2.1主程序设计

系统启动后,后车进入指令接收状态,前车进入工 作模式设置状态。等待任务设置后,2个车进入工作状态,具体流程如图5所示。


图5 主程序流程图

2.2要求三详细程序控制

进行要求三,前车启动的同时给后车发送启动信号,当检测到两车跑完第一圈,后车到达分叉路口进行超车动作,由后车领跑一圈后,前车到达分叉路口前车开始超车动作,完成超车后到达停车标志位前车停车的同时给后车发出停车信号,后车停车。详细流程图如图6所示。


图6 要求三超车部分程图

四、测试方案与测试结果

1. 使用仪器

秒表......1个

卷尺......1个

2.测试项目

详细测试方案请见附录。测试结果如表1

1  基本要求测试结果

测量项目

题目指标

完成情况

是否达标

测试方案简述与测量方案

1.1 20s两车车匀速跑完一圈

将领头小车放在路径的起始位置 A 点,跟随小车放在其后 20cm 处,设

定领头小车速度为 0.3m/s,沿着外圈路径行驶一圈停止

两车以0.3m/s跑完一圈,最终花费19.56s,在此过程中两车没有相撞,间距保持20cm

前车开始行驶按下秒表记录时间,两车停稳后按下秒表记录一圈花费的时间。

1.2 两车匀速跑完两圈

将领小车放在路径轨迹的起始位置 A 点,跟随小车放在路径上 E 点所在

边的直线区域,由测试专家指定的位置,设定领头小车速度为 0.5m/s,沿着外圈

路径行驶两圈停止

两车以0.5m/s跑完两圈,最终花费24.36s,在此过程中两车没有相撞,间距保持20cm

前车开始行驶按下秒表记录时间,两车停稳后按下秒表记录两圈花费的时间

1.3 相互超车

两车相互超车一次,最小速度不能低于0.3m/s,期间不能发生碰撞,间距为20cm

两车以0.5m/s跑完三圈,并且成功完成相互超车要求,在此过程中两车没有相撞,间距保持20cm

前车开始行驶按下秒表记录时间,两车停稳后按下秒表记录三圈花费的时间,判断最后的速度,已经互相超车是否成功完成。

2 发挥部分测试结果

测量项目

题目指标

完成情况

是否达标

测试方案简述与测量方案

2.1  1m/s跑完一圈按要求指定地方停车

1m/s跑完一圈按要求指定地方停车,停止5s最后在标记点停车,平均速度无差小于10%停车位置误差小于5

cm

以1m/s跑完一圈,并按要求指定地方停止5s,平均速度无差在5%,停车位置误差为3cm

前车开始行驶记录时间到达指定位置时间,测量最后停车位置的误差

3.测试结果分析

本作品完成了题目所有基础指标和发挥要求,符合题目所有指标,并且小车能够稳定在以0.5m/s的速度完成项目要求三两车互相超车。在此过程中速度能够稳定在误差5%。

本作品采用STM32F407作为主控芯片,控制集成了OPENMV视觉处理、OLED显示使用PID算法能够让小车直线行驶,通过OPENMV视觉处理操作能够让小车进行指定要求一、二、三、发挥一达到的效果远超项目要求。

五、参考文献

  1. 董锦衡,蔡欣怡,邓俊逸,朱建红,袁银龙 基于MSP430的智能小车跟随行驶系统[M] 物联网技术. 2095-6835(2024)04-0056-03

[2] 张晨亮,张亚周 基于机器视觉的小车跟随行驶系统设计[M] 物联网技术. 2095-1302(2024)03-0118-02

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2116416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive中的分区表与分桶表详解

目录 分区表和分桶表 分区表 分区表基本语法 1. 创建分区表 2. 分区表读写数据 1)写数据 (1)LOAD (2)INSERT 2)读数据 3. 分区表基本操作 1)查看所有分区信息 2)增加分区 …

数据库MySQL零基础-下【详细】

目录 六、事务/视图/触发器/存储过程 1、事务的理解 (1)事务的理解 (2)事务的特性 2、事务的应用 (1)事务的开启与提交 # 语法 # 示例 (2)开启autocommit(临时生…

MybatisPlus静态工具 通用枚举

静态工具 有的时候Service之间也会相互调用,为了避免出现循环依赖问题,MybatisPlus提供一个静态工具类:Db,其中的一些静态方法与IService中方法签名基本一致,就在方法例多给出一个参数,操作的实体类类型。…

P3285 [SCOI2014] 方伯伯的OJ

*原题链接* 本题与NOIP2017列队有很多共通之处,都是一开始给我们一个排好编号的队列,然后进行一些操作。 如果n的范围不大,我们会如何做呢?很容易想到权值线段树,以编号为下标建立权值线段树,维护每个下标…

WEB攻防-ASP安全MDB下载植入IIS短文件名写权限解析

知识点: 1、ASP环境搭建组合; 2、ASP-数据库下载&植入; 3、IIS-短文件&解析&写权限; WEB安全攻防 1、web源码; 2、开发语言; 3、中间件平台; 4、数据库类型; 5、…

百度快照劫持之JS劫持诊断与恢复一例

劫持现象: 百度搜索结果中,被劫持网站出现在搜索结果中, 点击进入网站,网站显示正常,数秒后网站自动跳转到彩票网站f51688.com/ff6/。但是第二次点击搜索结果,正常进入网站缺不会跳转到彩票网站。 初步认…

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名…

GO语言快速入门(比较乱)

一、环境安装 1、安装Go环境 1、官网下载 2、cmd-->go version 3、环境变量 GOROOT:go安装路径 GOPATH:go存放代码的路径 4、GOWorks新建三个文件 5、go env查看配置 2、安装编辑器 GoLand或者VSCode 3、HelloWorld package main //一个程序只有一个…

设计模式学习[5]---装饰模式

文章目录 前言1. 原理阐述2. 举例2.1 人装饰方案一2.2 人装饰方案二2.3 人装饰方案三 总结 前言 近期在给一个已有的功能拓展新功能时,基于原有的设计类图进行讨论。其中涉及到了装饰模式,因为书本很早已经看过一遍,所以谈及到这个名词的时候…

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在…

php转职golang第二期

以下是一份简单的 Go 基本语法笔记: 变量与常量: • var 声明变量。• const 声明常量。数据类型: • 整型、浮点型、布尔型、字符串型等。流程控制: • if-else 语句。• for 循环。函数: • 定义和调用函数。数…

【Hot100】LeetCode—394. 字符串解码

目录 1- 思路栈实现四种情况处理 2- 实现⭐394. 字符串解码——题解思路 3- ACM 实现 原题链接:394. 字符串解码 1- 思路 栈实现四种情况处理 ① 遇到数字,进行倍数相加 、②遇到左括号,压栈之前的元素、③遇到右括号弹出,栈进行…

DFS 算法:洛谷B3625迷宫寻路

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法&#xf…

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成&…

【Android】使用和风天气API获取天气数据吧!(天气预报系列之一)

【Android】使用和风天气API获取天气数据吧!(天气预报系列之一) 古话说得好,要有天气预报,首先需要有天气,和预报。 今天给大家介绍一个好用的天气预报API:和风天气。以及webAPI的使用方法~&a…

【H2O2|全栈】关于HTML(3)HTML基础(二)

HTML相关知识 目录 HTML相关知识 前言 准备工作 标签的具体分类(二) 本文中的标签在什么位置使用? 本期前置知识点 超文本 超文本引用和源属性 图片标签 锚链接 iframe 锚点 预告和回顾 后话 前言 本系列博客将分享HTML相关…

JavaWeb后端开发总结(3)

AOP基础 AOP概述 首先我们要知道AOP是什么? 看下图 个人解析: AOP叫做面向切面编程,但是实际上就是面向方法编程 图中下面一部分是一个AOP的案例 AOP快速入门案例代码实现 案例:测出业务中各个业务方法所需的执行时间 如果…

怎么利用NodeJS发送视频短信

随着5G时代的来临,企业的数字化转型步伐日益加快,视频短信作为新兴的数字营销工具,正逐步展现出其大的潜力。视频群发短信以其独特的形式和内容,将图片、文字、视频、声音融为一体,为用户带来全新的直观感受&#xff0…

单片机DMA原理及应用详解(上篇)(附工程源码)

这篇文章详细介绍单片机的DMA原理和应用范例。希望我的分享能给你带来不一样的收获! 目录 一、DMA简介 二、DMA原理 三、DMA中断 1. DMA中断的工作原理 2. DMA中断的优点 3. DMA中断的配置和处理 4. 应用场景 四、结语 一、DMA简介 1、DMA(D…

数据分析训练模型后输出模型评估报告

数据分析训练模型后输出模型评估报告 1、模型评估指标 1.1、概念: A:n个正样本,检测到是真值的数量 B:m个负样本,检测到是真值的数量 C:n个正样本,检测到假值的数量 D:m个负样本,检测到假值的数量 1.2、准确率(Accuracy) 正确预测的样本数量与总样本数量的比值。…