环境:ubuntu20.04+pcl1.9.0 其他版本ubuntu都可,首先确定你已安装了pcl和cmake
1、新建文件夹,创建cpp文件和cmakelists文件
alt+ctrl+t //新开终端
mkdir pcdtotxt
cd pcdtotxt
touch pcdtotxt.cpp
touch CMakeLists.txt
2、在pcdtotxt.cpp粘贴如下内容
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
using namespace std;
void pclDownsize(pcl::PointCloud<pcl::PointXYZ>::Ptr in, pcl::PointCloud<pcl::PointXYZ>::Ptr out)
{
pcl::VoxelGrid<pcl::PointXYZ> down_filter;
float leaf = 0.1;
down_filter.setLeafSize(leaf, leaf, leaf);
down_filter.setInputCloud(in);
down_filter.filter(*out);
}
int main(int argc, char *argv[])
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>("/home/lds/pcdtotxt/trajectory.pcd", *cloud) == -1)
{
PCL_ERROR("Couldn't read file chuli.pcd\n");
return (-1);
}
cout << "points cloud is successfully loaded! " << endl;
int Num = cloud->points.size();
double *X = new double[Num] {0};
double *Y = new double[Num] {0};
double *Z = new double[Num] {0};
cout << "size is : " << cloud->points.size() << endl;
for (size_t i = 0; i < cloud->points.size(); ++i)
{
X[i] = cloud->points[i].x;
Y[i] = cloud->points[i].y;
Z[i] = cloud->points[i].z ;
cout << "first " << i << " of " << Num << endl;
}
ofstream zos("trajectory.txt");
for (int i = 0; i< cloud->points.size(); i++)
{
zos << X[i] << " " << Y[i] << " " << Z[i] << endl;
cout << "second " << i << " of " << Num << endl;
}
cout << "transition has done!" << endl;
return 0;
}
修改/home/lds/pcdtotxt/trajectory.pcd,将pcd拖进pcdtotxt文件夹打开终端输入pwd查看你的路径
3、在CMakeLists.txt粘贴如下内容
cmake_minimum_required(VERSION 2.8)
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++14 -O2")
find_package(PCL REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_executable (pcdtotxt pcdtotxt.cpp)
target_link_libraries(pcd2txt ${PCL_LIBRARIES})
如果你是ubuntu16.04需要将第三行c++14改为c++11 (ubuntu16.04默认使用c++11编译)
4、在pcdtotxt文件夹下打开终端编译cpp文件
cmake .
make
./pcdtotxt //执行cpp文件