2023年8月电赛e题成果梳理 (一)

1 篇文章 0 订阅
1 篇文章 0 订阅

序言

        当时手里有一个大创的项目,还很头疼的时候,被舍友忽悠去搞电赛,虽然说被扔过来一堆任务,很烦,但也算是当了一次主力,选队友很重要很重要,要是担子一个人扛那真是.....

        一直想把资源开源给大家,电赛训练过程积累到不少的学习经验,参赛前一个月才第一次摸到msp430和k210,理论上我的资源应该可以应急,或者解决小白的困难,若有其他疑问可以评论区咨询。

        关于电赛e题,同校参赛成员多采取开环算法,代码写死,不能应对随机放置A4纸的情况,这里我采取闭环算法,只采用一块k210和一块稳压驱动,用k210自带摄像头检测目标后,经计算得到的坐标和角度反馈给k210控制的舵机,k210有个很大的优点是采用micropython语言,有足够用的库供您选择,在pid算法,三角函数算法,以及PWM波输出和串口调用方面提供了极大的便利,列表元组等灵活应用更便于处理整理摄像头获取的大量数据。

关联坐标和现实位置

        反正切函数法

        e题中有两个东西是可以或者必须固定的,一个是50*50屏幕,一个是摄像头和云台的系统整体,我设计的方法必须要有两个固定的值,题中明确告知摄像头和云台系统和屏幕的距离为1m,因此此外的固定值一个是摄像头相对于屏幕中心的左右偏移,摄像头相对于屏幕中心的高度,这些值在固定已知的情况下,才能用反三角函数来计算云台指向目标所需要转动的角度。

        示例如下:

反三角函数示意图

      

        k210正对白屏正中心点 假设(180,120)

        比例尺K:k210屏幕上显示一条横线的像素长度和现实白屏上横线的实际长度(单位尽可能选毫米)

        k210屏幕上获取的目标横纵图像坐标X,Y。

        则目标点相对中心点偏移量为(180±X,120±Y)

        白屏中心对于k210摄像头的距离D

        若tanA=a/b,则A=arctan a/b

        总结公式:角度x = arctan [ K(180±X) / D ]

                          角度b = arctan [ k(120±Y) / D ]

  python的math库中反正切函数:

jiaoA = math.degrees(math.atan((160-x)/b)) #角a为水平方向舵机偏转角度,b为舵机云台到图像的距离,为固定已知值

        坐标法

         这是比赛倒数第二天晚上,根据其他博主的思路和其他参赛组的思路综合后突发奇想所得。

        当屏幕正对着白屏的时候,激光打在白屏上,光斑在k210屏幕上可以获取对应图像坐标,云台内舵机的角度可以通过读取输入的高电平时长,二者应当有一种函数关系,因此固定好摄像头-云台系统,固定好屏幕,摄像头正对白屏正中心,使每次转动一点固定角度,光斑移动的距离均匀。

        开启激光笔,通过按键使云台转动固定角度,记录每次转动后的角度,并采用检测色块函数获得色块在屏幕上的坐标值函数来记录每次移动后的光斑中心图像坐标。

        记录完整后将数值放入excel表格一次方程拟合后获取K和B的值

        类似下图:

计算角度和坐标的比例关系

 坐标法部分代码:

 while flag1 < 4 :
            #lcd.display(img)
            x = zb_x[flag1]  #从左上角开始,顺时针数第[flag1]个点的X坐标
            y = zb_y[flag1]  #从左上角开始,顺时针数第[flag1]个点的Y坐标

            xx = -0.2447*x + 19.271   #X方向角度 k = -0.2447 b = 19.271 #右上左下  
            yy = 0.2334*y - 47.567    #Y方向角度 k = 0.2334 b = -47.567


            jiao_x.append(xx)
            jiao_y.append(yy)
            print(jiao_x)
            flag1 = flag1 + 1
        Servo_x(S1,jiao_x[0])   #输入舵机第一个点的X方向角度

        Servo_y(S2,(jiao_y[0])) #输入舵机第一个点的Y方向角度
        utime.sleep_ms(1000)
        while flag2 < 4 :
            while iii < 301:
                flag3 = flag2 + 1
                if flag3 == 4:
                    flag3 = 0
                bujin_x = jiao_x[flag2] + (((jiao_x[flag3])-(jiao_x[flag2]))/300)*iii  #X的角度步进量
                
                bujin_y = jiao_y[flag2] + (((jiao_y[flag3])-(jiao_y[flag2]))/300)*iii  #Y的角度步进量
                Servo_x(S1,bujin_x)  
                utime.sleep_ms(2)
                Servo_y(S2,bujin_y)   #每2ms移动一点角度
                iii = iii + 1
                utime.sleep_ms(2)
            utime.sleep_ms(500)
            flag2 = flag2 + 1
            iii = 1

利弊

        个人更倾向于坐标法,反正切函数在精度足够高的情况下,三角函数的精确度上限比较高,但是很容易受到器材晃动、摄像头与云台的相对位置或者位置没有摆到完全理想状态等情况影响精确度,坐标法相对灵活,通过转动的角度和图像坐标对应,只要使摄像头-云台系统足够稳定,不用考虑摄像头和云台的相对位置,更简便,但是精度不会太高。

关于k210

        个人在k210最小系统板和openmv最小系统板的学习和使用过程中,个人感受是openmv全方位碾压k210,但是价格要高,在QVGA分辨率模式下,openmv帧率在15~20左右,而k210则会因内存不够中断进程,因此比赛时器材数量原因,我没拿到openmv,用K210的QQVGA超级模糊的分辨率模式监测坐标值,数值疯狂跳动。

        因此在黑色方框激光光斑循迹过程中能不能稳定贴合那就听天由命。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用[1]中的信息,2023电赛E的基础目应该与往差异不大,主要包括仪器类、电源类、控制类、通信类等几大块。近来,随着科学技术的发展,电赛也添加了许多新元素,比如互联网+、大数据、人工智能算法、超高频等。同时,不同类别的赛之间也出现了融合,例如2021的A信号失真度测量装置和D基于互联网的摄像测量系统就是仪器仪表类和通信类赛的融合。 关于2023电赛E基础的具体要求,根据引用[2]中的问答内容,可以得到以下信息: - E目标运动追踪系统可以使用树莓派,只禁止使用笔记本和台式机。 - 云台和屏幕的高度关系可以自行决定。 - 进行自动复位时,屏幕的位置应该一直固定,只有绿色激光笔可以移动。 - E中的主板可以使用stm32的战舰精英mini版。 - 测试完之后,可以进行复位操作。 - 运动目标控制与自动追踪系统中的屏幕对材质没有特殊要求,可以使用白色材质。 - 摄像头模块的摆放位置没有具体要求,现场测试的屏幕材料可以自带。 - 封装时,屏幕和靶纸需要一起封入带去,赛区不提供屏幕和靶纸。 - 两种激光笔测试开始后是否一直要亮着可以自行决定。 - 基础部分第一问中的“在任意位置按下按键可以复位”,任意位置需要自己能达到,重点是能够复位。 - 屏幕高度可以自行决定。 - 基础部分第一问中的“任意位置都可以复位”,只要光斑处在任意位置,都可以通过复位功能回到原点。 - 测试场地的屏幕与外界环境线条是否分界明显没有具体要求。 综上所述,2023电赛E基础的具体要求包括使用树莓派进行目标运动追踪系统、屏幕位置固定、使用白色材质的屏幕、自行决定摄像头模块的摆放位置、自带屏幕和靶纸、自行决定激光笔是否一直亮着、能够在任意位置按下按键进行复位等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值