读取.bin激光雷达点云文件格式并可视化三种的方法
申明:从KITTI官网下载到的激光雷达点云数据为.bin格式,为此找到了三种方法,现在分享出来大家一起讨论。
程序运行环境
运行测试系统:Ubuntu16.04
运行环境:python3.6
方法一:使用numpy库读取.bin数据并使用mayavi.mlab来可视化点云数据
1、安装通过下属命令安装依赖库
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install mayavi -i https://pypi.tuna.tsinghua.edu.cn/simple
2、通过以下代码读取.bin文件并可视化
import numpy as np
import mayavi.mlab# lidar_path换成自己的.bin文件路径
pointcloud = np.fromfile(str("lidar_path"), dtype=np.float32, count=-1).reshape([-1, 4])x = pointcloud[:, 0] # x position of point
y = pointcloud[:, 1] # y position of point
z = pointcloud[:, 2] # z position of pointr = pointcloud[:, 3] # reflectance value of point
d = np.sqrt(x ** 2 + y ** 2) # Map Distance from sensordegr = np.degrees(np.arctan(z / d))vals = 'height'
if vals == "height":col = z
else:col = dfig = mayavi.mlab.figure(bgcolor=(0, 0, 0), size=(640, 500))
mayavi.mlab.points3d(x, y, z,col, # Values used for Colormode="point",colormap='spectral', # 'bone', 'copper', 'gnuplot'# color=(0, 1, 0), # Used a fixed (r,g,b) insteadfigure=fig,)mayavi.mlab.show()
3、运行时候可视化结果如下:
方法二:使用numpy进行读取数据与使用python_pcl进行可视化
1、安装通过下属命令安装依赖
pip install python_pcl-XXX.whl #XXX为版本号,也可以不加
2、通过以下代码读取.bin文件并可视化
import numpy as np
import pcl.pcl_visualization# lidar_path 指定一个kitti 数据的点云bin文件就行了
points = np.fromfile(lidar_path, dtype=np.float32).reshape(-1, 4) # .astype(np.float16)# 这里对第四列进行赋值,它代表颜色值,根据你自己的需要赋值即可;
points[:, 3] = 3329330# PointCloud_PointXYZRGB 需要点云数据是N*4,分别表示x,y,z,RGB ,其中RGB 用一个整数表示颜色;
color_cloud = pcl.PointCloud_PointXYZRGB(points)
visual = pcl.pcl_visualization.CloudViewing()
visual.ShowColorCloud(color_cloud, b'cloud')
flag = True
while flag:flag != visual.WasStopped()
其中上述代码中的颜色值表如下所示:
白色:16777215 红色:16711680 绿色:65280 蓝色:255 牡丹红:16711935
青色:65535 黄色:16776960 黑色:0 海蓝:7396243 巧克力色:6042391
蓝紫色:10444703 黄铜色:11904578 亮金色:14276889 棕色:10911037
青铜色:9205843 深棕:6045747 深绿:3100463 深铜绿色:4879982
深橄榄绿:5197615 深兰花色:10040013 深紫色:8855416 深石板蓝:7021454
深铅灰色:3100495 深棕褐色:9922895 深绿松石色:7377883 暗木色:8740418
淡灰色:5526612 土灰玫瑰红色:8741731 长石色:13734517 火砖色:9315107
森林绿:2330147 金色:13467442 鲜黄色:14408560 灰色:12632256
铜绿色:5406582 青黄色:9689968 猎人绿:2186785 印度红:5123887
土黄色:10461023 浅蓝色:12638681 浅灰色:11053224 浅钢蓝色:9408445
浅木色:15319718 石灰绿色:3329330 桔黄色:14972979 褐红色:9315179
中海蓝色:3329433 中蓝色:3289805 中森林绿:7048739 中鲜黄色:15395502
中兰花色:9662683 中海绿色:4353858 中石板蓝色:8323327 中春绿色:8388352
中绿松石色:7396315 中紫红色:14381203 中木色:10911844 深藏青色:3092303
海军蓝:2302862 霓虹蓝:5066239 霓虹粉红:16740039 新深藏青色:156
新棕褐色:15452062 暗金黄色:13612347 橙色:16744192 橙红色:16720896
淡紫色:14381275 浅绿色:9419919 粉红色:12357519 李子色:15379946
石英色:14277107 艳蓝色:5855659 鲑鱼色:7291458 猩红色:12326679
海绿色:2330216 半甜巧克力色:7029286 赭色:9333539 银色:15132922
天蓝:3316172 石板蓝:32767 艳粉红色:16719022 春绿色:65407
钢蓝色:2321294 亮天蓝色:3715294 棕褐色:14390128 紫红色:14204888
石板蓝色:11397866 浓深棕色:6045747 淡浅灰色:13487565 紫罗兰色:5189455
紫罗兰红色:13382297 麦黄色:14211263 黄绿色:10079282
3、运行时候可视化结果如下(我赋值的时候为石灰绿色,结果出来的是黄色,原因未知,不过上手还是可以的):
方法三:使用numpy读取数据并使用rviz来进行数据可视化
1、首先需要在Ubuntu1604下安装ros环境
安装步骤可参考此篇博客https://blog.csdn.net/r1141207831/article/details/95337688
2、具体代码如下:
首先创建一个ros工程,参考下面的结构
test└── src└── rospy_rviz├── CMakeLists.txt├── data│ ├── readbin.png│ ├── readbin.py│ ├── read_pcl.py│ └── velodyne│ ├── 000000.bin│ ├── 000001.bin│ ├── 000002.bin│ ├── 000003.bin│ ├── 000004.bin├── launch│ └── rospy_rviz.launch├── package.xml├── rviz│ └── rospy_rviz.rviz└── script└── rospy_rviz.py
rospy_rviz.py
#!/usr/bin/env python
# coding=utf-8import os
import numpy as np
import rospyfrom visualization_msgs.msg import *
from sensor_msgs.msg import PointCloud2
from sensor_msgs import point_cloud2 as pc2
import pcl.pcl_visualizationdef get_data():file_name = list()file_path = rospy.get_param('file_path', "") # 获取一个全局参数for filename in os.listdir(file_path):filename = os.path.join(file_path, filename)if filename.split('.')[-1] == "bin":# print(filename.split('/')[-1])file_name.append(filename.split('/')[-1])# print(file_name)return file_namedef main():rospy.init_node("point_cloud", anonymous=True)rate = rospy.Rate(10)pub_cloud = rospy.Publisher("/point_cloud", PointCloud2, queue_size=100)point_cloud2 = PointCloud2()point_cloud2.header.frame_id = "/velodyne"file_path = rospy.get_param('file_path', "") # 获取一个全局参数file_name = get_data()for file in file_name:point_data = np.fromfile((file_path + file), dtype=np.float32, count=-1).reshape([-1, 4])# point_data = point_data[:10]cloud = pc2.create_cloud_xyz32(point_cloud2.header, point_data[:, :3])pub_cloud.publish(cloud)# 控制发布频率rate.sleep()if __name__ == "__main__": main()
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.3)
project(rospy_rviz)find_package(catkin REQUIRED COMPONENTSmessage_generationstd_msgs)# do not wildcard install files since the root folder of the package will contain a debian folder for releasing
catkin_install_python(PROGRAMSscript/rospy_rviz.pyDESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/rospy_rviz
)
install(FILESlaunch/rospy_rviz.launchDESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/rospy_rviz
)
package.xml
<?xml version="1.0"?>
<package format="2"><name>rospy_rviz</name><version>0.0.0</version><description>rospy_rviz</description><maintainer email="XXX@lzu.edu.cn">Hqss</maintainer><license>TODO</license><buildtool_depend>catkin</buildtool_depend></package>
rospy_rviz.launch
<launch><node name="rospy_rviz" pkg="rospy_rviz" type="rospy_rviz.py" output="screen"/><param name="file_path" value="$(find rospy_rviz)/data/velodyne/" /><node name="rviz" pkg="rviz" type="rviz" args="-d $(find rospy_rviz)/rviz/rospy_rviz.rviz" />
</launch>
3、使用下面命令运行程序
catkin_make
source devel/setup.bash
roslaunch rospy_rviz rospy_rviz.launch
4、可视化结果如下图所示
至此三种方法都可以正常可视化点云数据。
附录:
python 可视化点云工具 python-pcl https://zhuanlan.zhihu.com/p/72116675
读取.bin激光雷达点云文件格式并可视化三种的方法相关推荐
- 读取.bin激光雷达点云文件格式并可视化
link 代码在git pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple pip install mayavi -i http ...
- 一文览尽基于激光雷达点云(lidar)的目标检测方法
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文来源:计算机视觉之路,作者:山涧一壶酒,编辑:智车科技 / 导读 / 上周文章:自动驾驶中的激光雷 ...
- 云原生安全的一种新方法!
原文链接:http://arthurchiao.art/blog/google-beyondprod-zh/ 前言 本文翻译自 2019 年 Google 的一篇白皮书 BeyondProd: A n ...
- BeyondProd:云原生安全的一种新方法
Google 此前的几篇白皮书已经介绍我们内部开发的一些增强安全性的项目.从命名来说 ,BeyondProd 是有意让人想起我们先前的另一个概念 BeyondCorp -- 正如边界安全模型 (per ...
- java 文件写入 读取_JAVA文件的两种读取方法和三种写入方法
在使用java对文件进行读写操作时,有多种方法可以使用,但不同的方法有不同的性能. 此文对常用的读写方法进行了整理,以备不时之需. 1.文件的读取 主要介绍两种常用的读取方法.按行读取和按字符块读取. ...
- 云存储是什么?云存储的常见三种类型
云存储是一种云计算模型,可通过云计算提供商(将数据存储作为服务进行管理和运营)在 Internet 上存储数据.该模型按需适时提供容量和成本,无需您自行购买和管理数据存储基础设施. 云存储是什么 云存 ...
- 云计算机类型,云计算的三种云类型你了解多少?
随着云计算的快速发展,云计算最基础的产品云主机慢慢深入人心,也非常深受大众欢迎,其中分为公有云.私有云.混合云,云计算的不断创新与发展,也不再是一个新概念,将成为互联网发展的趋势,接下来蒙鸟云小编来谈 ...
- python正确读取文件路径的三种解决方法
目录 一.问题需求 二.问题原因 三.解决办法 四.小思 一.问题需求 日常用程序读取文件数据等时,常常会显示一些诸如文件路径不存在等错误信息. 二.问题原因 这类问题,在python中,主要是由于 ...
- 阿里云服务器不能发邮件禁用25端口的三种解决方法
分享使人快乐,遇到的坑通过博文分享给大家,总结解决办法使更多的人节省宝贵的时间去干其他的事,于是我决定写下了这篇博文: 阿里云发送SMTP邮件失败 阿里云服务器不能发邮件解决方法 ,第三种方法是可 ...
最新文章
- Datawhale组队学习 Task04:队列(2天)
- Redis--发布订阅模式
- VS2010快捷键总结(一)
- Mac下ssh支持auto complete
- MySql的Delete、Truncate、Drop分析
- 从天而降的文字,文字掉落效果
- 腾讯大数据之TDW计算引擎解析——Shuffle
- 低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航
- Oracle date日期类型使用
- linux查看网卡带宽命令,Linux查看网卡带宽的两个命令
- 大二 数据结构 期末复习题(仅供参考)
- 英语的计算机求职回信,2020年计算机英文求职信范文模板
- php程序 导出表格文件后缀,PHPExcel生成Excel文件---提示导出文件或者文件扩展名不一致,或导出的文件或文件扩展名无效...
- verilog语言实现全加器
- 基于MES系统的追溯管理功能,没你想的那么复杂
- python网课期中答案_中国大学python答案网课期末慕课MOOC答案
- PHP输出图像imagegif、imagejpeg与imagepng函数用法
- 2008 R2 Remote Desktop Server driver RDPDR.sys cannot be started, error 577
- html使用阿里图标库(iconfont)制作字体图标
- 供应链金融区块链应用