0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于激光雷达传感器如何投影成二维图像

新机器视觉 来源:CSDN威廉希尔官方网站 社区 作者:W_Tortoise 2021-04-03 09:58 次阅读

“前视图”投影

为了将激光雷达传感器的“前视图”展平为2D图像,必须将3D空间中的点投影到可以展开的圆柱形表面上,以形成平面。

2a6759e6-8e94-11eb-8b86-12bb97331649.png

2a9336d8-8e94-11eb-8b86-12bb97331649.png

问题在于这样做会将图像的接缝直接放在汽车的右侧。将接缝定位在汽车的最后部更有意义,因此前部和侧部更重要的区域是不间断的。让这些重要区域不间断将使卷积神经网络更容易识别那些重要区域中的整个对象。

以下代码解决了这个问题。

沿每个轴配置刻度

变量h r e s h_{res}和v r e s v_{res}非常依赖于所使用的LIDAR传感器。在KTTI数据集中,使用的传感器是Velodyne HDL 64E。根据Velodyne HDL 64E的规格表,它具有以下重要特征:

垂直视野为26.9度,分辨率为0.4度,垂直视野被分为传感器上方+2度,传感器下方-24.9度

360度的水平视野,分辨率为0.08-0.35(取决于旋转速度)

旋转速率可以选择在5-20Hz之间

可以按以下方式更新代码:

然而,这导致大约一半的点在x轴负方向上,并且大多数在y轴负方向上。为了投影到2D图像,需要将最小值设置为(0,0),所以需要做一些改变:

绘制二维图像

将3D点投影到2D坐标点,最小值为(0,0),可以将这些点数据绘制成2D图像。

完整代码

把上面所有的代码放在一个函数中。

def lidar_to_2d_front_view(points, v_res, h_res, v_fov, val=“depth”, cmap=“jet”, saveto=None, y_fudge=0.0 ): “”“ Takes points in 3D space from LIDAR data and projects them to a 2D ”front view“ image, and saves that image.

Args: points: (np array) The numpy array containing the lidar points. The shape should be Nx4 - Where N is the number of points, and - each point is specified by 4 values (x, y, z, reflectance) v_res: (float) vertical resolution of the lidar sensor used. h_res: (float) horizontal resolution of the lidar sensor used. v_fov: (tuple of two floats) (minimum_negative_angle, max_positive_angle) val: (str) What value to use to encode the points that get plotted. One of {”depth“, ”height“, ”reflectance“} cmap: (str) Color map to use to color code the `val` values. NOTE: Must be a value accepted by matplotlib‘s scatter function Examples: ”jet“, ”gray“ saveto: (str or None) If a string is provided, it saves the image as this filename. If None, then it just shows the image. y_fudge: (float) A hacky fudge factor to use if the theoretical calculations of vertical range do not match the actual data.

For a Velodyne HDL 64E, set this value to 5. ”“”

# DUMMY PROOFING assert len(v_fov) ==2, “v_fov must be list/tuple of length 2” assert v_fov[0] 《= 0, “first element in v_fov must be 0 or negative” assert val in {“depth”, “height”, “reflectance”}, ’val must be one of {“depth”, “height”, “reflectance”}‘

x_lidar = points[:, 0] y_lidar = points[:, 1] z_lidar = points[:, 2] r_lidar = points[:, 3] # Reflectance # Distance relative to origin when looked from top d_lidar = np.sqrt(x_lidar ** 2 + y_lidar ** 2) # Absolute distance relative to origin # d_lidar = np.sqrt(x_lidar ** 2 + y_lidar ** 2, z_lidar ** 2)

v_fov_total = -v_fov[0] + v_fov[1]

# Convert to Radians v_res_rad = v_res * (np.pi/180) h_res_rad = h_res * (np.pi/180)

# PROJECT INTO IMAGE COORDINATES x_img = np.arctan2(-y_lidar, x_lidar)/ h_res_rad y_img = np.arctan2(z_lidar, d_lidar)/ v_res_rad

# SHIFT COORDINATES TO MAKE 0,0 THE MINIMUM x_min = -360.0 / h_res / 2 # Theoretical min x value based on sensor specs x_img -= x_min # Shift x_max = 360.0 / h_res # Theoretical max x value after shifting

