OPENMV巡线转弯代码 适用于电赛优化版2022.6.29

这篇具有很好参考价值的文章主要介绍了OPENMV巡线转弯代码 适用于电赛优化版2022.6.29。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OPENMV巡线转弯代码 优化版2022.6.29

大四毕业了,用不到了,这几天趁着闲优化了一下,之前那个号写的太复杂了

  • OPENMV通过UART进行通信
  • ROIS为5块感性区域,在160x120范围内分为5块,方便遇到路口和前方无道路的处理
  • largest_blob为blob模块[2]为色块w,[3]为色块h,官方docs上有说明
  • 对out_str进行设置可看到串口输出的内容
  • 然后就是一些变量有用没用的自己使用的时候删一下,这一份的逻辑还是存在问题的
  • 本人将此代码用于2021送药小车复现配合K210数字识别复现成功
  • 直接复制粘贴就能用,不能用的自己反思一下自己是不是啥都不会
import sensor, image, time, math,pyb
from pyb import Pin, Timer,UART

uart = pyb.UART(1,115200,timeout_char = 1000)#串口初始化

# Tracks a black line. Use [(128, 255)] for a tracking a white line.
Red_Thresholds = [(33, 61, 16, 85, 21, 69)]

ROIS = [                            #[ROI, weight]越近,权重越大,在这里权值暂时不考虑
              (30, 90,   100, 30, 0), #下面1
              (40, 40,   80, 40, 0), #中间2
              (30, 0,    100, 30, 0), #上面3  160 *120
              (0, 20,    30, 100, 0), #左边4
              (130,20 ,   30, 100, 0)  #右边5
      ]
weight_sum = 0
for r in ROIS: weight_sum += r[4] # r[4] is the roi weight.

#---------------------------------------摄像头初始化-----------------------------------------#

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA) #320*240
sensor.skip_frames(time=2000)
sensor.set_auto_gain(False)                         # 颜色追踪关闭自动增益
sensor.set_auto_whitebal(False)                     # 颜色追踪关闭白平衡

flag=0;
i=0;  #记录第几行数据
j=0;  #记录直线数量
led=pyb.LED(3)#必要的时候进行红外补光

cross_num = 0 #第几个路口
cross_flag = 0 #转弯的标志
back_flag = 0;  #返回的标志

center_flag1 = 0 #区域标志
center_flag2 = 0
center_flag3 = 0
center_flag4 = 0
center_flag5 = 0


out_str1='';
clock = time.clock()
#帧率
old_img= sensor.snapshot().mean_pooled(4,4)        # 160x120 -> 40x30,前一张照片
#定义一个定时发送数据的函数
def tick(timer):#we will receive the timer object when being called
       global flag
       flag=1

tim = Timer(4,freq=100)            # create a timer object using timer 4 - trigger at 1Hz
tim.callback(tick)                # set the callback to our tick function




#--------------------------------------while循环开始-----------------------------------------#

while(True):
    pyb.LED(1).on()
    if(flag==1):
        img=sensor.snapshot()
        img.lens_corr(1.5) # for 2.8mm lens...摄像头畸变纠正
        #--------------------------------------寻找红色色块的位置--------------------------------------#
        #检测色块位置
        for r in ROIS:
           i=i+1;
           blobs=img.find_blobs(Red_Thresholds, roi=r[0:4], merge=True,pixels_area=10) # r[0:4] is roi tuple.
           if blobs:#如果找到了颜色块
               # Find the blob with the most pixels.
               largest_blob = max(blobs, key=lambda b: b.pixels())
               #print("0", largest_blob[0])
               #print("1", largest_blob[1])
               #print("2", largest_blob[2])
               #print("3", largest_blob[3])
               if(i==1):#下面矩形
                   if(largest_blob[2]>=5):#排除瑕疵点
                       if(largest_blob[3]>=5):
                           center_flag1=1;#下面的矩形找到的标志
                           img.draw_rectangle(largest_blob.rect())
                           img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)

               elif(i==2):#中间矩形
                   if(largest_blob[2]>=5):
                       if(largest_blob[3]>=5):
                           center_flag2=1;
                           img.draw_rectangle(largest_blob.rect())
                           img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)
               elif(i==3):#上面的矩形
                   center_flag3=2;#有找到,但是不符合要求
                   if(largest_blob[2]>=5):
                       if(largest_blob[3]>=5):
                           center_flag3=1;
                           img.draw_rectangle(largest_blob.rect())
                           img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)
               elif(i==4):#左边的矩形找到了
                   if(largest_blob[2]>=5):
                       if(largest_blob[3]>=5):
                           center_flag4=1;
                           img.draw_rectangle(largest_blob.rect())
                           img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)
               elif(i==5):#右边的矩形找到了
                   if(largest_blob[2]>=5):
                       if(largest_blob[3]>=5):
                           center_flag5=1;
                           img.draw_rectangle(largest_blob.rect())
                           img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)



        #--------------------------------------遇到的路口--------------------------------------#
        if(center_flag2>0 and center_flag4>0 and center_flag5>0):
            cross_num = cross_num + 1 #第几个路口

        #--------------------------------------前方无路--------------------------------------#
        if(cross_num>0 and center_flag2==0 and center_flag4==0 and center_flag5==0 and center_flag3==0):
            back_flag = 1








        i=0;

        out_str1+='%.d'%      int(center_flag1);   #直角标志位
        out_str1+='%.d'%      int(center_flag2);   #直角标志位
        out_str1+='%.d'%      int(center_flag3);   #直角标志位
        out_str1+='%.d'%      int(center_flag4);   #直角标志位
        out_str1+='%.d'%      int(center_flag5);   #直角标志位
        out_str1+='%.4d'%      int(cross_num);   #路口标志位
        out_str1+='%.d'%      int(back_flag);   #返回标志位

        uart.write('s'+out_str1+'#')
        print(out_str1)
        #像素位移之和清零
        turn_flag=0;
        center_flag1 = 0 #区域标志
        center_flag2 = 0
        center_flag3 = 0
        center_flag4 = 0
        center_flag5 = 0

        #数组清零
        out_str1=''#清除之前的数据
        flag=0;
        #-----------------------------------串口打印数据-----------------------------------------#

