在做图像配准时就听闻过一些点云的方法,却没对其有太多的认识,只是知道点云point cloud顾名思义就是一些离散点的集合。现在在无人驾驶中一些激光雷达的作用其实就是生成点云数据,接下来介绍一下点云数据的含义和基础的使用方法。

虽然特斯拉是坚定的纯视觉自动驾驶路线的支持者,但其实更多的无人驾驶公司同时还会使用激光雷达LiDAR。经常见到无人驾驶的车顶会有一个旋转的圆柱体,其实就是机械式激光雷达,通过旋转镜面将激光反射到不同角度,得到360度的数据:

雷达有很多种,激光雷达只是其实一种,它的全称是light detection and ranging,就是使用激光进行探测和测距。

先来讲测距的原理。

因为同时有发射器和接收器,而光速是已知的,所以很明显可以利用波束传播的时间来得到距离。那么怎么得到传播时间呢?一个方法就大名鼎鼎的TOF,time of fly,又叫做光束法。这种方法依靠物体的漫反射,对脉冲宽度和接收器时间分辨率要求高,所以总体效果一般。第二种方法是相位法phase difference,这是一种相对的方法:不是发射一束而是成周期地发射,所以回波会产生相位差,从而可以估计传播时间。

除了基于时间段测距,还有基于几何的测距。三角测量法triangulation principle利用了三角形相似原理。

探测是基于测距的,目的是得到物体的三维坐标。以什么坐标系?

得到三维坐标及每个点对应的反射强度就构成了点云数据。接下来看一下真实的点云数据是什么样子。从阿波罗项目页可以下载到一些点云数据。这里百度提供了两种数据格式:一种是.pcd,一种是.bin文件。.pcd是PCL库官方指定的格式,每一个.pcd文件都会有一个文件头,就和Opencv中的Mat一样,会有一个数据头去描述这个点云图的一些基础信息:

# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7                        #指定PCD文件版本
FIELDS x y z intensity timestamp   #指定一个点可以有的每一个维度和字段的名字
SIZE 4 4 4 1 8                     #用字节数指定每一个维度的大小
TYPE F F F U F                     #一个字符指定每一个维度的类型,F是浮点
COUNT 1 1 1 1 1                    #每一个维度包含的元素数目,一般都是1,但是描述子可能是128
WIDTH 101045                       #无序点云的数目或者有序点云一行的数目
HEIGHT 1                           #无序点云时设置为1,有序时表示一列的数目
VIEWPOINT 0 0 0 1 0 0 0            #视点信息被指定为三维平移+ 四元数,默认值为0001000
POINTS 101045                      #指定点云中点的总数
DATA binary_compressed             #指定存储点云数据的数据类型:ASCII或者Bin,bin更快速

按道理它就是一个文本,但是直接以文本打开的话除了刚才讲到的文件头,其余数据都是乱码,python中使用utf-8和ISO-8859-1和rb都无法看到正常的点坐标。所以兜兜转转半天,还是通过安装第三方库轻松解决。

import open3d as o3d
print("Load a ply point cloud, print it, and render it")
pcd = o3d.io.read_point_cloud("20期.pcd")
print(pcd)
print(o3d.np.asarray(pcd.points))
o3d.visualization.draw_geometries([pcd])

可以得到坐标及可视化结果:

[[ -8.39819813  -5.66665173  -0.9710691 ]
 [ -8.13930702  -5.81639719  -0.9073652 ]
 [-22.42602539 -21.35739517   0.32076412]
 ...
 [ -6.15335035  -5.64766216  -1.15699255]
 [ -6.67443991  -5.32205296  -1.74743378]
 [ -6.31309557  -5.57189178  -1.63395274]]

也可以安装PCL,似乎需要自己编译,暂未实现。

Reference:

1.https://www.zhihu.com/question/418827194/answer/1451606698

2.旋转https://baijiahao.baidu.com/s?id=1695602953340739196&wfr=spider&for=pc

3.readhttps://www.cnblogs.com/zyber/p/9578240.html

4.格式https://blog.csdn.net/weixin_46098577/article/details/111594733

5安装pclhttps://blog.csdn.net/McEason/article/details/105195285