y_min = v_fov[0] / v_res # theoretical min y value based on sensor specs y_img -= y_min # Shift y_max = v_fov_total / v_res # Theoretical max x value after shifting

y_max += y_fudge # Fudge factor if the calculations based on # spec sheet do not match the range of # angles collected by in the data.

# WHAT DATA TO USE TO ENCODE THE VALUE FOR EACH PIXEL if val == “reflectance”: pixel_values = r_lidar elif val == “height”: pixel_values = z_lidar else: pixel_values = -d_lidar

# PLOT THE IMAGE cmap = “jet” # Color map to use dpi = 100 # Image resolution fig, ax = plt.subplots(figsize=(x_max/dpi, y_max/dpi), dpi=dpi) ax.scatter(x_img,y_img, s=1, c=pixel_values, linewidths=0, alpha=1, cmap=cmap) ax.set_axis_bgcolor((0, 0, 0)) # Set regions with no points to black ax.axis(’scaled‘) # {equal, scaled} ax.xaxis.set_visible(False) # Do not draw axis tick marks ax.yaxis.set_visible(False) # Do not draw axis tick marks plt.xlim([0, x_max]) # prevent drawing empty space outside of horizontal FOV plt.ylim([0, y_max]) # prevent drawing empty space outside of vertical FOV

if saveto is not None: fig.savefig(saveto, dpi=dpi, bbox_inches=’tight‘, pad_inches=0.0) else: fig.show()

以下是一些用例:

import matplotlib.pyplot as pltimport numpy as np

HRES = 0.35 # horizontal resolution (assuming 20Hz setting)VRES = 0.4 # vertical resVFOV = (-24.9, 2.0) # Field of view (-ve, +ve) along vertical axisY_FUDGE = 5 # y fudge factor for velodyne HDL 64E

lidar_to_2d_front_view(lidar, v_res=VRES, h_res=HRES, v_fov=VFOV, val=“depth”, saveto=“/tmp/lidar_depth.png”, y_fudge=Y_FUDGE)

lidar_to_2d_front_view(lidar, v_res=VRES, h_res=HRES, v_fov=VFOV, val=“height”, saveto=“/tmp/lidar_height.png”, y_fudge=Y_FUDGE)

lidar_to_2d_front_view(lidar, v_res=VRES, h_res=HRES, v_fov=VFOV, val=“reflectance”, saveto=“/tmp/lidar_reflectance.png”, y_fudge=Y_FUDGE)

产生以下三个图像:

Depth

2ac4628a-8e94-11eb-8b86-12bb97331649.png

Height

2afb4796-8e94-11eb-8b86-12bb97331649.png

Reflectance

2b4c7080-8e94-11eb-8b86-12bb97331649.png

后续操作步骤

目前创建每个图像非常慢,可能是因为matplotlib,它不能很好地处理大量的散点。

因此需要创建一个使用numpy或PIL的实现。

测试

需要安装python-pcl,加载PCD文件。

sudo apt-get install python-pip

sudo apt-get install python-dev

sudo pip install Cython==0.25.2

sudo pip install numpy

sudo apt-get install git

git clone https://github.com/strawlab/python-pcl.git

cd python-pcl/

python setup.py build_ext -i

python setup.py install

可惜,sudo pip install Cython==0.25.2这步报错:

Cannot uninstall ‘Cython’。 It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.”

换个方法,安装pypcd:

pip install pypcd

查看 https://pypi.org/project/pypcd/ ,用例如下:

Example-------

。. code:: python

import pypcd# also can read from file handles.pc = pypcd.PointCloud.from_path(’foo.pcd‘)# pc.pc_data has the data as a structured array# pc.fields, pc.count, etc have the metadata

# center the x fieldpc.pc_data[’x‘] -= pc.pc_data[’x‘].mean()

# save as binary compressedpc.save_pcd(’bar.pcd‘, compression=’binary_compressed‘)

测试数据结构:

“ 》》》 lidar = pypcd.PointCloud.from_path(‘~/pointcloud-processing/000000.pcd’)

》》》 lidar.pc_data

