如何利用多个环境光传感器联合判别光线方向
最近遇到一个有趣的问题,如何实现对于光线方向的判别?一般来说,环境光传感器只能感受到光的强度,无法获得光线的方向。但是经过调查,环境光传感器输出的数值除了与光照强度有关,还与照射传感器的方向有关。
如下图所示,垂直照射传感器接收平面时响应最大,而光线平行于平面时,则没有读数。可以利用这个特性,将多个传感器组成阵列,联合判别光线方向。
问题描述
现有某个位于
多个传感器间隔
传感器响应函数为
为了简化问题,这里考虑了2d的情况,并且认为传感器的响应函数为二次函数:
其中
要根据每个传感器的值
解决思路(略)
这个问题其实就是求解非线性的方程组,可以使用非线性最小二乘拟合。
最小二乘即最小化误差的平方和寻找数据的最佳函数匹配。
形式为求得数据与实际数据之间误差的平方和:
可以理解为,对于未知的函数
对于非线性最小二乘,
在这个问题中,“未知函数”由要求的未知量决定,
scipy.optimize.curve_fit 是专门用于求解非线性最小二乘的函数🥳,最后我用这个尝试了一下,效果还不错!代码放在这里。
讨论
无噪声
有一定噪声
默认迭代次数内可能无法收敛,可以手动调整 maxfev=5000
;还有,函数设置中,也避免梯度消失的情况,传感器只对入射角度在
传感器间距、数目越大,分辨率越高。如果光线位置距离传感器来说很远,那么所有的传感器获得的数值相差无几,就会导致估计得到的结果与实际差距很大,或者达到最大迭代次数仍无法求出结果。
容忍噪声的程度取决于噪声是否不会破坏传感器感光的大体趋势,即传感器读数大体上应该根据入射角度的增大而减小,如果噪声干扰了这个趋势就会无法判别。这说明,如果增大传感器间距和数目,也可增强克服噪声的能力。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人