自定义速腾激光雷达点云XYZIRT格式并调用PCL库进行滤波
创始人
2024-05-24 13:32:33
0

目录

  • 一、试验程序源代码
    • 1.1需要包含的头文件
    • 1.2定义点云结构
    • 1.3主函数
    • 1.4 CMake文件
  • 二、学习pcl::PCLPointCloud2::Ptr
    • 2.1区别
    • 2.2转换
    • 2.3心得


Windows 10 + Ubuntu 20.04 + VS Code
激光雷达速腾RS-LiDAR-32 + sdk v1.5.7

速腾激光雷达的ROS程序包可以输出XYZIRT格式,但是PCL库的点没有这种类型,需要进行自定义,并可以进行直通滤波和体素滤波等下采样处理。

一、试验程序源代码

1.1需要包含的头文件

#include 	
#include #include 
#include 	        
#include 	    #include 
#include 

1.2定义点云结构

struct MyPointType
{PCL_ADD_POINT4D;float intensity;uint16_t ring = 0;double timestamp = 0;EIGEN_MAKE_ALIGNED_OPERATOR_NEW
} EIGEN_ALIGN16;POINT_CLOUD_REGISTER_POINT_STRUCT(MyPointType,    //注册点类型宏(float ,x,x)(float ,y,y)(float ,z,z)(float ,intensity,intensity)(uint16_t ,ring,ring)(double ,timestamp,timestamp)
)

1.3主函数

int main(int argc, char** argv)
{pcl::PCLPointCloud2::Ptr cloud_in(new pcl::PCLPointCloud2());pcl::PCLPointCloud2::Ptr cloud_filtered(new pcl::PCLPointCloud2());pcl::PointCloud::Ptr cloud_voxel(new pcl::PointCloud);pcl::PointCloud::Ptr cloud_pass(new pcl::PointCloud);pcl::PCDReader reader;reader.read("../111.pcd", *cloud_in); // Remember to download the file first!pcl::VoxelGrid sor;sor.setInputCloud(cloud_in);sor.setLeafSize(0.1f, 0.1f, 0.1f);sor.filter(*cloud_filtered);pcl::fromPCLPointCloud2(*cloud_filtered, *cloud_voxel);pcl::io::savePCDFile("../voxel.pcd", *cloud_voxel);pcl::PassThrough  pass;pass.setInputCloud (cloud_in);pass.setFilterFieldName ("y");pass.setFilterLimits (5, 100);pass.setFilterLimitsNegative (false);pass.filter (*cloud_filtered);pcl::fromPCLPointCloud2(*cloud_filtered, *cloud_pass);pcl::io::savePCDFile("../pass.pcd", *cloud_pass);
}

1.4 CMake文件

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)project(ring_time)find_package(PCL 1.2 REQUIRED)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
set(CMAKE_CXX_STANDARD 14)find_package(Boost REQUIRED COMPONENTS thread)
include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIRS})
add_definitions(-DBOOST_ALL_DYN_LINK)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})aux_source_directory(. ALL_SRCS)add_executable (ring_time ring_time.cpp ${ALL_SRCS})
target_link_libraries (ring_time ${PCL_LIBRARIES})

二、学习pcl::PCLPointCloud2::Ptr

直接用pcl::PointCloud::Ptr 无法调用PCL的滤波函数。

2.1区别

pcl::PCLPointCloud2是为了与ROS更加兼容的PCL数据结构
pcl::PointCloud是PCL数据标准结构
用pcl::PCLPointCloud2处理完后,转换成pcl::PointCloud进行保存。

2.2转换

PCL中有两个函数直接解决了两者的转换关系:
1.pcl::fromPCLPointCloud2()
2.pcl::toPCLPointCloud2()
//cloud_filtered转换为cloud_pass,从pcl::PCLPointCloud2格式转换为模板点云pcl::PointCloud
1、pcl::fromPCLPointCloud2(*cloud_filtered, *cloud_pass);
2、与1相反

  fromPCLPointCloud2 (const pcl::PCLPointCloud2& msg, pcl::PointCloud& cloud){MsgFieldMap field_map;createMapping (msg.fields, field_map);    //创建一个field索引表fromPCLPointCloud2 (msg, cloud, field_map);       //转换点云}

2.3心得

1、处理带ring的点云需要自定义格式,而且要用到pcl::PCLPointCloud2::Ptr进行处理
2、直通滤波只能XYZI,不能滤除intensity和timestamp信息
3、发现一个VS Code里一个好用的pcd点云查看拓展vscode-3d-preview

参考资料:
链接: PCL自定义点和点云使用
链接: pcl::PCLPointCloud2 Struct Reference
链接: PCL点云类型之间相互转换
链接: PCL点云滤波

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...