二维与三维之间的桥梁——点云相关推荐

  1. python二维、三维、思维数组之间的转化

    python二维.三维.思维数组之间的转化 import numpy as np# 假设你有一个二维数组,形状为(32,10000) gray = np.random.randint(0, 256, ...

  2. Android 高级UI解密 (三) :Canvas裁剪 与 二维、三维Camera几何变换(图层Layer原理)

    Android的绘图机制是核心内容之一,无论是什么样的功能最终都是以图像的形式呈现给用户.因此掌握Android的绘图技巧,有助于Android理解层次的提高,在面对产品经理提出的idea时也更有底气 ...

  3. N圆最密堆积、最小外接正方形的matlab求解(二维、三维等圆Packing 问题)

    圆形最密堆积.最小外接正方形的matlab求解(二维.三维等圆Packing 问题) 0 前言 1 N个圆的最小外接正方形求解 2 N个球的最小外接立方体求解 惯例声明:本人没有相关的工程应用经验,只 ...

  4. 基于栅格地图的路径规划(一)基于Matlab二维、三维栅格地图的构建

    基于栅格地图的路径规划(一)基于Matlab二维.三维栅格地图的构建 前言 1.二维栅格地图的创建 1.1.二维栅格地图构建原理 1.2.二维栅格地图构建例程 2.三维栅格地图的创建 2.1.三维栅格 ...

  5. GIS从二维到三维有多远

    摘要 地理信息系统(GIS)起源于北美,是现代地理学与空间信息科学相结合的产物.经过数十年的发展,GIS已经从只有少数专业人士才懂的应用系统,成为日益走向大众的专业软件. 三维GIS是GIS的重要发展 ...

  6. 【转载】 突破技术瓶颈 GIS从二维到三维有多远

    在3sNews上看到了一篇文章,关于三维GIS的,写的不错,转载在这里. 突破技术瓶颈 GIS从二维到三维有多远? http://www.3snews.net/html/06/n-21706.html ...

  7. 三维重建系列——坐标系从二维到三维

    首先上一个总图: 下面依次介绍平移坐标,内参矩阵外参矩阵的具体表示: 一,图像坐标系和像素坐标系 像素坐标系中,每一像素的坐标(u,v)分别是该像素在数组中的列数和行数.所以(u,v)是以像素为单位的 ...

  8. R语言plotly可视化:使用PCA算法进行数据降维、使用plotly可视化PCA所有的主成分绘制散点图矩阵、降维后的两个(三个)核心主成分的二维、三维可视化图形、方差解释的量、载荷图等

    R语言plotly可视化:使用PCA算法进行数据降维.使用plotly可视化PCA所有的主成分绘制散点图矩阵.降维后的两个(三个)核心主成分的二维.三维可视化图形.方差解释的量.载荷图等 目录

  9. linux c语言 malloc动态分配指针,C语言malloc函数为一维,二维,三维数组分配空间...

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

最新文章

  1. Linux——多线程
  2. linux目录 文件 pdf,linux文件与目录管理.pdf
  3. 持续集成实验个人总结
  4. otis电梯服务器tt使用说明_南充私人电梯
  5. 修改centos系统默认编辑器
  6. 你必须学会HTML和CSS的9大理由,让你在以后的工作中更香
  7. 20210322 :贪心思想力扣典型题目合集
  8. atitit。企业的价值观 员工第一 vs 客户第一.docx
  9. nlp gpt论文_GPT-3是未来。 但是NLP目前可以做什么?
  10. Communication System dp 动态规划 || 贪心
  11. 使用R语言中的spgwr包进行GWR模型的相关运算
  12. 思科 命令 TFTP
  13. FPGA信号处理系列文章——DDS的性能和误差分析
  14. 衡量GDP,哪种夜间灯光数据更靠谱?
  15. FAT文件系统文件存储与删除原理分析
  16. unity 模型销毁_Unity中销毁游戏对象的方式
  17. 数据分析 -- Pandas①
  18. 最大开源代码sourceforge 简介 及视音频方面常用的开源代码
  19. 【macOS免费软件推荐】第6期:洛雪音乐
  20. 计算机专业学生必看的网站

热门文章

  1. NLP太难学了!?吃透NLP的方法来拿走
  2. 论文浅尝 | MulDE:面向低维知识图嵌入的多教师知识蒸馏
  3. 打造工业级推荐系统(三):推荐系统的工程实现与架构优化
  4. JS DOM节点增删改查 属性设置
  5. 小程序开发初体验,从静态demo到接入Bmob数据库完全实现
  6. windows定时计划备份MySql
  7. -bash: id: command not found -bash: tty: command not found
  8. 需要多长时间达到一个本科毕业生刚毕业的水平。
  9. 错误 undefined reference to __cxa_guard_acquire/release
  10. iOS 翻译-UIWebView的基本简介-官方文档翻译