项目:超声波雷达解析
一、实验背景
人工智能(Artificial Intelligence,AI),是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能可以对人的意识、思维的信息过程的模拟。AI在无人驾驶技术中有着丰富的应用,许多AI算法在无人驾驶技术中取得了较好的效果。AI在无人驾驶技术中的应用主要可分为在无人驾驶环境感知领域、决策规划领域和控制执行领域的应用。
新工科背景下,工科教育需要进行教学改革,需要将现有的工科专业课程和人工智能新技术结合,培养符合新工科要求的人才,而无人驾驶车正是实现这种结合的最好载体之一。
无人驾驶车通过自身搭载的传感器如GPS(Global Positioning System,全球定位系统)、激光雷达、毫米波雷达、超声波雷达、摄像头(主要有单目摄像头和双目摄像头)等获得自身定位及周围环境的信息,如障碍物状况、道路状况等,然后进行相应的决策规划,并对车辆进行控制,最终实现车辆的安全自主行驶。
超声波雷达采用超声波测距原理,由超声波探头发出超声波,遇到障碍物,产生回波信号,传感器接收到回波信号后经控制器进行数据处理,然后计算出车体与障碍物之间的距离,判断出障碍物的位置,提供给无人车进行停障或避障。
二、实验目标
掌握超声波雷达数据的获取方法;
掌握超声波雷达数据的预处理并显示;
提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,锻炼学生的工程实践能力,并在此过程中培养他们严谨的科学态度和良好的工作作风。
三、实验内容
获取超声波雷达的数据,并进行数据的解析处理。
四、实验环境
软件环境:Ubuntu16.04系统、ros-kinetic、Roboware、Pycharm、pyqt5
硬件设备:小旋风第四代无人驾驶车,标配镭神16线激光雷达、大陆ARS408毫米波雷达、超声波雷达、魔客士单目相机、联适导航R60北斗/GNSS接收机。
【知识链接】
1超声波雷达分布示意图
在软件中表示的1探头、2探头、…、8探头分别对应图1中1到8的位置。
图1超声波雷达分布示意图
2超声波雷达基本组成
倒车雷达主要由超声波传感器、控制器和显示器或蜂鸣器等组成:
超声波传感器:主要功能是发出和接收超声波信号,然后将信号输入到主机里面,通过显示设备显示出来。
控制器:对信号进行处理,计算出车体与障碍物之间的距离及方位。
显示器或蜂鸣器:当传感器探知汽车距离障碍物的距离达到危险距离时,系统会通过显示器和蜂鸣器发出警报。
3超声波雷达工作原理
超声波雷达在检测时,利用超声波原理,由装置在车身四周的超声波探头发送超声波,撞击障碍物后反射此声波,从而计算出车体与障碍物间的实际距离。
4超声波数据协议说明
报文名称超声波雷达探测结果
报文标识0x18F024D1帧类型扩展帧
报文长度8字节参数组编号61476
发送节
BAU接收节点工控机传输周
100ms
数据域信号
名称
长度
(bit)
数据类
描述
数据
1008unsigned20cm
数据范围:0-
195
195:表示超出
量程([0-195]内
无障碍)
其他值无效
数据
2188unsigned20cm
通道2,数据1
描述
数据
32468unsigned20cm
通道3,同数据
1描述
数据
43248unsigned20cm
通道4,同数据
1描述
数据
54328unsigned20cm
通道5,同数据
1描述
数据
65408unsigned20cm
通道6,同数据
1描述
数据
76488unsigned20cm
通道7,同数据
1描述
数据
87568unsigned20cm
通道8,同数据
1描述
【实验任务】
任务描述
本实验要求根据所学过的理论知识编写c++&python程序,通过学习CAN 协议,实现对无人车底层的超声波数据读取,并对数据进行解析与显示。
任务目标
(1)通过串口接收的数据,对接收到的16进制数据进行处理转换成字符串数组。
(2)通过超声波串口数据格式进行对超声波探头号以及测量距离进行分类存储。
(3)提取八个探头的距离值进行一行显示。
任务分析
在在线状态下需对接收到的实时数据进行接收并解析。
任务实施
步骤一:获取数据
通过回调函数,获取到从底层发送过来的超声波
def callback(self,receive_msg):
ult_data=receive_msg
self.ultra_list=ult_data.ultrasonic
def listener_header(self):
rospy.Subscriber("ultanalysis",receive_msg,self.callback)
rospy.init_node(self.NAME,anonymous=True)}
步骤二:提取探头的距离值进行一行显示
def label_show(self):
ultra_str_list=[]
for i in range(len(self.ultra_list)):
ultra_str_list.append('0x'+str(self.ultra_list[i]))
self.lineEdit.setText("0x18f024d1")
self.lineEdit_2.setText("".join(ultra_str_list))
步骤三:使用tableView对数据进行多行显示
def table_show(self):
ultra_int_list=[]
for i in range(len(self.ultra_list)):
ultra_temp=int(self.ultra_list[i],16)
ultra_int_list.append(''+str(ultra_temp))
16进制字符串转16进制数组
for column in range(8):
newitem=QStandardItem(ultra_int_list[column])
self.tableView.scrollToBottom()#将滚动条置于最底面,可以一直显示最近一次的数据
示例软件展示:
1.主界面设计示例如图3所示:
图3主界面设计示例
2.如图4所示为探头一次接收的距离十六进制值。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。