任务三挺有趣的,难度相对比较大哈。
任务内容:S1从起点出发,进入迷宫进行寻宝。每找到一个marker加1分,落入陷阱(进入到陷阱所在的线路上)减1分。S1成功到达终点视为完成。下面是任务的地图。
任务规定,不能存任何信息,只给指南针,我是用底盘的朝向来完成的。
视频一是任务视频,视频二是抗干扰视频,怎么误导都可以回到终点。
程序空间又不够用,这个程序再增加一句话就运行不了了。
简单说明下我的程序思路:S1启动后就朝向为0。巡线前进,碰到分叉(非十字路口)路口分三种情况:一个是刚出发时的分叉,一个是进入终点的分叉,还有一个是迷宫内的分叉。刚出发时朝向是0,碰到路口就左转。迷宫内的分叉统一向右转,标签都击倒后,当朝向45度时碰到分叉就是终点。中间间隔一定时间扫描标签。剩下的就是优化巡线了。
思路就是这样,难点是怎么用不稳定的识别模块,做出成功率高的程序。怎么选择合理的速度,速度太快,识别变差,速度太慢,时间太长。怎么确定参数来区分十字路口和分叉路口。最后还有异常处理程序,万一走到迷宫内部,怎么回到原路。万一走出迷宫外,怎么回去。
下面截图包含完整程序。
提交任务时发现,我这个程序是默认已知迷宫内的路线都是方格,并和起点朝向相差45度。