realsenseD435i 通过rviz显示滤波前后点云数据

1 篇文章 0 订阅
1 篇文章 0 订阅
本文档详细介绍了如何在ROS环境中利用PCL库进行点云数据的滤波处理。首先创建工作空间和功能包,接着编写cpp文件实现点云滤波功能,然后修改package.xml和CMakeLists.txt文件以完成编译配置。编译完成后,启动相机获取点云数据,运行滤波程序,最后在rviz中对比展示滤波前后的点云效果。
摘要由CSDN通过智能技术生成

一、创建workspace+修改package.xml+修改CMakeLists .txt
1.创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/.catkin_ws/src
catkin_init_workspace
2.创建功能包
catkin_create_pkg my_pcl_tutorial pcl_conversions pcl_ros roscpp sensor_msgs
3.编写.cpp文件
cd my_pcl_tutorial
gedit example.cpp
在example.cpp中复制以下程序:

#include <ros/ros.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h> //滤波的头文件
ros::Publisher pub; //申明发布器
//回调函数
void cloud_cb (const sensor_msgs::PointCloud2ConstPtr& cloud_msg)
{
// 声明存储原始数据与滤波后的数据的点云的格式
// Container for original & filtered data
pcl::PCLPointCloud2* cloud = new pcl::PCLPointCloud2; //原始的点云的数据格式
pcl::PCLPointCloud2ConstPtr cloudPtr(cloud);
pcl::PCLPointCloud2 cloud_filtered;//存储滤波后的数据格式
// Convert to PCL data type。转化为PCL中的点云的数据格式
pcl_conversions::toPCL(cloud_msg, cloud);
// Perform the actual filtering进行一个滤波处理
pcl::VoxelGridpcl::PCLPointCloud2 sor; //创建滤波对象
sor.setInputCloud(cloudPtr); //设置输入的滤波,将需要过滤的点云给滤波对象
sor.setLeafSize (0.1, 0.1, 0.1); //设置滤波时创建的体素大小为1cm立方体
sor.filter (cloud_filtered);//执行滤波处理,存储输出cloud_filtered
// Convert to ROS data type。// 再将滤波后的点云的数据格式转换为ROS下的数据格式发布出去
sensor_msgs::PointCloud2 output;//声明的输出的点云的格式
pcl_conversions::moveFromPCL(cloud_filtered, output);//第一个参数是输入,后面的是输出
// Publish the data
pub.publish (output);
}
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> (“input”, 1, cloud_cb);
// Create a ROS publisher for the output point cloud
//创建ROS的发布节点
pub = nh.advertise<sensor_msgs::PointCloud2> (“output”, 1);
// Spin回调
ros::spin ();
}
在这里插入图片描述

4.修改package.xml:打开package.xml文件后,加入
<build_depend>libpcl-all-dev</build_depend>
<exec_depend>libpcl-all</exec_depend>
5.修改CMakeLists .txt:打开后,在###Build ###最后加入:
add_executable(example src/example.cpp)
target_link_libraries(example ${catkin_LIBRARIES})
二、编译
cd catkin_ws
catkin_make
编译通过后输入source devel/setup.bash,再输入roscore
三、启动相机
roslaunch realsense2_camera rs_rgbd.launch
四、新打开一个终端,运行摄像头点云数据降采样程序
rosrun my_pcl_tutorial example input:=/camera/depth_registered/points
五、显示滤波前后数据:
再打开一个终端输入:rviz,
1.Fixed Frame 选择:camera_depth_frame
2.显示滤波前的点云数据:
Add->By display Type->PointCloud2
并修改Topic在这里插入图片描述

3.显示滤波后的点云数据:
Add->By Topic->/output->PointCloud2
在这里插入图片描述
参考链接:https://blog.csdn.net/jack20030552/article/details/80269486

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值