关于RoboMaster2019能量机关任务

一、前言

关于2019年RoboMaster(全国大学生机器人比赛)中的能量机关,也就是“大风车”,作为2018年赛季参赛者,一开始看到这道题的时候,大概有两个感觉:(1)视觉难度降低了(2)弹道要求提高了。估计很多人都有这种感觉,因为没了手写数字的识别,变成了一个8m定点打靶的任务,靶子的识别,相信做过自瞄的同学,会认为难度不大,关键是是否能打中。这么分析,今年的视觉难度真的就降低了吗?可能没那么简单。

有幸参与了官方赛事预研项目,参与了能量机关任务技术调研(实际上就是进行能量机关任务技术研发,没啥技术含量)。

二、能量机关算法方案

拿到题目,第一步大概是审题,脑海里需要构建一个能量机关任务的一个轮廓,有了2018年参赛经验,不难得到这么一个流程:

获取图像——>图像处理——>运动预测——>转动云台及射击

  • 获取图像:使用摄像头获取能量机关图像
  • 图像处理:识别算法部分,识别一些关键元素,如装甲板,旋转中心,旋转臂的灯效种类。
  • 运动预测:由于大风车是在运动,还需要进行大风车运动预测,同时子弹的运动不是一条直线,也需要进行子弹弹道补偿。
  • 转动云台及射击:预测过后,就能得到云台所要旋转的pitch,yaw角,发送给stm32底层,完成控制。

step1.获取图像

关于获取图像步骤,即需要考虑相机的要求,主要有两个因素需要考虑:

  • 相机安装位置
  • 相机镜头焦距选择

相机安装位置选择:

  • 由于大风车在固定位置旋转,摄像头安装在底盘上,底盘保持不动,则摄像头相对大风车是静止的,可以大大简化图像计算,并且避免了不必要的干扰。
  • 相对于安装云台上,提高了准确率和速度。

相机镜头焦距计算
相机参数

  • 采用1/2” CMOS传感器芯片,130万像素分辨率
  • 像素尺寸 4.8μm×4.8μm
  • 分辨率 1280(H)×1024(V)

焦距计算公式:

focal_len.jpeg

具体计算:

  • 风车半径为0.8m,则大小为1.6*1.6m,需要图像留有余量,方便机器人对位,这里视野取目标的3倍,则视野大小应为4.8 *4.8m。
  • 大风车距离桥头(镜头)距离为8m
  • 相机尺寸为4.8um*1024=4.8mm

\frac{800*4.8}{480}=8mm
所以,最终,考虑选择8mm的镜头。

step2、图像处理

