雷达模块及雷达识别

3 篇文章 0 订阅
1 篇文章 0 订阅

雷达模块

单线雷达:
一线激光雷达测距系统是通过 uart 串口信号与外部系统通讯, 依据通讯协议,外部 系统调用 SDK 函数命令主要是对 Lidar 的扫描数据进行实时获取,设置设备工作状态以及工作模式。

数据通信接口函数
SDk 主要提供了该雷达的驱动类 Lidar_driver,其中主要的函数如下:
(a)初始化串口函数 ::OpenLidarSerial();
该函数完成串口参数的初始化,打开设备接受线程。
(b)关闭串口函数 ::CloseLidarSerial();
该函数主要完成串口设备的线程释放。
(c)命令函数 ::SendLidarCommand();
该函数完成对雷达的数据指令,参数包括:
START:打开设备电源,电机旋转。
SCAN:打开数据模块开关,发送单圈数据 DATA_SCAN: 打开数据模块开关,连续发送雷 达数据 DATA_STOP: 关闭数据开关,停止发送数据。
STOP:关闭设备电源,电机停止转动
SWITCH_ANGLE: 角度信息切换
SWITCH_STRENGHT: 强度信息切换
CHSPEED: 修改电机转速
CHRESOLUTION:修改角度分辨率
(d)获取数据函数 ::GetLidarScanData();
实例程序
向 Linux 系统中拷贝 LS01BLinux 驱动
使用 LSlidarUSB 转串口说明
使用附赠 USB 数据线将一线激光雷达与计算机连接,在 Ubuntu 系统终端中输入一下 命令进入查看 USB 转串口节点命令,命令行及效果如图
在这里插入图片描述

如 果 USB 转串口连接成功,会看到一个 ttyUSB0 的节点(本人 ubuntu15.10 中测试, 不需要安装 cp2102 驱动)。在发现 ttyUSB0 后在终端中输入一下命令给 USB 转串口权限
在这里插入图片描述
使用 LSlidar 界面程序说明
在驱动文件夹下,打开 linux 终端,获得串口的权限后直接输入命令./ls01b,运行界面
在这里插入图片描述
在 ubuntu 系统中安装 Q(t 本人使用的是 Qt5.5.0);用 QtCreator 打开《LSlidarlinux 源程序及驱动 qt》程序 230400.pro,界面如图
在这里插入图片描述
点 击左下角的绿色三角形运行程序,如果激光雷达有连接,然后点击打开按钮,会有下 面的界面和数据
在这里插入图片描述
点 击左上角显示按钮会出
在这里插入图片描述

16线激光雷达

16 线激光雷达主要面向无人驾驶汽车环境感知、机器人环境感知、无人机测绘等领域, 通过 16 个激光发射组件快速旋转的同时发射高频率激光束对外界环境进行持续性的扫描, 经过测距算法提供三维空间数据及物体反射率,可以让机器看到周围的世界。

建立 ROS 工作空间

$mkdir -p ~/ros_ws/src

线激光雷达解析程序编译

$cd ~/ros_ws
$catkin_make

在这里插入图片描述
在这里插入图片描述

$source devel/setup.bash
$roslaunch lslidar_c16_decoder lslidar_c16.launch

在这里插入图片描述

$source ~/ros_ws/devel/setup.bash
$echo “source ~/ros_ws/devel/setup.bash” >> 〜/.bashrc
$source ~/.bashrc
$rviz

在弹出的 Displays 窗口中,如图 49 所示,将“FixedFrame”的值修改成 laser_link 即可,同时点击 add 按钮,在 Bytopic 下点击 PointCloud2 添加多线点云节点,即可得到 16 线雷达数据可视化界面在这里插入图片描述
在这里插入图片描述

中心点计算

$roscore
在这里插入图片描述

 $rosbag play floor.bag -l

在这里插入图片描述

$rviz

在这里插入图片描述
创建名为 center_line.py 的 python 文件,并输入下列代码

#!/usr/bin/python 
# -*- coding: utf-8 -*
#导入必要的库 import sys
import os.path 
import numpy as np 
import rospy 
import random from sensor_msgs.msg 
import PointCloud2, PointField 
import sensor_msgs.point_cloud2 as pc2 from std_msgs.msg 
import Header
class CenterLine(): #构造函数 
def __init__(self): self.pcl_sub = rospy.Subscriber("lslidar_point_cloud", PointCloud2, self.prediction_publis h) 
self.pcl_pub = rospy.Publisher("pcl_left", PointCloud2, queue_size=10) 
self.pcl_pub2 = rospy.Publisher("pcl_right", PointCloud2, queue_size=10) 
self.center_pub = rospy.Publisher("center_points", PointCloud2, queue_size=1) rospy.spin()


