K210学习笔记——三角函数下的目标追踪

这篇具有很好参考价值的文章主要介绍了K210学习笔记——三角函数下的目标追踪。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

各位正在读文章的朋友们你们好,本人为非专业学生,如有不对的地方,期待您的指正。

目标追踪的意思是:识别到目标物体,通过舵机转动,朝向目标物体.

实验器材:二自由度舵机云台加两个SG90舵机,K210。

k210识别色块,智能捡网球小车(自主学习),学习,单片机,嵌入式硬件,python,Powered by 金山文档

实验分两步走:一是识别到目标物体,二是识别到色块后返回色块位置坐标,进而控制舵机转动指向目标物体。

一:识别目标色块——image.find_blobs函数:

识别颜色方块,在编程环境中,打开工具中的机器视觉、阈值管理器,在网上找一个颜色方块,或者在缓冲区内,选择最佳的颜色跟踪阈值,通过不断调整,使目标物体在二进制图像中呈现白色,其余为黑色。下面的一串数字即为目标物体特定的颜色阈值。

k210识别色块,智能捡网球小车(自主学习),学习,单片机,嵌入式硬件,python,Powered by 金山文档
k210识别色块,智能捡网球小车(自主学习),学习,单片机,嵌入式硬件,python,Powered by 金山文档
image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)

image.find_blobs()函数用来识别目标色块。

thresholds为目标色块的颜色阈值。

roi为感兴趣区,我这里只有一个色块,所以不用理它。

x_stride和y_stride分别是查找的色块在x,y方向上的最小宽度的像素。结合实际摄像头到目标色块的距离,设置它的大小,可排除一些误差。

通过此函数,可以获取以下的值:

blobs[0] = 色块外框的X坐标,blobs[1] = 色块外框的Y坐标,blobs[2] = 色块外框的宽度,blobs[3] = 色块外框的高度,blobs[4] = 色块外框的像素数量,blobs[5] = 色块外框的中心点横坐标,blobs[6] = 色块外框的中心点纵坐标。

利用这些值,我们可以在显示屏上“圈住”目标色块、在旁边写单词,画中心叉等。

最重要的就是获取中心点横纵坐标(blobs[5],blobs[6]),用它们来确定色块的位置。

舵机的转动——Servo函数:

舵机的转动是由PWM控制的,利用内部的定时器生成20ms为一个周期的脉冲,只有在此周期下,SG90舵机才能工作,另通过定时器控制高电平的占空比,函数是打包好的,直接就拿来用了。

k210识别色块,智能捡网球小车(自主学习),学习,单片机,嵌入式硬件,python,Powered by 金山文档
def Servo(servo,angle):
    S1.duty((angle+90)/180*10+2.5)

比如输入angle = 0 则S1.duty(7.5),对应上图 0度在20ms的工作脉冲中为7.5%的占空比。

总:

import sensor,image,lcd,time
import math
from machine import Timer,PWM
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
S1 = PWM(tim, freq=50, duty=0, pin=17)//自由映射在17引脚
S2 = PWM(tim, freq=50, duty=0, pin=15)//自由映射在15引脚

def Servo(servo,angle):
    S1.duty((angle+90)/180*10+2.5)

lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
sensor.set_auto_exposure(1)
sensor.set_auto_gain(1)
sensor.set_vflip(1)
sensor.set_hmirror(1)
sensor.run(1)

red_threshold   = ((43, 66, 45, 107, 40, 1))

bfive=[];bsix=[]
while True:
    
    img=sensor.snapshot()
    blobs = img.find_blobs([red_threshold],x_strides=100,y_strides=100)
    if blobs:
        for b in blobs:
            tmp=img.draw_rectangle(b[0:4],color=(225,225,225))##在图像上绘制一个矩形。
            tmp=img.draw_string(b[0],(b[1]-10),"BOX",color=(0,0,255))
            tmp=img.draw_cross(b[5], b[6])##画十字交叉
            bfive.append(b[5]);bsix.append(b[6])
            if len(bfive)==50 and len(bsix)==50:
     

                hengzuobiao=max(bfive,key=bfive.count)
                zongzuobiao=max(bsix,key=bsix.count) 
                print("中心点横坐标为",hengzuobiao)
                print("中心点纵坐标为",zongzuobiao)
                x = hengzuobiao
                y = 240 - zongzuobiao ##相对于舵机云台
                b = 300               ##b为平台到图像之间的距离,假设为300(尚未搭建实验台)
                a = math.sqrt(b*b+(160-x)*(160-x))
                if x <= 160:
                    jiaoA = math.degrees(math.atan((160-x)/b))##角a为水平方向舵机偏转角度,b为舵机云台到图像的距离,为固定已知值
                    jiaoB = math.degrees(math.atan(y/a))      ##角c为垂直方向偏转角度
                else:
                    jiaoA = -math.degrees((math.atan((x-160)/b)))
                    jiaoB = math.degrees(math.atan(y/a))
                bfive=[];bsix=[]
                print("水平方向舵机应偏转角度为:",jiaoA,"度")
                print("垂直方向舵机应偏转角度为:",jiaoB,"度")
                
                Servo(S1,jiaoA)
                time.sleep(1)
                Servo(S2,jiaoB)
                
                time.sleep(1)
                Servo(S1,-jiaoA)
                Servo(S2,-jiaoB)##复位


    lcd.display(img)

math.atan()求出反三角正切值,math.degrees()将弧度制转化为角度值。

注意:

