想用单片机直接通过串口连接激光雷达,测障碍物,该激光雷达波特率230400,是arduino的极限115200的两倍,所以要用STM32的芯片了。其数据手册说的还是不清楚,固连接电脑的串口根据测得的数据进行了解析,明白多了。串口扫描得到在数据如图:
选出其中一段进行解析如下图:
AA 55 00 28 41 AE 93 B3 EC 5E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 58 45 90 44 78 43 7C 42 A4 41 B8 40 4C 40 80 3F 00 00 00 00 DC 3E EC 3E E8 3E 58 3F 00 00 18 42 A0 41 14 42 C4 41 A8 41 68 42 A0 42 00 00
其中AA 55 为数据头部,所以单片机只需找AA 55 即可。00 代表是点云数据。 28十进制为40,代表此次的数据包中有40个点的位置数据(一般都是此值,也有其它的值,没有规律,但是此值越大结束角和起始角的角度差值也就约大,平均每个点占约0.27度,这跟设备的角度分辨率正好契合。相当于每0.28度获得一次数据,不管有没有障碍物,没有得到的是0,有的话是距离障碍物的距离值)。 41 AE 代表此包数据的起始角度,低位在前,高位在后,那么值是AE41转成十进制为44609,根据说明书(见后面的说明书图),要右移一位(相当于十进制除以2)然后除以64,那么此角度约为:44609/128=348.508度(这是一级解析的值即错略的,后面要二级解析即精确值见后面说明书的图);B3 EC代表此包数据的结束角度,低位在前,高位在后,此角度约为:45971/128=359.148度(这是一级解析的值即错略的,后面要二级解析即精确值见后面说明书的图);此包数据总共占了10.64度的角度。EC 5E是校验位不用管它。后面的是数据,没两个字节一个点的距离数据,此包是40个点所以80个字节(距离计算简单,见见后面的说明书图)。
AA 55 01 01 1D AE 1D AE AB 54 00 00
紧挨着前面的这包数据比较有意思,这就是说明书中的零位数据,并不是0度角(数据线的方向,见说明书)的位置数值,也不是0距离值(没障碍物,或障碍物距离激光雷达小于300mm)的位置,其它的包你也看到了,0值(没障碍物,或障碍物距离激光雷达小于300mm,俺亲自测得的,要注意这个问题)多的很。至于意义,那就搞不懂了,很少出现,我截图里就一次,反正按说明书说,此种数据就一个值已经用第三个字节01表明(此字节,其它正常的好多点云的是00见上个数据包和说明书)。其中AA 55 为数据头部,所以单片机只需找AA 55 即可。1D AE 1D AE分别代表代表此包数据的起始角度和结束角度,这里都为1D AE即44573/128=348.227度。AB 54代表校验位不用管它。00 00代表此唯一一个点的距离,为0。
其它从前到后的解析计算如下图(15十进制为21个点;16为22个点):
此雷达公司网址;eaibot.com,说明书如下。
跟单片机的TX和RX对调着接是基本常识,我就不说了。
我通过电脑的串口发十六进制A560,雷达就转且发送扫描数据到电脑了。我最后又发了A565雷达就停了,不转且停止发数据到电脑。
这里都不用管,一次开机只发一次,后面就一直是数据包了,所以0XA55A根本就不用监听。
上表很重要,是单片机需要关心的。
图6不用管它,就是右移一位解决问题的意思。