SLAM 将PCL点云转换成彩色的八叉树地图
·
这个程序可以把PCL点云压缩成带颜色的八叉树地图。
先看一下输入数据,是一个咖啡厅的一小部分:

程序运行后会生成带颜色的八叉树地图,使用octovis查看:
把输出结果按高度染色:

输入:任意PCL点云 <pointcloud.pcd>
输出:八叉树地图 <pointcloud.ot>
运行:编译后在cmd里带参数才能运行 <pointcloud.pcd> <pointcloud.ot>
示例:program,exe sample.pcd sample.ot
视频演示:https://www.bilibili.com/video/BV15NVb6zENo/
代码:
#include <iostream>
#include <assert.h>
//pcl
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
//octomap
#include <octomap/octomap.h>
#include <octomap/ColorOcTree.h>
using namespace std;
int main( int argc, char** argv )
{
if (argc != 3)
{
cout<<"Usage: pcd2colorOctomap <input_file> <output_file>"<<endl;
return -1;
}
string input_file = argv[1], output_file = argv[2];
pcl::PointCloud<pcl::PointXYZRGBA> cloud;
pcl::io::loadPCDFile<pcl::PointXYZRGBA> ( input_file, cloud );
cout<<"point cloud loaded, piont size = "<<cloud.points.size()<<endl;
//声明octomap变量
cout<<"copy data into octomap..."<<endl;
// 创建带颜色的八叉树对象,参数为分辨率,这里设成了0.05
octomap::ColorOcTree tree( 0.05 );
for (auto p:cloud.points)
{
// 将点云里的点插入到octomap中
tree.updateNode( octomap::point3d(p.x, p.y, p.z), true );
}
// 设置颜色
for (auto p:cloud.points)
{
tree.integrateNodeColor( p.x, p.y, p.z, p.r, p.g, p.b );
}
// 更新octomap
tree.updateInnerOccupancy();
// 存储octomap, 注意要存成.ot文件而非.bt文件
tree.write( output_file );
cout<<"done."<<endl;
return 0;
}
更多推荐

所有评论(0)