Attention
仓库在更新迭代中,相关API可能不稳定,欢迎Issue和PR
人生苦短,我选Python,提供感知算法(此为大感知,含SLAM)的Python API(Python实现和Pybind后的C++实现),以学习、掌握、验证相关算法,并并行快速原型开发。基于本仓库可实现的感知功能预期包含但不限于:
- 传统方案:地面分割、聚类分割、形状拟合、SLAM
- 深度学习:三维目标检测、三维目标跟踪、三维语义分割、三维实例分割
- 其他:点云文件的IO处理、TF变换、标定、可视化、度量测评
三维目标检测(3D Object Detection) | 三维目标跟踪(3D Object Tracking) |
---|---|
![]() |
![]() |
即时定位与建图(SLAM) | 相机和激光雷达的外参标定(Extrinsic Calibration) |
![]() |
![]() |
去动态点云(Moving Object Segmentation) | 传统检测方案(Traditional Pipeline) |
![]() |
![]() |
- ROS1 / ROS2(若需要用到ROS的相关插件)
- 包构建工具和拓展库构建工具
$ pip3 install -U --user build pip setuptools wheel
$ sudo apt install pybind11-dev
Note
(1)由于本工程包含二值拓展库,则无法使用development mode的安装方式,即
pip install -e .
(2)支持conda虚拟环境,但使用ROS的相关工具API时需保证虚拟环境的Python环境与ROS的Python环境保持一致
$ git clone https://github.com/Natsu-Akatsuki/PointCloud-PyUsage --depth=1
$ cd PointCloud-PyUsage
$ bash install.sh
# 若系统已安装则需先卸载
$ pip3 uninstall ampcl
$ bash install.sh
Note
使用开发模式可能出现
its build backend is missing the 'build_editable' hook
的报错,则可能是系统级别的setuptools
的版本覆盖了高版本的setuptools
。通过如下命令行可查询当前的版本python3 -c "import setuptools; print(setuptools.__version__)"
包名 | 作用 |
---|---|
io |
导入和导出点云文件 |
visualization |
点云可视化 |
ros |
动态调参,ROS消息类型和numpy类型的相互转换 |
filter |
点云下采样和直通滤波 |
- 支持
npy
,pcd
,bin
点云文件的读取 - 目前支持读取的字段只包括
xyz
,xyzi
(且需要是float32类型的数据),其他数据需参考代码自行调整
# >>> import usage >>>
from ampcl.io import load_pointcloud
# low-level API
pointcloud = load_npy("ampcl/data/pointcloud.npy")
pointcloud = load_txt("ampcl/data/pointcloud.txt")
pointcloud = load_pcd("ampcl/data/pointcloud_ascii.pcd")
# high-level API(支持npy, pcd, bin文件)
pointcloud = load_pointcloud(".ampcl/data/pointcloud.pcd")
# >>> export usage >>>
save_pointcloud(pointcloud, "pointcloud.pcd")
from pointcloud_utils.io import c_load_pcd
c_load_pcd(".ampcl/data/pointcloud_ascii.pcd")
- 支持ROS1和ROS2
from ampcl.ros.marker import create_bounding_box_marker
- 可视化激光点云
- 基于强度实现点云伪彩色增强
from ampcl.io import load_pointcloud
from ampcl.visualization import o3d_viewer_from_pointcloud
pointcloud = load_pointcloud("ampcl/data/pointcloud_ascii.pcd")
o3d_viewer_from_pointcloud(pointcloud)
- 基于ROS可视化KITTI数据集(三维目标检测),真值采用经OpenPCDet处理后的文件
$ cd dataset_visualization/3D_object_detection
# 步骤一:修改config/kitti.yaml中的数据集路径和相关参数
# 步骤二:启动程序
(ROS1) $ python3 visualize_pcdet_result_ros1.py
(ROS1) $ rviz -d kitti_ros1.rviz
(ROS2) $ python3 visualize_pcdet_result_ros2.py
(ROS2) $ rviz2 -d kitti_ros2.rviz
- 基于
Open3D
的点云可视化,支持npy
,pcd
,bin
点云文件的可视化,目前支持的字段包括xyz
,xyzi
- 强度字段使用了伪彩色增强
$ o3d_viewer <pointcloud_file>
# 如遇到KITTI数据集这种将强度进行过归一化的则需要加上-n选项
$ o3d_viewer -n <pointcloud_file>
Note
现仅支持读取字段为xyzi,格式为npy, pcd, bin的点云
# 默认转换为pcd
$ convert_pointcloud <点云文件名>
# 指定导出为npy格式
$ convert_pointcloud -t npy <点云文件名>
仓库 | 参考 |
---|---|
ros_numpy | ROS1 点云数据和numpy 数据相互转换 |
ros2_numpy | ROS1 点云数据和numpy 数据相互转换 |
ddynamic_reconfigure_python | ROS1 动态调参 |
OpenPCDet | 神经网络算子和标定 |
pykitti | KITTI 数据集读取 |
livox_mapping | 基于强度值的伪彩色 |
3D-Detection-Tracking-Viewer | 检测结果采用车体3D模型 |
EagerMOT | 检测框内的点赋予颜色信息 |
livox_horizon_loam | Livox自定义消息类型转换 |
AB3DMOT | 基于卡尔曼滤波的三维目标跟踪模块 |