array([(18.323999404907227, 0.04899999871850014, 0.8289999961853027, 0.0),

(18.3439998626709, 0.10599999874830246, 0.8289999961853027, 0.0),

(51.29899978637695, 0.5049999952316284, 1.944000005722046, 0.0),

…,

(3.7139999866485596, -1.3910000324249268, -1.7330000400543213, 0.4099999964237213),

(3.9670000076293945, -1.4739999771118164, -1.8569999933242798, 0.0),

(0.0, 0.0, 0.0, 0.0)],

dtype=[(‘x’, ‘《f4’), (‘y’, ‘《f4’), (‘z’, ‘《f4’), (‘intensity’, ‘《f4’)])

》》》 lidar.pc_data[‘x’]

array([ 18.3239994 , 18.34399986, 51.29899979, …, 3.71399999,

3.96700001, 0. ], dtype=float32) ”

加载PCD:

import pypcd

lidar = pypcd.PointCloud.from_path(’000000.pcd‘)

x_lidar:

x_lidar = points[’x‘]

结果:

Depth

2bc5c4ee-8e94-11eb-8b86-12bb97331649.png

Height

2c287c7e-8e94-11eb-8b86-12bb97331649.png

Reflectance

2c7f18cc-8e94-11eb-8b86-12bb97331649.png

编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2551

    文章

    51084

    浏览量

    753441
  • 投影
    +关注

    关注

    0

    文章

    143

    浏览量

    24698
  • 激光雷达
    +关注

    关注

    968

    文章

    3971

    浏览量

    189904

