读取.bin激光雷达点云文件格式并可视化三种的方法

Vevina ·
更新时间:2024-11-10
· 623 次阅读

申明:从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 point r = pointcloud[:, 3] # reflectance value of point d = np.sqrt(x ** 2 + y ** 2) # Map Distance from sensor degr = np.degrees(np.arctan(z / d)) vals = 'height' if vals == "height": col = z else: col = d fig = mayavi.mlab.figure(bgcolor=(0, 0, 0), size=(640, 500)) mayavi.mlab.points3d(x, y, z, col, # Values used for Color mode="point", colormap='spectral', # 'bone', 'copper', 'gnuplot' # color=(0, 1, 0), # Used a fixed (r,g,b) instead figure=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-8 import os import numpy as np import rospy from visualization_msgs.msg import * from sensor_msgs.msg import PointCloud2 from sensor_msgs import point_cloud2 as pc2 import pcl.pcl_visualization def 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_name def 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 COMPONENTS message_generation std_msgs ) # do not wildcard install files since the root folder of the package will contain a debian folder for releasing catkin_install_python(PROGRAMS script/rospy_rviz.py DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/rospy_rviz ) install(FILES launch/rospy_rviz.launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/rospy_rviz )

package.xml

rospy_rviz 0.0.0 rospy_rviz Hqss TODO catkin

rospy_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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章