正在上传图片(0/1)

CodeMaster第三次任务+多线识别&转角自适应==近通用算法

 4
手机看帖 6 4218
首先还是描述一下本次任务要求吧。
我对本次任务的理解是:S1面前有一条通往迷宫的路,进入迷宫的目的是找到其中放置的标签后开枪击倒,全部找到后沿出口走出迷宫。出发前迷宫中的路是什么样子的不知道,只知道迷宫中有标签、路、陷阱和出口,各个标签(包括陷阱、出口)位置和起点位置连线与起点0航向的夹角数据(相当于出发时刻的指南针角度)为已知数据。
这个任务还是很有挑战性的!!
左边是迷宫线路施工图,中间是各标点位置图,右边各标签、陷阱以及终点的方位角图
任务的具体要求,其中“不能存储距离信息和地图其他相关信息"的要求比较含糊,比如:迷宫中的路是直线还是曲线能预先知道吗?标签和陷阱都是放置在路的尽头能预先知道吗?
实际布置的迷宫,由于家里面积有限,无奈裁剪了进口和出口线路距离约20cm,但程序是按原地图写的,甲友们在未裁剪的地图上是可以顺利运行进迷宫的第一步程序的(我用局部地图试验过了)。
解题的基本算法思路:
1.巡线进迷宫,发现前方有路口时停,开启依次寻找标签和出口的循环。
2.寻找每个标签是一个单独的无限循环,直到找到后退出循环,开启下一个标签识别循环,直到终点。
3.每个无限循环的算法:计算下一个路口距离现在S1中心的实际距离,计算到达下一个路口后应该向那个方向转动多少度(以更快的逼近存储的该标签的方位角),移动到路口后,扫描(识别到标签后射击),转动之前计算的角度,计算下一路口的相关信息。循环进行直到识别到当前标签。
4.每过几个路口后、转动一定角度后调整S1姿态,以优化其在线的左右方向上处于正中间的位置,提高计算下一路口距离、转角大小的精度。
5.突破题目限制:一是假设迷宫中的路是直线,二是假设标签是放置在某个胡同的尽头,在胡同口看的话能看到。
详细请看以下的流程图
https://app.liuchengtu.com/#X8afde4f1608779417145ffc1eab892cd,qq登录的
第一步:我们先看看S1多线识别函数在不同路况下识别出的点位的分布图,其中也对比标明了单线识别函数的识别结果
进迷宫看到第一个交点时的分布图
若继续前行,枪口正好挡住交点时的分布图
在方格内的识别点位
临界情况,也是容易出错的地方,虽然识别出了三条线,但没有交点
刚过一个十字交点后
到了陷阱拐角附近
第二步:根据流程图,编写的程序代码如下。各函数的作用已经标注的比较详细了。这里要说明一点的就是下一个交点处的转角选定的思路原则:交点处的三条线与标签的方位角有一个夹角,当夹角越接近90度时,说明这条线将引导S1越快速逼近标签的方位角上。这里如何根据切线角、底盘朝向、标签方位角计算夹角、如何判断夹角接近90度需要仔细分析,这里就留给读者了(下面的程序中写出了方法,可以倒推原理的)。
程序中把我调试的部分代码通过注释的形式也贴了出来,也提醒了大家怎样做不合适。
程序中尚存在的问题:
1、S1本身对自身x、y方向相对于程序开始运行时的坐标量测精度不高,程序运行时间越长累计误差越大,据此计算出的底盘中心目前的sita值到识别第4个标签时可能有20度左右的误差了(如理论上sita应该为-30度,实际根据x、y计算出来的是-10度),所以程序也做了相应处理。
2、线识别模块有时不稳定,明明是很好的多线线路确识别成单线或未识别到线,程序增加了多次识别采样取最长值的方法克服,但有时还是存在问题。
3、由于sita的误差,存在在扫描第三个标签的时候把第四个给误杀了导致第四个标签无法找到的bug。
4、运行中出现过S1在一个固定范围沿线路一直转圈圈的bug,是逻辑问题,有待后续改进。
5、运行中出现过枪口实际下俯10度,控制台的"俯仰"项确为-19度的硬件bug,因为下俯角度不是要求的-20度,故直接导致线识别出现问题,程序崩溃。这时重启S1就好了。
6、程序专注于问题的解决,为原型模块,未做简洁化和加固处理,留下一步优化吧。
7、之前的两个假设条件实际上还是事前存储了地图中的部分信息的,但一时也没找到什么好办法,先就这样吧,有待进一步优化。

    需要解释的运行现象:程序采用了角度、距离自计算、自判断算法,存在每次运行线路不一致的情况,为正常现象,耐心等待,只要线识别函数稳定,一般情况下都能找到所有标签后从出口出来的。
    甲友们如果发现我的程序算法有bug或可以改善的地方,请不吝赐教。程序中有不清楚的,也可以微信上联系讨论:cumtzd
为了稳定运行,程序采用0.1m/s的龟速运行,视频时间较长,所以用了2倍速压缩时长
最后一项,BUG提交:
1.app中关于多线函数的识别结果信息,第一个参数N官方解释说是识别的点的数量,但实际上是识别出的线的类型(即1直线、2Y路口、3十字路口)或者说是识别出的线的数量(1、2、3条),这个应该是个明显的bug。
2.Python自带的min、max函数在app的python编程中虽然也被标识为了关键字,但并不能用,程序报错“name 'max' is not defined”,这个应该也是个明显的bug吧。
3.运行中出现过枪口实际下俯不到10度,虽然要求是下俯20度,控制台的"俯仰"项检测却为-19度的硬件bug,我重启s1硬件后就好了。
评论
上传
你需要登录之后才能回帖    登录 | 注册
bakedkids  机甲大师 RoboMaster S1认证用户 2019-11-5 3#
接近完美了!这个图是要逼死强迫症的节奏啊
大疆菜鸟飞行员  Mavic Mini认证用户 2019-11-6 4#
有开源代码吗?
楼主  机甲大师 RoboMaster S1认证用户 2019-11-6 5#
没有,我都贴在贴子上了
S1 player 1  机甲大师 RoboMaster S1认证用户 2019-11-7 6#
关于多线识别的部分官方好像没更新,和我们现在的版本不一样
楼主  机甲大师 RoboMaster S1认证用户 2019-11-7 7#
S1 player 111-7 16:05
关于多线识别的部分官方好像没更新,和我们现在的版本不一样[图片]
早更新了,app不会自动更新,需要自己下载新版本的再安装
看啊wei  机甲大师 RoboMaster S1认证用户 2019-12-11 8#
这不像是一个小学生能理解的东西 啊。。。还打算买一个给小孩打发假期时间。。。
取消 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表