Skip to content

provide python API for pointcloud-based algorithm development and validation

Notifications You must be signed in to change notification settings

Natsu-Akatsuki/PointCloud-PyUsage

Repository files navigation

AmPCL

Attention

仓库在更新迭代中,相关API可能不稳定,欢迎IssuePR

人生苦短,我选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 点云下采样和直通滤波

IO

  • 支持npypcdbin点云文件的读取
  • 目前支持读取的字段只包括xyzxyzi(且需要是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")

ROS

  • 支持ROS1和ROS2
from ampcl.ros.marker import create_bounding_box_marker

Visualization

  • 可视化激光点云
  • 基于强度实现点云伪彩色增强
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

img

命令行

可视化点云

  • 基于Open3D的点云可视化,支持npypcdbin点云文件的可视化,目前支持的字段包括xyzxyzi
  • 强度字段使用了伪彩色增强
$ o3d_viewer <pointcloud_file>
# 如遇到KITTI数据集这种将强度进行过归一化的则需要加上-n选项
$ o3d_viewer -n <pointcloud_file>

img

>**Note** > >可视化的耗时主要源于`import`部分

点云类型转换

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 基于卡尔曼滤波的三维目标跟踪模块

About

provide python API for pointcloud-based algorithm development and validation

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published