找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 65|回复: 2
打印 上一主题 下一主题
收起左侧

电赛结束,和大家分享一下前段时间的STM32单片机送药小车项目吧

[复制链接]
跳转到指定楼层
楼主
ID:958636 发表于 2023-8-17 09:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于STM32以及CUBEMX的项目分享(一)。

  本人从接触单片机一直到到现在走了不少的弯路,也无人去引导,所以学习的深度仍然不够深刻,所以这些项目中可能会包含一些错误的见解,还请各位佬可以不吝赐教,谢谢大家,下面开始我的分享内容了。

一、关于准备电赛第一步,复刻21年电赛送药小车

  我参加21年电赛时是个菜鸟,当时也没能帮上学长的忙,因此自己也心存遗憾,于是在备战23年电赛时我选择完成当年的遗憾。

  对于21年电赛的内容我就不做过多的讲解,赛题可以在网上找到的哈,大家可以看看哈,当然要是不想找,我也给出地址供大家查看哈:


    下面说一下我对于21年电赛的思路吧,这个思路适合能力一般的同学哈,大佬们的方案更快更稳,但是同时也对于知识的要求更加严格,我选择的是“编码器定脉冲“的思路,也是就为赛道量身定做一套行驶的函数,因为21年的送药小车的赛道距离是固定的,那么我们只需要保证我们函数运行距离的准确性即可,其实做到最后也就是调参啦。

  那么说完了我们的车该怎么跑,下面说说各个病房要怎么去吧:

  1.对于近端病房

    近端病房位置是固定的,我们大可不必耗费时间以及摄像头的算力去进行计算,大可以直接写死程序,简单、明了、迅速。对于能力一般的同学来说这就是最优解,那我们来说说怎么做吧,第一步:给摄像头看1或者2的数字,第二步:直行到第一个十字路口,第三步:是1就左拐是2就右拐,第四步:走到终点后停下。这便是去的思路,回来时啊也是走固定的距离,但是你可以选择倒车回来也可以选择原地打转180度都是可以的,我这里是直接倒车,当然我的队友选择MPU6050转向环直接准确180度回旋,走的结果是一样的,但是很明显转向环更加漂亮。这便是我的思路。

2.对于中、远端病房

    中端和远端的方法我就放在一起讲了,因为前面小车行进的方法已经说的很明白了哈,剩下的就看看摄像头啦!
    先说摄像头哈,我个人专注C的程序,我的队友偏向于搞K210这些,当然我用的是OPENMV,两者可以说是一样的哈,废话不说,我直接告诉大家我的数字识别思路,就是模板匹配,多个模板匹配也就是ctrl+c然后ctrl+v哈,给各位看看openmv的模板匹配的代码。【这里不给大家讲这个OPENMV的编程方法了嗷,奉上官方教程更加的权威:book.openmv cc/image/template-match.html
  1. template = image.Image("/template.pgm")//下面说一些关键的代码
复制代码
  1. r = img.find_template(template, 0.70, step=4, search=SEARCH_EX)
复制代码
        也就是说啊,我们只需要录入模板即可实现数字识别啦,但是啊这个不是特别稳定,最好还是能训练一下模型去运行这样识别的精准度会很好,关于如何训练的问题,网上有很多讲解的,但是有一点就是,我更加推荐K210使用训练的模型,因为它的算力比较高运行起来也更好。在文章的末尾我会给出我的openmv代码给大家参考的。
  3.openmv与stm32的通信
         openmv也是STM32啦其实,所以效果是一样的,我们先来说说openmv该怎么发送数据给STM32吧:
          我们定义一个openmv的串口发送函数:
  1. def sending_data(cx,cy,x_flag,y_flag):
  2.      global uart;
  3.      data = bytearray([0x2C,0x12,cx,cy,x_flag,y_flag,0x5B])#这个函数可以将我们的数据打包成16进制的一帧数据包,也是十分的方便哈
  4.      uart.write(data)                                                         #这个函数就是串口发送函数了
复制代码
          那既然openmv发了数据,接下来就看看STM32怎么去接收吧:
      1.首先定义一个函数,然后这个函数的特性就是一个字节一个字节的处理               
                2.进行一些自己定义的规则判断

             串口的处理其实并不困难,大家拿到代码认真分析即可明白其中的意思,这个代码我也将放置在文末。
二、总结
   我是这样打算的,我分几期和大家分享这些内容,这个作为第一期吧,主要分享21年电赛送药小车的思路以及一些源码哈,大家等我后面更新吧,大家对于我分享的代码有疑问的话可以在评论区提出来哈,或者有更好的思路,都可以提出,大家一起进步,志同道合的人总会走到一起的!
   不多说,我先奉上我的代码了【恰点黑币啦,嘻嘻】。

openmvtest.7z

5.16 MB, 下载次数: 1, 下载积分: 黑币 -5

送药代码

openmv.rar

1.42 KB, 下载次数: 0, 下载积分: 黑币 -5

openmv文件

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:958636 发表于 2023-8-17 09:20 | 只看该作者
  r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))#这是模板匹配的关键代码,文中老是乱码哈哈哈也不知道咋解决
回复

使用道具 举报

板凳
ID:301191 发表于 2024-10-23 03:57 | 只看该作者
顶一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表