去年由于参加电赛接触到了openmv和k210,虽然没有拿到奖但还是收获很多的,最近看到openmv有一个追小球小车的例程,秉承着学习的态度(主要是觉得买openmv现成的小车模块直接下载代码实现功能没意思),想着将代码移植到stm32上实现追小球的功能,通过大概2周的调试和学习终于实现了追小球的功能,觉得单纯的比买opmv的小车模块和opmv组装成小车直接下载代码实现功能要学到很多,对于我来说收获最大的是学会了串口通信中的数据打包和解析,和pid算法的简单理解和应用,其实之前有很多追小球的文章,但是我看过之后大部分写的是关于串口通信数据打包和解析的问题,或者是没有彻底的按照openmv的官方例程的原理进行移植,官方例程是小车可以追指定颜色的小球,同时当小球和车的距离过近时,小车可以后退,这里用到了2次pid;而有些文章只实现了可以追小球,不能实现当小车和球距离过近时小车可以后退的功能,他们用的是openmv的测距功能,当小车和小球距离达到他们设定的距离时,小车便自己停下来,当小球远离到大于设置的距离后小车在追上去。不是说他们不好,只是自己觉得没有官方实现方式丝滑(只是个人觉得,大佬勿喷),所以特地写一个和官方实现原理相同的文章。

一,所需物品

(1)openmv摄像头一个

(2)正点原子stm32精英板一个(作者自己用的板子,当然也可以是其它型号的32板子)

(3)一个TB6612电机驱动模块

(4)车模一个(作者买的是自带两个带编码器的直流电机的车模)

​​​​​​​

(5)电池2组(作者就不贴图片了,应该很好找到):

第一组电池:一个12伏的电池(电池盒里装3个4伏电池),作用:为了给TB6612电                        机驱动模块供电。

第二组电池:一个5伏的锂电池,作用:给单片机单独供电。

(6)杜邦线若干

二,功能实现基本思路:(如果还没有看过openmv官方追小球小车教学视频和资料的同学,请先          去openmv网站经行学习,了解大概思路,否则你很难理解下面这段文字)

(1)首先是openmv端,通过直接调用openmv自带的颜色识别函数,识别你自己设置的颜                       色(摄像头通过识别你设置的颜色的阈值来实现识别颜色的功能,阈值的设置方法                         openmv官方颜色识别教程视频里面有大家可去自行观看),识别到指定颜色后                               openmv通过串口通信的方式,将目标颜色物体的横坐标x和物体宽w和高h发送给                             stm32。

(2)stm32端,通过串口接收标志的判断,判断是否接收到openmv发来的数据,当收到                         openmv发来的数据后,将横坐标x减去图像一边的长度,作为误差利用pid算法算出输出                 值ouput_x;将目标物体的宽w和高h相乘得到物体的色块面积,物体色块面积减去你设置                   的目标色块面积作为误差,利用pid算法计算出输出值output_y;算出之后得到左右电机                 的pwm值,左边电机pwm值:-output_y+ouput_x;右边电机pwm值:-output_y-                             ouput_x。将pwm值代入电机控制函数实现追踪小球的功能。

注:如果还没有看过openmv官方追小球小车教学视频和资料的同学,请先去openmv网站经                  行学习,了解大概思路,否则你很难理解下面这段文字(先去看,再来看这里你能豁然                   开朗哦)

三,功能实现代码

(1)openmv端

每行代码后面我已经标写了中文注释方便大家理解,其中最值得注意的是串口数据通信,我采用的是数据打包方式进行发送,因为我们采用串口通信大部分时候并不是一次只发一个数据,而是发很多个数据,上述代码中我们实际想要发3个数据(目标物体中心横坐标,目标物体宽度,目标物体高度) ;而且正点原子的串口每接收到一个数据就要产生一次中断,如果想接受完我们要发的数据就要产生3次中断;所以为了防止处理数据出错,和提高处理数据的准确性,我们在这三个数据之前先发2个数据,之后再发一个数据,一次性发6个数据,前面俩个叫帧头,后面一个叫帧尾,单片机通过判断帧头和帧位数据来判断数据是否正确,这就叫打包数据,这六个数据组成的一个数据集就叫一帧,只是简单给大家说一下,详细的大家可以自己去了解。

(2)stm32端

a,串口部分(进行数据解析)

第一个函数是串口初始化函数,第二个函数是串口中断函数, 第三个函数时是串口数据解析函数,通过串口数据解析函数得到正确的数据,当收到的结果正确时,把串口接收完成标志位赋值一,main函数通过判断串口接收完成标志位来判断是否接收到一帧数据,并启用pid算法。

b,main函数部分

 

这部分代码相信大家都能看懂,再此就不赘述了。

关于本项目完整代码(电机驱动,pid等)大家可私信我发给大家

项目成果视频如下:

视频在百度网盘:

链接: https://pan.baidu.com/s/1ivVLkaaWO66aYTliKbVQcQ

提取码: 1234

