21年电赛无人机G题思路

21年电赛结束了,我们选择的题目是无人机G题。通过题目也能感受到今年的难度,在这里旨在为大家提供一个G题的解题思路和方案。

读完题目,可以发现主要有两个难题需要解决
1.飞行路径问题(如何确保飞行能覆盖全部播撒区域)
2.视觉识别问题(如何识别到条形码和入口以及播撒区域的问题)
而这两个问题正好对应了该题目的基础部分和发挥部分

对于第一个问题,我这里有一个方案可供参考。首先我们看到题目中给出的区域

21年电赛无人机G题思路_第1张图片
我们可以将作业区地图抽象化,设置出一个二维数组,而作业区中的每一个单元格则会成为二维数组中的一个元素。设置以下规则:
1.已经通过的地区设为1
2.尚未同通过的地区设为2
3.将不可通过的地区设为0
这样我们就将该地图抽象为了一个二维数组,将地图抽象化的意义在于接下来的路径算法。

在程序中抽象化的“地图”:

21年电赛无人机G题思路_第2张图片
实际设置数组时建议外圈再铺一圈0,以便于算法的判断。A点之所以设置为1是因为飞机的起始点是A,默认已经经过该单元格(元素)。

下面引入该算法,以下是该算法流程图:

Created with Raphaël 2.3.0 开始 更新自身位置并将该位置元素置1 前相邻元素是否为2? 向前飞直到走到下一个单元格 右相邻元素是否为2? 向右飞直到走到下一个单元格 后相邻元素是否为2? 向后飞直到走到下一个单元格 左相邻元素是否为2? 向左飞直到走到下一个单元格 当前位置相邻元素是否有A起始点? 结束 yes no yes no yes no yes no yes

以下是该算法运行后理论上的飞行轨迹。
21年电赛无人机G题思路_第3张图片
该飞行路径可以达到对播撒区域的全覆盖效果,再辅以openmv识别颜色色块进行激光打点就可以达到基础部分+发挥(1)的全部要求。

这个方法唯一有难度的地方就在于飞机如何知道自身已经进入了下一个区域?这里题目中提到每个地区是50cm的正方形,所以我们可以通过判断x和y方向上距离的增减来实现位置更新。例如,我们假设上方为x,右方为y,我们位于起始处A,在程序中“地图”的坐标为a[2][1](上图中s)。我们通过传感器检测到了y方向上变化了50,那么我们可以更新自身当前位置为a[2][2](上图中e)。这里比较依赖传感器的精度,如果传感器存在误差,势必会造成x和y方向上误差的累积。所以这里尽量使用精度高的传感器,要想方设法获取x和y轴上的变化量。

发挥部分的(2)(3)挺简单的,就是一个定杆+识别条形码,这里建议使用云台,在完成发挥(1)回到A点返航的时候可以抬起openmv进行定杆前进识别条形码的操作,我们测试过大概20cm处也可以识别到条形码。最后openmv低头定点偏移降落一气呵成。

最后,如果有条件上nano、双目、激光雷达就尽量上,openmv视觉最后我们差点心态做崩,不过还好也是勉强可以做的。

你可能感兴趣的:(单片机,stm32)