成都专业手机网站建设服务seo程序
目录
一、点云数据路径
二、导入相关头文件
三、编写主程序代码
四、CMakeLists文件编写
五、rviz配置
参考链接:学习笔记:使用Octomap将点云地图pcd转换为三维栅格地图,并在rviz中可视化_点云地图转为占据栅格地图-CSDN博客
Octomap 在ROS环境下实时显示_octomap在ros环境下实时显示-飞天熊猫-CSDN博客
一、点云数据路径
https://github.com/RuPingCen/publish_pointcloud/tree/master/data
二、导入相关头文件
#include <ros/ros.h>
#include <pcl/point_cloud.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/io/pcd_io.h>
#include <sensor_msgs/PointCloud2.h>
三、编写主程序代码
int main(int argc, char** argv) {ros::init(argc, argv, "publish_pointcloud"); // 初始化ROS节点ros::NodeHandle nh; // 创建节点句柄// 从参数服务器获取参数std::string path = "/home/yzh/catkin_ws_acados_mpc/src/mpc_controller/data/test2.pcd";std::string frame_id = "map";std::string topic = "pointcloud_topic";int hz = 5; // 发布频率,单位 Hz// 加载点云数据到pcl::PointCloud对象中pcl::PointCloud<pcl::PointXYZ> pcl_cloud; pcl::io::loadPCDFile(path, pcl_cloud); // 从文件加载点云数据// 创建Publisher对象,将点云数据发布到指定话题ros::Publisher pcl_pub = nh.advertise<sensor_msgs::PointCloud2>(topic, 10); // 转换PCL点云到ROS下的 PointCloud2 类型sensor_msgs::PointCloud2 output; pcl::toROSMsg(pcl_cloud, output);output.header.stamp = ros::Time::now(); // 设置时间戳output.header.frame_id = frame_id; // 设置坐标系框架// 打印参数信息std::cout << "path = " << path << std::endl;std::cout << "frame_id = " << frame_id << std::endl;std::cout << "topic = " << topic << std::endl;std::cout << "hz = " << hz << std::endl;ros::Rate loop_rate(hz); // 设置发布频率 while (ros::ok()) { pcl_pub.publish(output); // 发布 PointCloud2 数据ros::spinOnce(); // 处理所有回调函数loop_rate.sleep(); // 按照指定频率睡眠}
四、CMakeLists文件编写
主要是将点云相关的包找到。
cmake_minimum_required(VERSION 3.0.2)
project(mpc_controller)
find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgs
)
find_package(PCL REQUIRED)
include_directories(${catkin_INCLUDE_DIRS}${PCL_INCLUDE_DIRS}
)
target_link_libraries(map_node${catkin_LIBRARIES}${PCL_LIBRARIES}
)
五、rviz配置
给点云变颜色,根据z轴变颜色。