基于STM32+Openmv的追小球(颜色追踪)小车——一篇解决所有基本问题相关推荐

  1. 基于STM32的智能循迹避障小车实验(小车运动部分)

    写在前面 这个实验是关于智能小车的实验,现在的想法就是先做出一个循迹和避障功能,后续可能会再添加一些其他的模块. 我在做这个实验之前基本了解了F1系列开发板的大部分模块,如果没有学习之前的模块,建议先 ...

  2. 【学习笔记】stm32+openmv串口通信实现颜色识别

    个人笔记.这是之前的一个实验,现在把它整理出来. 本实验用的是stm32h743和openmv作为硬件,实现用openmv识别出我们想要的颜色,将获取的颜色坐标和目标区域的宽.高 通过串口发送给 st ...

  3. OpenMV:02追小球的云台

    pid.py(直接在网上复制即可) from pyb import millis from math import pi, isnanclass PID:_kp = _ki = _kd = _inte ...

  4. 基于STM32的智能循迹避障小车

    [1]研究背景 随着计算机,微电子技术的快速发展,智能化技术的开发越来越快,智能程度也越来越高,应用的范围也得到了极大的扩展.因此,基于嵌入式技术的智能小车应运而生. 近来两年,智能小车在生活中有着广 ...

  5. 基于STM32设计的避障寻迹小车

    一.前言 1.1 项目背景 根据美国玩具协会在一项研究中,过去几年全球玩具销售增长与GDP的世界平均水平大致相同.但全球玩具市场的内部结构已经占据了巨大的位置变化:传统玩具的市场份额正在下降,高科技电 ...

  6. 基于STM32 Cortex-M3内核F103制作的智能小车项目

    目录 一.简单介绍: 二.硬件支持: 三.软件部分介绍: 四.整体调试: 五.学习总结: 一.简单介绍: 花上一周的时间制作一个智能小车玩玩吧,一直想要制作一辆自己的智能小车,看多了网上的各种小车,有 ...

  7. [基于STM32底盘控制与ROS上层导航小车制作] 第五节 实现STM32与ubuntu系统下的ROS串口DMA通信,传输底盘速度等信息

    系列文章目录 第一节 stm32电机驱动与编码器读取反馈 第二节 stm32电机pid控制 第三节 stm32线速度标定 第四节 stm32添加mpu6050得到angle角度 第五节 实现STM32 ...

  8. 记录基于STM32的独轮车测试板构建(一)电机篇

    今年是学校第一次参加智能车竞赛,毫无传承下想要脱颖而出那必定得先发制人,预选的是独轮车组,得用完全陌生的英飞凌单片机搞全新的独轮车模,难度不小.前些天看了看龙邱的库,在配套的母版上确实很简单好用,但独 ...

  9. 基于STM32的高精度温度测控系统-原理图设计

    基于STM32的高精度温度测控系统,本篇为原理图设计分析篇 高精度温度测控仪设计原理图篇(已更新) 高精度温度测控仪设计PCB篇(已更新) 高精度温度测控仪设计STM32代码篇(未更新) 高精度温度测 ...

最新文章

  1. iOS10存高级安全隐患 黑客入侵可比以往快2500倍
  2. opencv imread
  3. js 中的[] {}是什么意思
  4. [AWS vs Azure] 云计算里AWS和Azure的探究(4)
  5. es 模糊查询_ES系列11:Term-level queries 之 3种模糊查询和terms_set query
  6. python 三维数组_NumPy处理图像不香吗?我用Python把秋日里最美的景色做成了这种效果~...
  7. java实现rabbitmq路由模型(routing/topic queues), 生产者 消费者 交换机 消息队列
  8. 惠普电脑笔记本台式机预装系统 V2011.08 兼容i3 i5 i7
  9. Struts2 通配符不能使用问题
  10. 容斥原理与Mobius函数
  11. item在python中什么意思_Python中使用item()方法遍历字典的例子
  12. IJCAI2021强化学习相关论文集合推荐
  13. 字符串算法:从入门到劝退
  14. 【一年一个小知识】如何往kindle阅读器里传书?
  15. Java例:查询自己的星座
  16. ios布局 分为左右两块_iOS 13 隐秘的细节④:系统组件·下
  17. vue——省市区三级联动demo
  18. redis键和值出现乱码问题 \xac\xed\x00\x05t\x00$
  19. 吉时利Keithley软件2600系列2635B|2636B|2651A|2657A NS-SourceMeter源表软件
  20. 帝国cms华北新闻网模板php地方门户新闻网站源码带采集,帝国CMS新闻资讯-地方门户网站模板(带手机版)...

热门文章

  1. ESRI ArcGIS Desktop v10.8 地理信息系统中文版安装说明
  2. 360安全卫士查看CPU内存条信息
  3. 域名重定向的解决方案(1)
  4. OpenJudge 1.13-51:古代密码 题解
  5. javascript:定时器多次开启无法停止的问题setInterval
  6. PHP自动化售货发卡网源码,PHP自动化售货发卡网源码
  7. Zygote进程原理简单介绍,源码解析
  8. 计算机网络专业就业情况方向,2018计算机网络技术专业就业方向及就业前景分析...
  9. android中百度地图的使用(一)
  10. 二手商城的本科毕业设计