1.创建pkg
catkin_create_pkg pcl_VoxelGrid roscpp pcl_ros pcl_conversions sensor_msgs
2.src下新建test.cpp
#include <ros/ros.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/point_cloud.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/point_cloud_geometry_handlers.h>
#include <pcl/visualization/impl/point_cloud_geometry_handlers.hpp>
ros::Publisher pub;
void pointCloudCallback(const sensor_msgs::PointCloud2ConstPtr& msg)
{
// 将ROS消息转换为PCL点云数据
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::fromROSMsg(*msg, *cloud);
// 创建可视化对象
static pcl::visualization::PCLVisualizer viewer("Point Cloud Viewer");
// 清除旧的点云数据
viewer.removeAllPointClouds();
// 将点云添加到可视化对象
viewer.addPointCloud(cloud, "cloud");
// 设置相机参数(可选)
// viewer.setCameraPosition(0, 0, -2, 0, -1, 0, 0);
// 更新可视化窗口
viewer.spinOnce();
}
int
main (int argc, char** argv)
{
// Initialize ROS
ros::init (argc, argv, "my_pcl_tutorial");
ros::NodeHandle nh;
// Create a ROS subscriber for the input point cloud
ros::Subscriber sub = nh.subscribe<sensor_msgs::PointCloud2> ("/livox/lidar", 1, pointCloudCallback);
// Create a ROS publisher for the output point cloud
pub = nh.advertise<sensor_msgs::PointCloud2> ("filtered_points", 1);
// Spin
ros::spin ();
}
3.直接编译会报错
pcl::visualization::PCLVisualizer::PCLVisualizer(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, bool)’未定义的引用
诸如此类很多未定以的引用
这个报错通常表示找不到PCLVisualizer构造函数的定义。
解决办法:
在CMakeLists.txt文件中的target_link_libraries部分添加pcl_visualization和pcl_io
具体如下:
target_link_libraries(your_target_name
...
pcl_visualization
pcl_io
)