原文标题:点云处理——将激光雷达数据投影到二维图像

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    激光雷达在SLAM算法中的应用综述

    SLAM算法运行的重要传感器。基于激光雷达的SLAM算法,对激光雷达SLAM总体框架进行介绍,详细阐述前端里程计、后端优化、回环检测、地图构建模块的作用并总结所使用的算法;按由2D到 3D,单
    的头像 发表于 11-12 10:30 551次阅读
    <b class='flag-5'>激光雷达</b>在SLAM算法中的应用综述

    激光雷达威廉希尔官方网站 的基于深度学习的进步

    空间信息。这使得激光雷达在自动驾驶、无人机、机器人等领域具有广泛的应用前景。 、深度学习威廉希尔官方网站 的发展 深度学习是机器学习的一个分支,它通过模拟人脑的神经网络结构来处理和分析数据。近年来,深度学习威廉希尔官方网站 在图像识别、语音
    的头像 发表于 10-27 10:57 383次阅读

    激光雷达与其他传感器的比较

    在现代科技领域,传感器威廉希尔官方网站 的发展日新月异,为各行各业提供了强大的数据支持。激光雷达作为一种高精度的遥感威廉希尔官方网站 ,近年来在多个领域得到了广泛应用。然而,激光雷达并非万能,它与其他传感器相比,
    的头像 发表于 10-27 10:41 617次阅读

    agv叉车激光导航和二维码导航有什么区别?适用什么场景?选哪种比较好?

    无人叉车激光导航和二维码导航在多个方面存在显著差异,以下是它们的主要区别: 一、原理不同 激光导航:利用激光雷达扫描地面环境,实时获取机器人当前位置和周围环境信息,然后根据事先建立的地
    的头像 发表于 10-15 17:45 305次阅读
    agv叉车<b class='flag-5'>激光</b>导航和<b class='flag-5'>二维</b>码导航有什么区别?适用什么场景?选哪种比较好?

    二维传感器怎么安装,在安装二维传感器的安装步骤

    二维传感器是一种精密的测量设备,用于检测物体在平面内的力和力矩。为了确保其测量结果的准确性和稳定性,正确的安装步骤至关重要。本文将详细介绍二维传感器的安装方法。
    的头像 发表于 09-27 17:14 323次阅读
    <b class='flag-5'>二维</b>力<b class='flag-5'>传感器</b>怎么安装,在安装<b class='flag-5'>二维</b>力<b class='flag-5'>传感器</b>的安装步骤

    半导体激光雷达传感器件产业化项目落地德州

    协议,双方将投资建设半导体激光雷达传感器件产业化项目,引进激光雷达、半导体激光器、光收发器件等自动化生产、检测及辅助系统等设备,主要产品为激光雷达
    的头像 发表于 06-04 09:48 1.8w次阅读

    森思泰克全新推出96线激光雷达和192线激光雷达产品

    传感器融合方案是智能驾驶感知威廉希尔官方网站 的必然趋势。它以摄像头、毫米波雷达、超声波雷达以及激光雷达等多种传感器协同配合来感知外界信息。
    的头像 发表于 05-28 10:03 1701次阅读
    森思泰克全新推出96线<b class='flag-5'>激光雷达</b>和192线<b class='flag-5'>激光雷达</b>产品

    瑞识科技推出用于激光雷达二维可寻址VCSEL芯片并获量产订单

    随着汽车智能化和自动驾驶威廉希尔官方网站 的快速发展,车载激光雷达市场近年呈现出高速增长的态势。近日,瑞识科技推出新款二维可寻址激光雷达VCSEL芯片,可应用于搭载固态激光雷达的智驾方案,以实现更高
    的头像 发表于 04-01 11:16 850次阅读
    瑞识科技推出用于<b class='flag-5'>激光雷达</b>的<b class='flag-5'>二维</b>可寻址VCSEL芯片并获量产订单

    Phlux推出一种新型传感器以进军汽车激光雷达(LiDAR)市场

    英国初创公司Phlux Technology(以下简称“Phlux”)正致力于通过一种新型传感器进军汽车激光雷达(LiDAR)市场,并筹集项目资金。Phlux计划成为“激光雷达(LiDAR)中的英伟达(Nvidia)”。
    的头像 发表于 03-18 09:20 1109次阅读

    华为详细解读激光雷达

    来源:华为智能汽车解决方案,谢谢 编辑:感知芯视界 Link 激光雷达(LiDAR)作为智能驾驶系统的核心传感器,其三环境重建能力为车辆提供了丰富而精确的环境信息,主动发光,不受黑夜光照条件
    的头像 发表于 03-15 10:19 638次阅读

    车载激光雷达到底安不安全?

    激光雷达(LiDAR)作为智能驾驶系统的核心传感器,其三环境重建能力为车辆提供了丰富而精确的环境信息,主动发光,不受黑夜光照条件影响的特性
    的头像 发表于 03-08 09:41 2538次阅读
    车载<b class='flag-5'>激光雷达</b>到底安不安全?

    SolidVue为激光雷达传感器设计SoC,可评估周围物体的形状和距离

    据麦姆斯咨询报道,韩国目前唯一一家专门从事CMOS激光雷达(LiDAR)传感器芯片开发的厂商SolidVue近期宣布其两篇激光雷达相关论文被“2024年国际固态电路会议(ISSCC)”接收,这再次证明了SolidVue全球领先的
    的头像 发表于 02-28 09:56 816次阅读

    现代汽车和起亚汽车宣布开发片上激光雷达传感器

    2月21日,现代汽车公司和起亚汽车公司宣布,他们将与韩国顶尖大学KAIST(韩国科学威廉希尔官方网站 院)合作,在韩国大田KAIST总部建立“现代汽车集团-KAIST片上激光雷达联合实验室”,开发用于高级自动驾驶汽车的激光雷达(LiDAR)传感器
    的头像 发表于 02-23 09:36 650次阅读
    现代汽车和起亚汽车宣布开发片上<b class='flag-5'>激光雷达</b><b class='flag-5'>传感器</b>

    华为激光雷达参数怎么设置

    华为激光雷达是一种常用的传感器威廉希尔官方网站 ,可用于距离测量和感应。它的参数设置对于确保其性能和功能至关重要。在本文中,我们将详细介绍华为激光雷达的参数设置以及其影响和应用。 首先,我们需要了解激光雷达
    的头像 发表于 01-19 14:17 1793次阅读

    偏振成像激光雷达与短波红外复合光学接收系统设计与分析介绍

    成像激光雷达因具备主动照明、角度分辨率高、可探测距离信息等优势,被视为是被动遥感和微波雷达后的下一代威廉希尔官方网站 产品,与传统被动传感器成像及微波雷达
    的头像 发表于 01-05 10:29 1559次阅读
    偏振成像<b class='flag-5'>激光雷达</b>与短波红外复合光学接收系统设计与分析介绍