linux如何运行pcl程序,ubuntu pcl 初步使用读取pcd文件

环境:Ubuntu 16.04

当我们安装好PCL之后 (安装方法见:ubuntu16.04 安装 pcl),我们使用pcl来3D显示一个pcd文件内容

下载一个pcd文件 rabbit.pcd

将rabbit.pcd文件放在文件夹中,打开终端输入

pcl_viewer rabbit.pcd

34de463d64829ef9ddbdff190fb3e987.png

滚动鼠标滚轮,可以看到兔子的3D点云

4a222d4555840153d98d328fa4692783.png

二、编写程序 读取pcd文件内容

1、在pcd文件同级目录下创建  pcl_test.cpp  CMakeLists.txt

96ad24060382a5a84d81e82f7c077ce6.png

CMakeList.txt

cmake_minimum_required(VERSION 2.6)

project(pcl_test)

find_package(PCL 1.2 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})

link_directories(${PCL_LIBRARY_DIRS})

add_definitions(${PCL_DEFINITIONS})

add_executable(pcl_test pcl_test.cpp)

target_link_libraries (pcl_test ${PCL_LIBRARIES})

install(TARGETS pcl_test RUNTIME DESTINATION bin)

pcl_test.cpp

#include

#include

#include

int main(int argc, char** argv)

{

//创建了一个名为cloud的指针,储存XYZ类型的点云数据

pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);

//*打开点云文件

if (pcl::io::loadPCDFile<:pointxyz>("rabbit.pcd", *cloud) == -1) {

PCL_ERROR("Couldn't read file rabbit.pcd\n");

return(-1);

}

std::cout << "Loaded:" << cloud->width*cloud->height<

//输出点云数据

for (size_t i = 0; i < cloud->points.size(); ++i) {

std::cout << " " << cloud->points[i].x << " " << cloud->points[i].y << " " << cloud->points[i].z << " " << std::endl;

}

return 0;

}

说明:

PointCloud是PCL中的一个基类,pcl::PointCloud<:pointxyz>::Ptr是一个Boost共享指针

PointCloud中的数据域

width(int),如果是无组织,无结构的点云数据,表示点云的个数;如果是有结构的点云数据,表示点云数据集一行的点数。

height(int),如果是无结构的点云数据,height=1;如果是有结构的点云数据,height表示点云总行数。

points(std::vector)存储了数据类型为PointT的一个动态数组。

PointXYZ 是最常见的一个点数据类型,它只包含三维X,Y,Z坐标信息

X:points[i].x

size_t 整型,保存一个整数,记录一个大小(size)

points.size() 表示点云数据大小

在终端中输入

cmake .

make

33805039c116a29ad762880fc28d5458.png

生成可执行程序pcl_test

运行 pcl_test 可看到点云数据

2、 数据可视化

pcl_test.cpp

#include

#include

#include

#include

int main(int argc, char** argv) {

pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);

//*打开点云文件

if (pcl::io::loadPCDFile<:pointxyz>("rabbit.pcd", *cloud) == -1) {

PCL_ERROR("Couldn't read file rabbit.pcd\n");

return(-1);

}

std::cout << cloud->points.size() << std::endl;

pcl::visualization::CloudViewer viewer("cloud viewer");

viewer.showCloud(cloud);

while (!viewer.wasStopped()) {

}

return 0;

}

终端中重新编译

make

./pcl_test

e53df7ea4076948c5ad2fbc2c45d0e39.png

3、修改背景

pcl_test.cpp

#include

#include

#include

#include

void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {

viewer.setBackgroundColor(1.0f, 0.5f, 1.0f);

}

int main(int argc, char** argv) {

pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);

//*打开点云文件

if (pcl::io::loadPCDFile<:pointxyz>("rabbit.pcd", *cloud) == -1) {

PCL_ERROR("Couldn't read file rabbit.pcd\n");

return(-1);

}

std::cout << cloud->points.size() << std::endl;

pcl::visualization::CloudViewer viewer("cloud viewer");

viewer.showCloud(cloud);

viewer.runOnVisualizationThreadOnce(viewerOneOff);

while (!viewer.wasStopped()) {

}

return 0;

}

64e28b45bad6440e302c0e403636572c.png

4、

pcl_test.cpp

#include

#include

#include

#include

int user_data;

void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {

viewer.setBackgroundColor(1.0f, 0.5f, 1.0f);

}

void

viewerPsycho(pcl::visualization::PCLVisualizer& viewer)