本实验因没有搭建实验台,有些数据是模拟的,若假设摄像截取的图片大小在真实平面中为320dm * 240dm,可参考上面代码,这样对应的坐标值就可以当作长度值用于计算。

垂直方向的舵机起并不是在X-Y平面上的,包括水平方向也是的,有一定高度。

舵机云台放置在正对拍摄面(X-Y),居中位置.

K210返回的坐标值是左上角为原点,水平向右为X轴正方向,垂直向下为Y轴正方向。

k210识别色块,智能捡网球小车(自主学习),学习,单片机,嵌入式硬件,python,Powered by 金山文档

实验现象:文章来源地址https://www.toymoban.com/news/detail-606408.html

k210识别色块,智能捡网球小车(自主学习),学习,单片机,嵌入式硬件,python,Powered by 金山文档
k210识别色块,智能捡网球小车(自主学习),学习,单片机,嵌入式硬件,python,Powered by 金山文档

到了这里,关于K210学习笔记——三角函数下的目标追踪的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • K210学习笔记(七)——MAIX BIT(K210)拍照

    MAIX BIT使用的是OV5642,像素为500w,但实际使用只有30w,但对于物体检测,人脸识别是够用的,用maix bit进行拍照,所得照片可以直接用于后面的数据集训练,减少了图片格式转换这一步骤。 参数说明: freq : 设置摄像头时钟频率,频率越高帧率越高,但是画质可能更差。默认

    2024年02月15日
    浏览(27)
  • 【K210】K210学习笔记三——按键、LCD、LED的使用

    本人大四学生,电赛生涯已经走到尽头,一路上踩过不少坑,但运气也不错拿了两年省一,思来想去,决定开始写博客,将电赛经验分享一二,能力有限,高手轻喷。 往期的博客讲述了 K210 的感光元件模块 sensor 的配置,机器视觉模块 image 中部分函数的使用(目前是用 find

    2024年02月11日
    浏览(30)
  • K210学习笔记(二) K210与STM32进行串口通信,K210收,STM32发

    想用STM32通过串口给K210发数据,并在屏幕上显示,看了好几篇博客,终于搞通了,大家感兴趣也可以看看。 K210学习笔记(一) K210与STM32串口通信相关 接线,STM32的串口引脚比较固定,而K210就牛比了,任意映射,懒人福音。这里我找了两个没有被复用的IO,IO9和IO10 STM32 K210 GND

    2023年04月08日
    浏览(30)
  • K210学习笔记(七):画图与颜色识别

    在之前我们学会了关于K210的摄像头与lcd的一些应用,那么今天我们了解一些关于K210的一些画图的方法和利用K210进行颜色识别。 首先我们明确,什么是画图,为什么要画图。画图指在图片上画出圆,方框,箭头,十字交叉或者字符。我们为什么要画图,其实一个基础的应用就

    2024年02月15日
    浏览(30)
  • K210学习笔记(六):摄像头的应用

    在学习了利用lcd显示固定文件的照片之后。我们知道的是手上的这块K210开发板还集成了一枚摄像头模块,因此我们就可以利用摄像头模块捕捉照片并且实时的显示在板载lcd显示屏和IDE上,我们知道视频实际上由一帧一帧的照片组成,所以我们只需要让摄像头不断地拍照片,然

    2024年02月12日
    浏览(48)
  • K210学习笔记(十):KPU之物体识别

    进行到KPU的又一个应用咯,其实跟前一个人脸识别的应用没有太多的不同。物体识别这里可是分类二十个物体,而人脸识别只是一个简单的二分类问题。(理论上机器学习也能做但是效果咋样就不知道了)。 大概的程序思路跟上一个实验也是一致的,将该用的函数库导入之后

    2024年02月13日
    浏览(33)
  • K210学习笔记(九):KPU之人脸识别

    K210进入到这里总算是要进入这块板子的精髓部分了,超低功耗配备的超强算力,所谓的KPU可以理解成显卡,可以给模型的运算提提速。我们来简单介绍一下KPU部分(来源MicorPython从0到1): KPU 是 K210 内部一个神经网络处理器, 它可以在低功耗的情况下实现卷积神经网络计算

    2024年02月12日
    浏览(39)
  • K210学习笔记——MaixHub在线训练模型(新版)

      最近sipeed推出了新版的maixhub在线训练平台,因为前端时间比较忙没有时间来体验新版的功能,最近闲下来后赶忙来体验一下。新版maixhub对浏览器有要求的,比如不支持qq浏览器,推荐使用Chrome、Microsoft Edge、Firefox、Safari等浏览器。点击这里跳转新版maixhub。   新版mai

    2023年04月08日
    浏览(24)
  • 三角函数积分(二)

    三角函数积分(一)万能公式法在上一节中,用万能公式法解题三角函数,但是虽然方法比较万能,但是在一些题目中解题会比较繁琐,所以学习更多的三角函数积分的解法是非常有必要的。 这一节,主要练习“缩分母”技巧。 当分母为 1+cosx或者1+sinx 时,使用缩分母技巧,

    2024年02月05日
    浏览(26)
  • K210学习笔记(十二)——MaixHub本地训练模型(Windows)

    MaixHub虽然可以在线训练模型,但是数据集限制大小为20M以下,而且大多数时候都需要排队才能训练模型,这可能就不能满足我们对模型的需求,所以我在Windows系统下搭建环境,本地训练模型。对于本地训练的纯小白来说,虽然MaixHub本地训练不需要虚拟机,但是还是要严格按

    2023年04月26日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包