国赛----可见光室内定位

来源:互联网 发布:安卓系统编程入门pdf 编辑:程序博客网 时间:2024/04/27 21:49

初期试探

拿到题目后,反复读了题目。首先队内结合网上资料形成了两种方案,原理相同就是利用光信号到达的强度来定位。两者差距在于算法不同而已,一种利用计算得出位置,另一种就是经过测量得到一种位置与光强对应的表,然后通过查表得到位置。

方法

产生三个不同频率的方波作为信号驱动三个LED灯发亮,然后再用光电二极管接收。(这里光电二极管、光电三极管、光敏电阻都考虑过。我们的光电三极管识别角度太小,光敏电阻形状不规整,容易造成旋转不对称不利于计算和精度的实现)。接收到的信号经过FFT(快速傅里叶变换)将频率幅度信息还原回来,就像下图
FFT图
这是我做过的最漂亮的一次,之后做的是后都有很大的杂波。

我们想通过不同频段对应幅度与距离的关系,确定LED距离传感器(光电二极管)的位置从而实现定位。

但这些是在极度理想的情况下,事实上灯的亮度很难保证是一个定值,这种装置也不一定具有旋转对称性(距离相同,不同方位强度可能不同),二极管以及发光装置都存在这一定程度的不对称性。
根据实际的测试发现,FFT的结果有很大的抖动,相同的测试环境下幅值甚至会有30%的差别,当然这里有一些是我们自身做的不到位,但是这种方法经过实验证明精度十分的堪忧。于是我们舍弃了这种方法。

最终方案—-摄像头定位

上一个方法我们尝试了接近了两天,最后抛弃了。于是我们的时间仅剩下了一天半,我们有先见之明提前买了摄像头当我们宣布上一个方案死亡时,我们就去尝试了摄像头的方案 摄像头是openmv 附带一个F7的芯片作为处理器,内部跑Python代码。
这里写图片描述
剩下的就是算法

算法

核心是定位到光源的位置。然后自己(传感器)的位置就是图像中心的位置,已知三个点的位置和自已与三个点的相对位置,剩下的计算就不难了。

障碍

当然实际上不可能只有这么简单,但也不难克服
我们的方案是,让摄像头的方向固定,然后利用算法,消除一些固定不准确造成的误差
1. 摄像头旋转造成的误差
2. 摄像头位置不水平造成的误差
3. 摄像头没有拍到全部光源,特殊情况的处理
4. 外界光源的干扰

前两个使用算法消除,后两个则是考虑到漏光面只有一处,还有相对的光源几何关系来消除。

原创粉丝点击