如何通过python读取氪见激光雷达KR S50数据?

氪见KRS50激光雷达是一款高性能单线激光雷达,在80%反射率下测距能够达到50m,该雷达支持udp通信,数据传输快。该雷达数据通信协议如下: 

如何通过python读取氪见激光雷达KR S50数据?_第1张图片

如何通过python读取氪见激光雷达KR S50数据?_第2张图片

 

雷达默认的ip地址是169.254.119.2,端口号是3000,因此我们可以将电脑IP地址设置为同网段下的 169.254.119.3,电脑的端口号设置为2000,具体设置方法在此不再赘述,本文只为依据上面的协议提供一种解析数据的思路,废话不多说,上程序;

 

  1. Udp通信需要依赖socket包,所以在程序最开始我们就要导入它

import socket

  1. 由于默认传输的数据是未经过处理的数据,在观察数据的时候不便于查找对应的点,所以我们可以利用下面的程序为数据添加空格:
def HexStrAddSpace(Hex_Str):

    out_data = ''

    for numb, lista in enumerate(Hex_Str):

        if(numb%2 == 0):      #此处是保证每两个字符后面加一个空格

            out_data += ' '

            out_data += lista

        else:                   #奇数位的时候将字符直接加到out_data

            out_data += lista

    return out_data.upper()
  1. 接下来与网络建立连接
address = ('169.254.119.3', 2000)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.bind(address)
  1. 接下来就是解析数据了,解析数据前要判断帧头,因为udp通信方式不提供报文到达确认、排序、及流量控制等功能,所以我们需要判断每一包数据的帧头“FA”,然后再开始进行下面数据的解析,方式如下
data, addr = s.recvfrom(2048)    #接收数据,缓冲区设置2048或以上

data1 = HexStrAddSpace(data.hex())  

data2list = data1.split(" ")     #将整合的数据加入list

data2list.remove('')   #该方法生成的list多余一个空字符,删除

listid = [i for i, v in enumerate(data2list) if v == 'FA']  #遍历列表找出FA的位置

length = len(data2list)
  1. 解析角度
dataangle = (int(data2list[startid+1], 16)*4-640)+0.25*n
  1. 解析距离
datadistance = int(data2list[startid+(2*n+5)], 16)*256 + int(data2list[startid+(2*n+4)], 16)
  1. 接下来打印输出数据
print(' %.2f 度下对应的距离 %d mm' % (dataangle, datadistance))
  1. 打印的部分结果如下

如何通过python读取氪见激光雷达KR S50数据?_第3张图片

 

你可能感兴趣的:(python,udp,开发语言)