#创建点云函数 
def create_cloud_xyz32(self, header, points): 
fields = [PointField('x', 0, PointField.FLOAT32, 1), 
PointField('y', 4, PointField.FLOAT32, 1), 
PointField('z', 8, PointField.FLOAT32, 1)] 
return pc2.create_cloud(header, fields, points)
#回调函数,用于处理订阅的话题数据,并发布自己的数据 
def prediction_publish(self, lidar): 
lidar = pc2.read_points(lidar)
points = np.array(list(lidar)) 
points = points[np.where([-0.08 <= point[2] <= 0.08 and point[0] > 0 for point in poi nts])] np.unique(points)
l_points = points[np.where([point[1] > 0 for point in points])] 
r_points = points[np.where([point[1] < 0 for point in points])] 
l_points = np.array(random.sample(l_points,min(len(l_points),len(r_points)))) 
r_points = np.array(random.sample(r_points,min(len(l_points),len(r_points)))) 
l_points = l_points[np.argsort(l_points.T)[0]] 
r_points = r_points[np.argsort(r_points.T)[0]] 
min_points = min(len(l_points),len(r_points)) 
center_x = np.array([(l_points[i,0]+r_points[i,0])/2 for i in range(min_points)]).reshape(
1)
center_y = np.array([(l_points[j,1]+r_points[j,1])/2 for j in range(min_points)]).reshape(
1)
center_z = np.zeros(len(center_x)).reshape(-1) 
center_cloud = np.stack((center_x, center_y, center_z))
center_points = [] for x,y in zip(list(center_x),list(center_y)): 
center_point = x,y center_points.append(center_point)
f = open('./1.txt','w') 
f.write(str(center_points)) 
f.close()
header = Header() 
header.stamp = rospy.Time().now() 
header.frame_id = "laser_link" 
cloud_filtered = self.create_cloud_xyz32(header, center_cloud.T) self.center_pub.publish(cloud_filtered)
l_x = l_points[:, 0].reshape(-1) 
l_y = l_points[:, 1].reshape(-1) 
l_z = np.zeros(len(l_points)).reshape(-1)
l_cloud = np.stack((l_x, l_y, l_z))
r_x = r_points[:, 0].reshape(-1) 
r_y = r_points[:, 1].reshape(-1) 
r_z = np.zeros(len(r_points)).reshape(-1) 
r_cloud = np.stack((r_x, r_y, r_z))
l_header = Header() 
l_header.stamp = rospy.Time().now() 
l_header.frame_id = "laser_link" 
l_cloud_filtered = self.create_cloud_xyz32(l_header, l_cloud.T) self.pcl_pub.publish(l_cloud_filtered)
r_header = Header() 
r_header.stamp = rospy.Time().now() 
r_header.frame_id = "laser_link" 
r_cloud_filtered = self.create_cloud_xyz32(r_header, r_cloud.T) self.pcl_pub2.publish(r_cloud_filtered)
if __name__ == '__main__': 
#初始化一个节点 
rospy.init_node('center_line_node') 
#类实例化 
center_line = CenterLine()

运行 center_line.py,并使用 rviz 可视化结果如下图所示
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 简介 IWR1642毫米波雷达是德州仪器公司(TI)生产的一款高性能、低功耗、小尺寸的毫米波雷达芯片。它采用了FMCW(调频连续波)工作模式,可实现高精度的物体测距和目标识别。本文将介绍基于IWR1642毫米波雷达的物体识别模块软件设计。 2. 系统框架 物体识别模块主要由硬件和软件两部分组成。硬件部分包括IWR1642毫米波雷达、处理器、存储器、显示器等;软件部分包括驱动程序、信号处理算法、目标检测算法、数据可视化等。 3. 硬件设计 硬件设计主要涉及毫米波雷达的接口设计和系统架构设计。 3.1 毫米波雷达接口设计 IWR1642毫米波雷达采用SPI接口与处理器通信。SPI接口包括4个信号线:SCLK(串行时钟)、MOSI(主设备输出从设备输入)、MISO(主设备输入从设备输出)、CS(片选信号)。处理器通过SPI接口向毫米波雷达发送控制命令,毫米波雷达将测量数据通过SPI接口返回给处理器。此外,毫米波雷达还需要供电和时钟信号。 3.2 系统架构设计 系统架构设计主要包括处理器选择、存储器选择、显示器选择等。处理器需要具备足够的计算能力和接口资源,以便实现数据处理和控制操作。存储器需要具备足够的容量和速度,以便实现数据存储和读取。显示器需要具备足够的分辨率和亮度,以便实现数据可视化和操作界面。 4. 软件设计 软件设计主要包括驱动程序设计、信号处理算法设计、目标检测算法设计、数据可视化设计等。 4.1 驱动程序设计 驱动程序负责与硬件接口进行通信,并实现数据的读取和写入。驱动程序需要实现SPI接口的控制和数据传输,以及时钟和供电控制等。 4.2 信号处理算法设计 信号处理算法负责对毫米波雷达返回的数据进行处理,提取目标信息。信号处理算法需要实现数据预处理、信号分析、特征提取等功能,以便实现目标检测和跟踪。 4.3 目标检测算法设计 目标检测算法负责在信号处理的基础上,进一步从数据中提取目标信息。目标检测算法需要实现目标识别、目标分类和目标跟踪等功能,以便实现对目标的精确定位和跟踪。 4.4 数据可视化设计 数据可视化负责将检测到的目标信息以图形化的方式展示出来,以便用户进行操作和分析。数据可视化需要实现界面设计、数据显示、控制操作等功能。 5. 总结 基于IWR1642毫米波雷达的物体识别模块软件设计需要涉及硬件和软件两部分。硬件设计主要包括毫米波雷达接口设计和系统架构设计;软件设计主要包括驱动程序设计、信号处理算法设计、目标检测算法设计和数据可视化设计。通过合理的设计和实现,可以实现高精度、高效率、低功耗的物体识别模块
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值