【转载翻译】Open3D和PCL的一些比较
转自个人博客:【转载翻译】Open3D和PCL的一些比较
本人在逛Github时,发现一个解答Open3D和PCL对比的小文章,还挺有参考价值的
原文:https://github.com/LaplaceKorea/investigate_open3d_vs_pcl/blob/main/README.rst#whats-the-support-for-gpus-look-like-in-open3d-and-pcl
要注意的是这篇文章写在三年前,很多内容已经过时,注意辨别,文章使用的一些方法可以参考使用,自行验证最新的Open3D和PCL两者之间的情况。
Open3D在ROS社区的使用情况
这里有一个添加于ros/rosdistro#28352的rosdep密钥:python3-open3d-pip。 但是这个密钥不能在目前已发布的包中使用,它的存在说明了有人正在未发布的ROS包中使用它。
这里又有一个perception_open3d
库被发布到 Melodic 和 Noetic(ROS 1)中:ROS perception/reception_open3d,其最初可在 ntnu arl/open3d_ros 上获得。
这里又又有一个在ROS World 2020 Lightning上被交流的包,这个包依赖于Open3d,但在其package.xml
中没有列出rosdep密钥。相反,它的文档写着必须手动安装Open3D。其repo提供了一个转换包和一个示例包,它可以将open3d::t::geometry::PointCloud
、open3d::geometry::PointCloud
和sensor_msgs::PointCloud2
直之间来回转换。
还有一个狡猾的开发分支支持open3d::geometry::PointCloud
与sensor_msgs::PointCloud2
的来回转换,但尚未发布。
另外要注意的一个一个改进是为libopen3d-dev
、python3-open3d
和libopen3d0d
创建rosdep密钥。在Ubuntu的下一个LTS版本之前,这些软件包将无法在Rolling中使用。而Debian上游版本是0.9.0,在Ubuntu脱离Debian之前,花一些时间更新Debian版本可能是个好主意。
- https://packages.debian.org/bullseye/libopen3d-dev
- https://packages.debian.org/bullseye/libopen3d0d
- https://packages.debian.org/bullseye/python3-open3d
- https://packages.ubuntu.com/hirsute/libopen3d-dev
- https://packages.ubuntu.com/hirsute/python3-open3d
- https://packages.ubuntu.com/hirsute/libopen3d0d
这里又又又有一个Python包可以将Open3D类型转换为PointCloud消息(不知是否仅限ROS Melodic ?):SeungBack/Open3D ROS helper。
Open3D和PCL两者相比的发展程度
首先,简而言之,PCL和Open3D几乎是在差不多的开发速度上进行的。
使用下列命令查看库,并查看截至目前的可用提交数目
git log --since '2020/08/30' --dense --oneline | wc -l
得到默认分支下不同时间跨度的提交次数为:
库 | 3 年 | 1 年 | 6 个月 | 3 个月 |
---|---|---|---|---|
PCL | 2906 | 569 | 304 | 110 |
Open3D | 1717 | 690 | 344 | 153 |
它们在提交次数上几乎相似,而Open3D的提交次数在较近时间点提交的更多。
查看提交作者的数量
git log --since '2021/05/31' --dense --pretty=%an | sort | uniq | wc -l
得到在默认分支下不同时间跨度的贡献者数量:
库 | 3 年 | 1 年 | 6 个月 | 3 个月 |
---|---|---|---|---|
PCL | 160 | 58 | 41 | 24 |
Open3D | 106 | 50 | 27 | 19 |
他们的贡献者数量几乎也很相似,但PCL的贡献者更多。
Open3D和PCL在运行时间上的区别
本文使用 benchmark
文件夹下的代码可以进行这个问题的验证。本次验证使用了Debian Bullseye上Debian软件包中的Open3D 0.9.0 和 PCL 1.11.1。
cd benchmark
mkdir build
cd build
cmake ..
make
ln -s ../bunny.pcd
./iterative_closest_point
./voxel_downsample
因为这两个库应该具有相同的输出,所以同样使用体素下采样更合理。而结果是Open3D似乎要快得多。
$ ./voxel_downsample
2021-09-09T12:03:14-07:00
Running ./voxel_downsample
Run on (24 X 4950.19 MHz CPU s)
CPU Caches:
L1 Data 32 KiB (x12)
L1 Instruction 32 KiB (x12)
L2 Unified 512 KiB (x12)
L3 Unified 32768 KiB (x2)
Load Average: 0.27, 0.38, 0.36
***WARNING*** CPU scaling is enabled, the benchmark real time measurements may be noisy and will incur extra overhead.
-----------------------------------------------------
Benchmark Time CPU Iterations
-----------------------------------------------------
BM_open3d 12449 ns 12431 ns 56480
BM_pcl 49400 ns 49332 ns 14117
因为这两个库具有不同的收敛标准,所以直接比较ICP会有些不合理。就结果而言,PCL似乎具有旋转和平移阈值,而Open3D具有相对适应度和RMSE阈值。所以下面的数据可能没有用。
$ ./iterative_closest_point
2021-09-09T12:08:04-07:00
Running ./iterative_closest_point
Run on (24 X 4950.19 MHz CPU s)
CPU Caches:
L1 Data 32 KiB (x12)
L1 Instruction 32 KiB (x12)
L2 Unified 512 KiB (x12)
L3 Unified 32768 KiB (x2)
Load Average: 0.22, 0.32, 0.34
***WARNING*** CPU scaling is enabled, the benchmark real time measurements may be noisy and will incur extra overhead.
-----------------------------------------------------
Benchmark Time CPU Iterations
-----------------------------------------------------
BM_open3d 2002711 ns 1971130 ns 350
BM_pcl 15637302 ns 15633577 ns 45