大家好,又见面了,我是你们的朋友全栈君。
买了一个rplidar A2, 做工不错,挺漂亮的,更重要的是可以软件启动停止,噪声很小,而且反射检测灵敏度比较高(可以扫描到毛玻璃, 有些差的激光雷达检测不到毛玻璃上的反射)。
使用之后感觉很不错。马上就有其他部门的同事过来看热闹,问这问那。于是本人热心讲解了一番。不过感觉他们还是那么萌萌的表情。
在此,简单分享一下rplidar A2这种激光雷达的原理和重点技术。
rplidar A2 是一种三角测距原理激光雷达,原理和TOF激光雷达不同。 TOF激光雷达是根据测量光的飞行时间来计算距离的。而三角测距激光雷达是通过摄像头的光斑成像位置来解三角形的。
于是,先画个草图介绍一下原理
如上图所示, 01是激光发射器, 射出去的激光由红色虚线表示, A,B,C是三个反射点。02是摄像头光心轴, 绿色三角形代表用来捕捉反射光斑的相机模型。这张图画的是经典小孔模型。 A,B,C的成像点分别是A‘,B’,C‘. 由于激光发射器和相机安装的相对位置是已知的, 也就是说相机的光心轴和激光(线)的角度已知(本图画的是90度), 线段0102长度已知, 角0102A也已知(通过成像点在像平面的位置可以知道), 于是问题变成了一个“角边角问题”, 上过初中的同学都应该知道, 已知“角边角”, 三角形有唯一解, 于是01A的长度是可以算出来的。 同理, B,C 两点距离01的距离也是可解的。
原理是不是很简单~
细心的同学会发现,如果这样安装,相机成像只有一半的, 太浪费了嘛。
于是,调整相机安装方式,这样大部分地区都可以成像了吧!
这些相机模型都还是小孔模型,有没有更好的方法利用相机的sensor来采样呢
聪明的同学又会想到如何将整个量程均匀分布在相机sensor上, 于是可以换透镜,于是有了下面这个图, 圆形区域代表透镜,(我画的是常见的圆形表示, 但实际上这个透镜应该有点凹,效果才会理想)。由于rplidar是2维的,所以成像sensor做成长条状就够了。
以上相机采样都是同步瞬间完成的。
好了, rplidar激光雷达的三角测距原理讲完了。接下来的,会有同学说, 我知道距离了, 可是这个雷达一直在转我怎么精确知道它的角度呢。
还好当年上学比较专心,稍微想想不用拆都知道使用编码盘啦。 光电编码盘 可以直接获取旋转角度。比如给它装个8位编码盘,那么就可以有512个刻度(通常叫光栅编码盘,一般都有上千个编码。例如激光雷达UXM-30LX-EW 用的就是1440的编码盘)。每次电机旋转,触发光电编码器编码变化,就触发激光采集一次(这样省功耗)。调好时间延迟,就可以精确知道每个角度的距离。
这个激光雷达还有一个需要注意的地方, 它的数据采集是在旋转机构上做的, 那么需要把数据传回底座,必须采用无线/光通讯的方式回传(光编码也算是一种吧)。 而且要控制供电,用有刷肯定不好。需要像无刷电机那样给转子供电。所以但凡做了激光雷达的公司都会宣传掌握了关键光磁融合技术等等之类的。其实跟无刷电机大同小异啦。
从上面的原理分析,我们可以得知,类似rplidar这种激光雷达量程是很难做到很远的。通常有效都是5,6m。此外,它也很容易被干扰, 如果使用同频率的光源让相机sensor成像上有多个光斑,或者过曝,或者多个雷达相互干扰,那么就无法得到真实数据了。所以几乎所有的三角测距激光雷达都不能在太阳光直射下工作。 而TOF激光雷达通常是加了编码的,可以在很大的噪声背景下获取真实信号,所以可以在太阳光直射下使用, 也可以相互抗干扰。
如果需要多机协同工作,而且每个机器安装高度相近的话, 类似rplidar A2这种激光雷达会相互干扰(干扰概率多大呢?这跟它们的FOV有关系啦,FOV越大说明量程可以做大,但也意味多个雷达工作时容易受到干扰)。如果非要避免干扰的话,必须使用通讯方式,让某一个雷达停下了,分时使用,感觉这样太笨了吧,建议干脆安装位置故意错开。来来来,看看FOV究竟又多大,见图:
最后两张图反映了两个信息:
1》镜头里面添加了滤光片,所以可见光都被反射回来了,所以像镜子一样(圆圈里的图像是我的华为手机摄像头,双摄头)。但指定波长的红外光可以穿过。
2》视角(FOV)就这么大,大家好好感受一下吧!想象一下里面有一个横着的长条sensor,再回忆一下三角测距原理,是不是感觉很简单了呢!
Good Luck~
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140869.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...