{

static unsigned count = 0;

std::stringstream ss;

ss << "Once per viewer loop: " << count++;

viewer.removeShape("text", 0);

viewer.addText(ss.str(), 20, 100, "text", 0);//this is to set the coordination of text "Once per viewer loop:"

user_data++;

}

int main(int argc, char** argv) {

pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);

//*打开点云文件

if (pcl::io::loadPCDFile<:pointxyz>("rabbit.pcd", *cloud) == -1) {

PCL_ERROR("Couldn't read file rabbit.pcd\n");

return(-1);

}

std::cout << cloud->points.size() << std::endl;

pcl::visualization::CloudViewer viewer("cloud viewer");

viewer.showCloud(cloud);

viewer.runOnVisualizationThreadOnce(viewerOneOff);

viewer.runOnVisualizationThread(viewerPsycho);

while (!viewer.wasStopped()) {

}

return 0;

}

754257b92f69d1c2de8328d881b47c63.png

标签:PCL,test,pcl,ubuntu,点云,include,pcd

来源: https://www.cnblogs.com/birdBull/p/14467655.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将CSV文件换为PCD文件,需要进行以下步骤: 1. 首先,确保已安装PCL(Point Cloud Library)软件包。在终端中执行以下命令安装PCL: ``` sudo apt-get install pcl-tools ``` 2. 将CSV文件保存为文本文件,以便在终端中进行处理。可以使用文本编辑器打开CSV文件,然后将其另存为文本文件。 3. 打开终端并导航到保存的文本文件所在目录。 4. 运行以下命令将CSV文件换为PCD文件: ``` csv2pcd input.csv output.pcd ``` 其中,`input.csv`是保存的CSV文件名称,`output.pcd`是要生成的PCD文件的名称。 5. 执行命令后,PCD文件将在同一目录下生成。 请注意,换过程中可能需要根据CSV文件的格式和内容进行一些额外的处理或调整。在使用PCL进行点云换时,确保CSV文件正确格式化和包含所需的数据字段。 ### 回答2: 在Ubuntu 18.04中将CSV文件换成PCD文件,即将逗号分隔值(CSV)格式的点云数据换为点云数据(PCD)格式,可以按照以下步骤进行操作: 1. 首先,你需要安装PCL(Point Cloud Library)库,它是用于处理点云数据的通用库。在终端中运行以下命令安装PCL: ``` sudo apt-get install libpcl-dev ``` 2. 确保你的CSV文件以逗号分隔,并且每行代表一个点的坐标。例如,一个CSV文件可能看起来像这样: ``` x,y,z 1.0,2.0,3.0 4.0,5.0,6.0 ... ``` 3. 创建一个新的文本文件,将其命名为`csv2pcd.cpp`。将以下代码复制粘贴到文件中: ```cpp #include <iostream> #include <chrono> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int main (int argc, char** argv) { // 读取CSV文件的路径 std::string csvFile = "path_to_your_csv_file.csv"; // 将CSV文件换为PCD文件的路径 std::string pcdFile = "path_to_save_pcd_file.pcd"; pcl::PointCloud<pcl::PointXYZ> cloud; std::ifstream file(csvFile); if (!file.is_open()) { PCL_ERROR ("Could not open file '%s'!\n", csvFile.c_str ()); return -1; } std::string line; while (std::getline (file, line)) { if (line[0] == '#') continue; pcl::PointXYZ point; std::istringstream iss(line); std::string token; int i = 0; while (std::getline (iss, token, ',')) { if (i == 0) point.x = std::stof(token); else if (i == 1) point.y = std::stof(token); else if (i == 2) point.z = std::stof(token); i++; } cloud.push_back(point); } cloud.width = cloud.size (); cloud.height = 1; cloud.is_dense = true; pcl::io::savePCDFileBinaryCompressed(pcdFile, cloud); std::cout << "Successfully converted CSV to PCD!" << std::endl; return 0; } ``` 4. 替换代码中的`csvFile`为你的CSV文件的路径,将`pcdFile`替换为你想要保存换后PCD文件的路径。 5. 保存并关闭`csv2pcd.cpp`文件。 6. 在终端中进入包含`csv2pcd.cpp`文件的目录,并通过以下命令编译源代码: ``` g++ csv2pcd.cpp -o csv2pcd -l pcl_io ``` 7. 运行以下命令将CSV文件换为PCD文件: ``` ./csv2pcd ``` 8. 当程序运行完毕后,你将在指定的PCD文件路径中找到换后的PCD文件。 这是将CSV文件换成PCD文件的基本步骤。请根据你的CSV文件路径和保存PCD文件路径进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值