根据比赛规则,能量机关具有大量发光特征,应该充分利用,可以方便视觉进行处理,相信做过自瞄算法的同学一定不会陌生。这里可以参考官方ICRA步兵开源项目RoboRTS( https://github.com/RoboMaster/RoboRTS ) ,其中的roborts_detection 包中的armor_detection/constraint_set下的相关识别算法可以借鉴。

图像处理结果大致如下:(仅供参考)

red.png

threshold.png
  • 第一幅图为原图。
  • 第二幅图为处理后的二值图,过滤掉背景噪音后,在二值图上可以方便的提取关键元素。

提取关键元素:

  • 装甲板:提取装甲板,后续可以使用pnp算法解算位置,得到打击目标位置。
  • 旋转臂:由于需要区分激活状态的旋转臂和未激活的旋转臂,所以需要提取该部分元素进行区分。
  • 旋转中心:发光R,由于大风车处于旋转状态,需要进行圆周预测,那么圆心位置是必不可少的。

如何提取关键元素:

  • 相信大家在二值图上已经肉眼可见这些关键元素了,而且这些元素非常独立,非常容易进行提取。
  • 这个就和自瞄算法提取装甲板用的方法一样,如果是使用opencv,可以使用两个非常强大的函数 findcontours()和minAreaRect() ,然后使用约束条件进行匹配选择,如长宽比,大小,角度等。当然这只是其中一种方法,限于才能,只能给大家介绍这一种了。

上述列举的主要的普通关键元素,也不是所有关键元素都是必须的,也可以自己构建其它关键元素,如不使用装甲板,提取整个旋转臂元素,利用旋转臂来做PnP解算位置也是可以的。

step3、运动预测

大风车运动模型:
由于大风车旋转,对于识别到的打击目标,需要进行预测才能真正的打中目标。大风车做匀速圆周运动,需要获取圆周运动的圆心(待测),半径(已知)和速度(已知),通过建立大风车运动模型来进行预测。

这里给出几种预测方案:

  • 方案一:记录多个装甲板点(开始只进行图像处理),建立装甲板运动在3维空间的圆的方程,从而进行预测。
  • 方案二:平面简化版模型,在图像上,得到大风车中心点,得到装甲板目标中心,直接得到图像平面圆方程,从而进行预测。

由于方案一比较复杂,这里为大家介绍一种简单近似方案,即求平面圆的方案二。
二维简化模型:
\begin{array} \\ 对于目标点(x,y),假设大风车中心点(cx,cy)旋转角速度为\omega 。\\ 则经过时间t,旋转角度为\theta=\omega t \\ 目标点向量为\vec{v}_{target}=(x-cx,y-cy)\\ 旋转矩阵有\\ R= \begin{bmatrix} cos\theta&-sin\theta\\sin\theta&cos\theta \end{bmatrix} \\ 即预测向量为\vec{v}_{predict}=R\cdot \vec{v}_{target} \\ 预测点为p=(cx,cy)+\vec{v}_{predict} \end{array}

并且,进一步简化模型,即固定预测时间t,从而固定的预测旋转角度theta。

  • 固定预测时间t:在stm32端实现,采用一个定时器,固定延时发射子弹。

方案二的优、缺点很明显,

  • 优点:简单,便于实现。
  • 缺点:对于打击能量机关的位置很敏感,必须正对能量机关,不正对会带来预测误差。

子弹抛物模型:
由于距离较远,必须考虑重力对子弹的影响,可以建立重力模型,对子弹进行建模,从而对云台所需要的仰角进行补偿。

在官方ICRA步兵开源项目RoboRTS(https://github.com/RoboMaster/RoboRTS) 中,有一个一个抛物线弹道修正模型,可以进行参考。

在这里,依然采用简化模型,主要考虑到是定点打靶,所以重力偏移变化不会太大,所以给出一下方案:

  • 建立一个pitch偏移表,通过偏移量查表来进行补偿。

方案总结

大致的能量机关方案设计如上所述,总结一下,就是下面一张(看似简单的)图。


power_rune.png

三、误差分析

在经过测试后,对能量机关打击任务进行了分析,发现打不中目标的概率较大,对于打不中目标给出合理解释,对于误差来源大概从以下几个方面分析:

  • 相机标定误差
  • 相机安装位置误差
  • 算法误差(图像识别与单目定位)
  • 弹道误差

1.相机标定误差:

由于涉及视觉测量,相机参数在进行视觉测量中,具有重要的作用,其误差会直接导致视觉测量误差。所以,需要减小其相机标定误差。

减小误差方法:

  • 多次标定,去掉偏差较大的标定结果,取中位标定结果。

2.机机安装位置误差:

由于相机安装在底盘上,相机与发射云台有个坐标变换,包含一个平移向量和一组旋转参数,理想安装位置,相机与云台安装没有旋转关系,只有平移关系。

  • 平移向量直接采用直尺测量,精度在mm级别,不会引入太大误差。
  • 旋转参数选择参数采用欧拉角方式,理想状态均为0,由于误差,其真实值并不为0。
  • 目前,通过经验补偿方式减小误差

3.算法误差

目前能量机关算法,通过识别装甲板矩形目标,采用PnP定位算法,来对目标进行定位。
在动态能量机关测试中:
装甲板矩形的像素大小大概为30×56,在识别过程中,像素波动在1个像素左右

  • 定位深度距离误差估计为8m*\frac{1}{50}*100\%=16cm

同时使用三维数据可视化软件,将所有定位结果画在3D散点图上,如下图所示:

front_view.png
up_view.png
  • 第一个是正视图:理想是一个圆,效果较为理想。
  • 第二个是俯视图:理想是一条直线,效果不理想。

所以,算法测量误差主要来源于深度信息的误差,经过测量,最大误差在基本上在20cm左右,与之前估计的16cm相差不大,定位的像素不稳定,这是误差的来源。

  • 对于单目测距来说,远距离识别误差大,很大原因是被测量物体分辨率不够,像素波动对于定位误差影响很大。
  • 可以考虑其他的一些高精度定位方案,如双目定位等,来减小算法误差。

4.弹道误差

由于能量机关需要射击。弹道误差对于能量激光的实现也影响重大,在进行射击测试时,发现误差主要来源与两个因素。

  • 机械因素:包含枪管等子弹发射经过的机构设计,导致子弹发射并不是平行于枪管中轴线,而形成散射的效果。
  • 射速因素:由于远距离设计,子弹并不是直线发射,所以,还受发射速度的影响,不稳定的发射速度也会影响弹道的上下偏移。

射速影响理论计算:(理想抛物线模型)

\begin{array}\ 抛物线模型: \begin{cases} x=vcos\theta \cdot t\\ y=vsin\theta\cdot t-\frac{1}{2}gt^2 \end{cases} \\ 则y=xtan\theta-\frac{1}{2}g\cdot \frac{x^2}{v^2\cdot cos^2\theta} \\假设速度v1存在微小波动,变成了v2.\\ 则\Delta y=y2-y1=\frac{gx^2}{2cos^2\theta}(\frac{1}{v_1^2}-\frac{1}{v_2^2})\approx \frac{gx^2}{2cos^2\theta}\frac{2(v_2-v_1)}{v_1^3}= \frac{gx^2\Delta v}{cos^2\theta \cdot v_1^3} \end{array}

在距离8m,速度为23m/s的情况下,计算速度波动1m/s情况下:

  • 在0度仰角下,偏移误差为5cm左右
  • 在25度仰角下,为6cm。

误差总结

总的来说,能量机关任务实现不了,误差是来自多方面原因的。

  • 相机标定误差和相机位置误差是绝对误差,是可以通过修正方式进行补偿的。
  • 算法定位误差(识别像素波动)和弹道误差是随机误差,只能通过改变手段来减小误差。

同时由于子弹射击目标,由于目标具有一定大小,是允许一定误差的,在进行方案设计时,需要考虑各个因素引入的误差,并不断减小误差。

四、结果与总结

a.结果

目前,在比较稳定的弹道下,测试了静止能量机关和动态能量机关(正常状态),可以达到的精度如下:

  • 静止能量机关:平均击中一个目标所消耗子弹1-1.5。
  • 动态能量机关:平均击中一个目标所消耗子弹2左右。

这个结果虽然不是很好,但是还算勉强完成了能量机关任务。

b.关于赛题的总结

对于2019年的能量机关,或许视觉算法真的不难,视觉难度真的降低了,但是确实是一个好的题目,整体难度并没有降低,比较锻炼人的综合能力,给了我们很大的空间去分析一个问题。

在实现能量机关算法的过程中,由于本身存在的一些误差,包括一些步骤由于采用了近似处理或近似方案而引入的误差,导致最后实现的结果并不是太乐观,没法达到百发百中,特别对于动态,效果不是很理想。

其中的误差分析,本文分析的还比较粗略,远远达不到工程要求,甚至还有一些错误,不过,在分析的过程中也逐渐深入理解这个任务,不同于看题目一开始,知道这个题目难,但不知难在哪里,不知道从哪一步解决问题,拿到题无从下手。

c.关于技术的总结

在做能量机关任务时,并没有用到什么高深的理论,高深的技术,学到的更多的是工程分析,不至于盲目下手,而无从下手,在做技术的过程中,也不是一开始就分析到位的,也发现自己很多低效的开发,缺乏一个分析流程,等到无从下手时的一步,才开始分析一步,没法做到先分析,再解决问题的流程,不过这确实是需要经验积累的,做这个项目也相当一次技术积累吧,也确实从这个任务学习到了一些开发经验。



(本文遵循开源协议:CC-BY-SA 4.0。首发于RoboMaster论坛

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容