前言
E题是运动目标控制与自动追踪系统,其实就是一个红色激光追踪绿色激光。本文主要授人以渔,讲解思路,不含代码,建议自己编写。本文旨在和大家探讨一下更好的方案,欢迎讨论。
读题
做题肯定是要读题的,本节主要是将一些主要的点,并反推出题人的出题意图。
题目要求
这里为防止以后做题同学产生疑惑,说明一下,有部分要求并没有直接在题目说出,而是在各学校指导老师收集学生对题目没有解释或者解释不清后产生的问题,提交组委会后给予的回复。
- 距离1m有白色屏幕:有效面积60cm*60cm,除规定的不超过1mm宽度的铅笔痕迹外,不能存在其他标识
- 不得对屏幕以外做额外要求,包括划线,挂深色布,放黑板等等。背景只能是为普通实验室背景。
- 屏幕与支架可以自带到比赛评审现场,有不少于10分钟时间恢复与调试时间,但不允许烧录代码及手机/电脑调试。
- 红色激光系统中,激光位置固定,摄像头位置不限制。
- 绿色激光系统中,激光与摄像头要放在一个板子或者什么上面,要求能被评委移动(与屏幕平行,位于红色激光笔两侧,距红色激光笔距离大于 0.4m、小于 1m),且完全独立(不能与红色激光系统存在无线/有线连接通讯),但不强制要求摄像头也在云台上面。
- 基本要求逻辑颇为简单,但可以得知对硬件(摄像头分辨率,电机)要求较高。
反推出题人想法
这里写的是我根据对题目的理解,对出题人想法的猜测,不保证正确
-
不希望你识别白色屏幕本体
论据:
1.给出了屏幕的具体距离;(让算法有较大帮助,下面算法阶段有细说)
2.要求的铅笔痕迹在1m外识别对摄像头要求较高;(较多的队伍使用的openmv,k210之类的摄像头较难做到)
3.背景不能有要求;(如果背景同样是白色,则可能无法通过识别白色屏幕外部轮廓,则无法通过比例计算边框)
-
暂无
硬件方面
工欲善其事必先利其器。硬件决定了上限,软件决定下限。如果硬件不过关,那么的难度将会异常高,甚至导致最终的功亏一篑。
本题的硬件并不多,主要有五个:1.红色 / 绿色激光笔;2.二维云台;3.白色屏幕与支架;4.主控(选自己熟悉的就好);5.摄像头(OpenMV / K210 / M2DOCK 等)
要说的只有三个,下面主要说一下。
激光笔
基础要求1,2对激光笔的要求不高,但是基础要求3,4比较高,因为功率低的激光笔无法在照射到黑色电工胶带的时候让摄像头识别到,这对使用闭环控制造成了比较大的影响。但其实也不是不行,你可以设计成,当无法识别到激光落点时,认为其就在黑色电工胶带上,无需调节。
二维云台
本题的硬件最大难点其实在这里,普通的舵机无法保证高精度,这里简单算一个数学的解三角形问题。
(图为随手画的,比例/角度不对请忽略)
即当角度偏差 α = 1 °
时,激光射到距离 b = 1m
远屏幕会有多少偏差?很显然,通过解三角形能得出a = 0.0175m = 1.7cm
,距离基础要求1,2的2cm,基础要求3,4黑色电工胶带宽度 1.8 cm 已经非常接近了。因此可以很清楚得出电机的精度要求较高。另外为了能尽可能节约时间,应当选择自身带有编码器(最好带零点的),或者是内置控制芯片(即给指定角度就可以转到指定角度)的电机。
这里给几个解决方案:
-
市面上可以直接买到的成品高精度舵机
价格不低,学校可能没有存货,顺丰也要时间
-
步进电机+减速齿轮
大多学校都有步进电机
-
普通舵机+减速齿轮
其实这一题需要的转动角度范围不大,有90度足以,可以用180度舵机+2:1齿数比的减速齿轮,或者270度+3:1的,但实际效果未知,理论上确实可以有效提高精度的
摄像头
我们队伍使用的是 K210 ,尽管效果勉强过得去,但还是感觉很差。原因还是K210的分辨率(320x240)较低。在红色激光系统中,距离 1 m 左右,拍到的黑色电工胶带只有不到十个像素点的宽度 。至于为什么不拉近摄像头,主要是两个原因:1.遮挡了激光射在白色屏幕上;2.太近了识别不完整整个白色屏幕。
另外要注意摄像头镜头的畸变问题,还有摄像头位置导致的投影变换问题。
而在绿色激光上更差,拉到限制范围的最近位置,都只能拍出来四个像素点。原因也包含了激光功率太低,但也不重要了,因为发挥1,2由于各种场内场外因素,最终导致时间不够选择了放弃。
算法
这里主要是解决下面两个问题从而引出了算法问题:
- 云台角度与屏幕坐标的关系
- 摄像头图片坐标与屏幕的关系
下面详细说说,欢迎大家来一起讨论。
云台角度与屏幕坐标的关系
现在假设你能控制云台的角度(这就是为什么要带编码器的原因),然后我们就可以简单通过数学计算实现坐标的转换,下面是推导过程:
我们先简单地看水平面上的部分,求屏幕的坐标实际上就是a的值,现在我们已经知道了 b = 1m
,以及角度
α
,很显然这就是一个解三角形问题。高中知识轻松知道:tan α = a / b = a。
竖直面也差不多,不在多说。
这里讲几个注意的点:
- 要确定坐标系,我是将屏幕中点确定为原点建立直角坐标系的,这样可以方便的表示坐标
- 要分清楚屏幕原点与激光原点(激光垂直于屏幕照射在屏幕的点)可能不一样(取决于你激光是否在硬件上架高到与屏幕原点相同高度),不一样的时候在写控制代码的时候,可以手动加上一个相对位置。
- 大多数语言的
math
库中的tan
函数和atan
函数之类的角度函数都是以弧度为单位,需要将度数手动转弧度。
摄像头图片坐标与屏幕的关系
先看已有条件:
-
能通过角度转换精准控制激光到指定现实坐标
-
图像识别能够准确识别激光的落点,可以知道激光在摄像头图像的坐标
因此可以较为容易得想到了通过控制激光落在现实坐标,让图像识别获取图像坐标,重复多次得到多组数据,最终通过数学计算建立两个坐标系的映射关系。其原理与电阻触摸屏校准
相同,公开的校准算法也存在很多。可以自行搜索查看,我便不再重复写了。
结束的话
本次参加了电赛,确实是难忘的经历,四天三夜,加起来的睡觉时间估计也就十个小时左右。但很不可思议的是,我依旧能精神饱满的投入做题目,而没有感觉到困。这几天常在想的一句话是:又是没有猝死的一天。