当前位置:   article > 正文

【大陆ARS408毫米波雷达】一种利用串口解析雷达数据的方法_使用can读取毫米波雷达数据

使用can读取毫米波雷达数据

硬件平台:ARS408毫米波雷达、can转485转换器、485转串口转换器

软件平台:Windows10、python3

本篇博客实现的功能:

一、通过两个转换器将毫米波雷达的原始数据传入电脑端的串口中

二、再将此数据经过python文件处理得出有效目标探测信息

一、硬件连接

本文中的雷达是利用can协议进行数据通讯,初次接触毫米波雷达,并不清楚如何进行can协议解析,故用曲线救国的方法,将can口转为串口进行数据接受和解析。

首先,毫米波雷达本身can口连接一个can转485转换器

其次,再用485转串口转换器连接到PC端

注:上述设备均可在淘宝购得。

二、软件编写

软件采用python语言。

  1. 首先解决打开串口、接收数据:

运用serial模块

转换为hex显示

  1. import serial
  2. import binascii
  3. def byte_to_hexStr(byte):
  4. return binascii.hexlify(byte).decode('utf-8')
  5. def get_serial(): # 串口数据处理+接收
  6. return byte_to_hexStr(ser.read())
  7. ser = serial.Serial("COM3", 115200) # Open port with baud rate
  8. print("running")
  9. while True:
  10. data = get_serial() # ser源读取数据
  11. print(data)
  1. 解决数据解析:

依照此款毫米波提供的技术文档进行数据解析

文档中的内容如下:

代码如下:

  1. def circular_shift_left(int_value, k, bit=8):
  2. bit_string = '{:0%db}' % bit
  3. bin_value = bit_string.format(int_value) # 8 bit binary
  4. bin_value = bin_value[k:]
  5. int_value = int(bin_value, 2)
  6. #print("取低位:", bin_value)
  7. return int_value
  8. while True:
  9. #雷达object报头“06 0b”,共9位
  10. if get_serial() == "06":
  11. for i in range(9):
  12. list.insert(i, get_serial())
  13. if list[0] == "0b":
  14. print("有效数据", list[0:9])
  15. #处理有效数据,转为目标信息
  16. id = int(list[1], 16) # ID_wei = list[1]
  17. x1 = int(list[2], 16) # X_Dist_1_wei = list[2]
  18. x2 = int(list[3], 16) # X_Dist_2_wei = list[3]
  19. y1 = int(list[3], 16) # Y_Dist_1_wei = list[3]
  20. y2 = int(list[4], 16) # Y_Dist_2_wei = list[4]
  21. xs1 = int(list[5], 16) # X_Speed_1_wei = list[5]
  22. xs2 = int(list[6], 16) # X_Speed_2_wei = list[6]
  23. ys1 = int(list[6], 16) # Y_Speed_1_wei = list[6]
  24. ys2 = int(list[7], 16) # Y_Speed_2_wei = list[7]
  25. dyndrop = int(list[7], 16) # DynDrop_wei = list[7]
  26. rcs = int(list[8], 16) # RCS_wei = list[8]
  27. X_Dist = (x1 << 5 | x2 >> 3) * 0.2 - 500
  28. Y_Dist = (circular_shift_left(y1, 5, 8) << 8 | y2) * 0.2 - 204.6
  29. X_Speed = (xs1 << 2 | xs2 >> 6) * 0.25 - 128.0
  30. Y_Speed = (circular_shift_left(ys1, 2, 8) << 3 | ys2 >> 5) * 0.25 - 64.0
  31. DynDrop = circular_shift_left(dyndrop, 5, 8)
  32. RCS = rcs * 0.5 - 64.0
  33. print('id:', id, 'X位移:', X_Dist, 'Y位移', Y_Dist, 'X速度:', X_Speed, 'Y速度:', Y_Speed, 'DD:', DynDrop, 'RCS:', RCS)
  34. else:
  35. pass

完整工程,点击此处下载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/288037
推荐阅读
相关标签
  

闽ICP备14008679号