注意:
- 再学习本系列教程时,应该已经安装过ROS了并且需要有一些ROS的基本知识
ubuntu版本:20.04
ros版本:noetic
课程回顾
ROS1结合自动驾驶数据集Kitti开发教程(一)Kitti资料介绍和可视化
ROS1结合自动驾驶数据集Kitti开发教程(二)发布图片
ROS1结合自动驾驶数据集Kitti开发教程(三)发布点云数据
ROS1结合自动驾驶数据集Kitti开发教程(四)画出自己车子模型以及照相机视野
ROS1结合自动驾驶数据集Kitti开发教程(五)发布IMU数据
ROS1结合自动驾驶数据集Kitti开发教程(六)发布GPS数据
ROS1结合自动驾驶数据集Kitti开发教程(七)下载图像标注资料并读取显示
ROS1结合自动驾驶数据集Kitti开发教程(八)画出2D检测框
1.前期准备工作
打开Jupyter Notebook进入源码地址,并且创建新的源码文件,名为plot3D.ipynb
激光雷达数据的可视化开源网站
旋转矩阵基础知识
2.画出其中一个物体的3D检测框
至今,已经有先驱者开源了这个项目Visualizing lidar data,展示效果非常不错,通过笔者的教程,也能实现如下图所示的效果。

首先在项目页面下找到如下图的链接进,可以看到原作者已经提供了一些关键的代码,我们通过在其源代码的更改来实现第一步的3D检测框显示(以下程序从头至尾可以合成一段整的函数,直接放进Jupyter Notebook中去跑):

2.1加载点云数据函数
这段程序和之前的程序一样,不在赘述了。
import numpy as np
import os
BASE_PATH = "/home/mckros/kitti/RawData/2011_09_26/2011_09_26_drive_0005_sync/"
def read_point_cloud():
point_cloud = np.fromfile(os.path.join(BASE_PATH, "velodyne_points/data/%010d.bin"%0), dtype=np.float32).reshape(-1,4)
return point_cloud
2.2点云绘制函数
下面这段程序提供了一个点云绘制函数,和原作者程序有些许不同,这边是根据笔者需求来做了一些更改。
函数的主要用法参数介绍如下所示:
ax:matplotlib画板
points:read_point_cloud()读取的点云数据
title:画板标题
axes:[0,1,2]分别代表xyz三个轴
point_size:点云大小
xlim3d:X轴在3D显示下限制角度的范围
ylim3d:Y轴在3D显示下限制角度的范围
zlim3d:Z轴在3D显示下限制角度的范围
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def draw_point_cloud(ax, points, title, axes=[0, 1, 2], point_size=0.2, xlim3d=None, ylim3d=None, zlim3d=None):
"""
Convenient method for drawing various point cloud projections as a part of frame statistics.
"""
# 设置xyz三个轴的点云范围
axes_limits = [
[-20, 80], # X axis range
[-20, 20], # Y axis range
[-3, 5] # Z axis range
]
axes_str = ['X', 'Y', 'Z']
# 禁止显示背后的网格
ax.grid(False)
# 创建散点图[1]:xyz数据集,[2]:点云的大小,[3]:点云的反射率数据,[4]:为灰度显示
ax.scatter(*np.transpose(points[:, axes]), s=point_size, c=points[:, 3], cmap='gray')
# 设置画板的标题
ax.set_title(title)
# 设置x轴标题
ax.set_xlabel('{} axis'.format(axes_str[axes[0]]))
# 设置y轴标题
ax.set_ylabel('{} axis'.format(axes_str[axes[1]]))
if len(axes) > 2:
# 设置限制角度
ax.set_xlim3d(*axes_limits[axes[0]])
ax.set_ylim3d(*axes_limits[axes[1]])
ax.set_zlim3d(*axes_limits[axes[2]])
# 将背景颜色设置为RGBA格式,目前的参数以透明显示
ax.xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
ax.yaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
ax.zaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
# 设置z轴标题
ax.set_zlabel('{} axis'.format(axes_str[axes[2]]))
else:
# 2D限制角度,只有xy轴
ax.set_xlim(*axes_limits[axes[0]])
ax.set_ylim(*axes_limits[axes[1]])
# User specified limits
if xlim3d!=None:
ax.set_xlim3d(xlim3d)
if ylim3d!=Non

本文详细介绍如何在ROS1环境中结合Kitti自动驾驶数据集,通过可视化点云数据并计算3D检测框,展示了从加载数据、点云绘制到物体检测的完整过程,包括关键代码和参数调整。
最低0.47元/天 解锁文章
952

被折叠的 条评论
为什么被折叠?