文章来源地址https://www.toymoban.com/news/detail-612010.html

到了这里,关于OPENMV巡线转弯代码 适用于电赛优化版2022.6.29的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenMV:14巡线小车

    这个例子展示了在OpenMV Cam上使用get_regression()方法获得ROI的线性回归。使用这种方法,可以轻松让机器人跟踪所有指向相同大致方向的线。 本例程可以用于机器人巡线,效果非常好。 “巡线小车”的原理和“追小球的小车”是差不多一样的,其中car.py和pid.py完全一样,改

    2024年02月17日
    浏览(25)
  • 2022电赛小车开源代码讲解开源

    2022电赛小车我认为有主要是几个主要的问题,我将分这几个部分来讲解 目录 一、循迹 二、蓝牙通信,双车数据传输 三、起始路口的识别 四、分叉路口的识别 五、源码  2022电赛,双车稳定行驶_哔哩哔哩_bilibili 循迹我们组用的是五路灰度,灰度跟红外对管的作用是差不多的

    2024年02月09日
    浏览(33)
  • 2021电赛F题数字识别和巡线部分

    文章之前12月发了一次,但是我后来申请的免毕设后,用到了一些文字,所以删了这篇文章,但是还是查重了,于是我把一些程序讲解先删了,等毕设结束后再编辑加上。 这次电赛我没有准备多少东西,只提前准备了图像识别和坐标计算一类的。在20年的省赛帮过雪地调过k

    2024年02月07日
    浏览(43)
  • 基于Openmv H7 Plus 的红色巡线+十字路口+多数字识别算法

    由于是采用命令集的方式控制openmv,摄像头不需要接收太多的数据,我采用的是判断串口接收的长度来区分命令集。flag为接收数据的长度,通过发送不同长度数据来改变openmv的工作模式 1.巡线 在openmv的开源库中有色块识别的关键函数blob(),可以传回识别出的矩形色块的中心

    2024年02月16日
    浏览(33)
  • Openmv+STM32F103C8T6视觉巡线小车

    机器视觉巡线处理是参考openmv官方代码 Openmv官网源代码:book. openmv.cc/project/follow-lines.html 根据官网视频及教程将源码注入openmv中。 小车巡的是黑线,所以颜色阈值要更改。 在文件示例中打开helloworld.py。 打开工具/机器视觉/阈值编辑器/缓冲区。 将我们需要寻迹的黑线调至全

    2023年04月09日
    浏览(44)
  • 【手拉手 带你准备电赛】单色块识别(基于openmv)

    目录 文章背景 openmv介绍 openmv色块识别原理 openmv色块识别代码 最终结果 疑惑细解: 关于阈值的设置: 关于自动增益和白平衡         我们都听说过什么图像识别、色块识别,并且在2021年电赛——智能送药小车中也使用到了相关技术,那么你知道相关的原理和实现方法

    2024年02月11日
    浏览(24)
  • 2023年电赛---运动目标控制与自动追踪系统(E题)OpenMV方案

    如果有嵌入式企业需要招聘校园大使,湖南区域的日常实习,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02@gmail.com,此消息至2025年1月1日前均有效 (1)废话少说,很多人可能无法访问GitHub,所以我直接贴出可能要用的代码。 此博客还会进行更新,

    2024年02月14日
    浏览(34)
  • 2021电赛F题送药小车视觉部分的一种思路(双OpenMV法)

    前言: 最近参加了2021年电赛的F题,因为诸多原因未能完赛,现将图像识别部分的记录一下,交流学习。 因为只介绍视觉部分,我们就节选相关的部分吧。 设计并制作智能送药小车,模拟完成在医院药房与病房间药品的送取作业。院区结构示意如图 1 所示。院区走廊两侧的

    2024年02月15日
    浏览(32)
  • 【C++】C++代码性能优化的方法(全网最适用)

    本文将总结并详细介绍C++代码性能优化的方法,旨在为C++开发者提供一个全面、实用的性能优化指南。无论你是刚入门的新手,还是有经验的开发者,都能从中找到适用于你的优化技巧。 const 是一个修饰符,可以用来告诉编译器一个变量的值不应该改变。这样可以提高程序的

    2024年02月03日
    浏览(23)
  • 2022电赛小车跟随行驶系统(C题)复盘

    此次的电赛感觉结束的挺突然的,在找到方向准备细化地进行调试的时候却是没有足够时间来完成代码上的完善。想着此次遗憾,写一篇博客来记录一下自己的经历吧,总结总结此次的电赛时光。   电赛题目  首先便是题目的选择,由于我们之前校电赛时简单接触过小车的题

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包