从ROS Bag文件提取点云数据并保存为PCD格式进行处理 ros ubuntu

从ROS Bag文件提取点云数据并保存为PCD格式进行处理

要从ROS bag文件中有效地提取点云数据并利用PCL库对其进行进一步处理,需要通过一系列精确且专业的操作。下面是一个详细的步骤指南,这些步骤不仅详细介绍了如何操作,而且强调了确保数据处理质量和效率的关键点。

步骤 1: 环境配置

确保系统中正确安装了ROS和PCL,这是进行点云数据处理的基础。

  1. 安装ROS:

    • 访问ROS官方网站下载并安装适合您操作系统的ROS版本。这将包括所有基础包和通信框架。
  2. 安装PCL:

    • 如果PCL未随ROS一起安装,您可以通过以下命令在Ubuntu上安装PCL库:
      sudo apt-get install libpcl-dev
      
  3. 安装pcl_ros:

    • pcl_ros是PCL和ROS之间的接口,它简化了两者间的数据转换操作。安装此包通过:
      sudo apt-get install ros-[ros-version]-pcl-ros
      
    • 请将[ros-version]替换为您的ROS版本,如melodicnoetic

步骤 2: 创建并配置ROS节点

为了从bag文件中提取点云数据,您需要创建一个专门的ROS节点。

  1. 创建ROS包:

    • 打开终端,初始化您的工作区,创建一个新的ROS包:
      source /opt/ros/[ros-version]/setup.bash
      mkdir -p ~/catkin_ws/src
      cd ~/catkin_ws/src
      catkin_create_pkg extract_pcd roscpp pcl_ros sensor_msgs pcl_conversions
      cd ..
      catkin_make
      source devel/setup.bash
      
  2. 编写节点代码:

    • src目录下创建名为extract_pcd.cpp的文件,编写代码以订阅点云数据,并将其保存为PCD文件:
      #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/io/pcd_io.h>
      
      void cloudCallback(const sensor_msgs::PointCloud2ConstPtr& cloud_msg) {
          pcl::PointCloud<pcl::PointXYZ> cloud;
          pcl::fromROSMsg(*cloud_msg, cloud);
          pcl::io::savePCDFileASCII("saved_cloud.pcd", cloud);
          ROS_INFO("Saved PCD file.");
      }
      
      int main(int argc, char **argv) {
          ros::init(argc, argv, "extract_pcd");
          ros::NodeHandle nh;
          ros::Subscriber sub = nh.subscribe("input_topic", 1, cloudCallback);
          ros::spin();
          return 0;
      }
      
    • 这段代码负责从指定主题接收点云消息,并转换后保存为PCD格式。
  3. 编译包:

    • 返回到catkin工作目录,使用catkin_make来编译您的ROS包。

步骤 3: 运行节点并播放Bag文件

  1. 启动处理节点:

    • 新开一个终端,激活环境并启动节点:
      source ~/catkin_ws/devel/setup.bash
      rosrun extract_pcd extract_pcd
      
  2. 播放Bag文件:

    • 在另一终端中播放Bag文件以提供数据源:
      rosbag play path_to_your_bag_file
      

步骤 4: 使用PCL进行后续处理

  1. 处理PCD文件:

    • 创建另一个C++程序,如process_pcd.cpp,使用PCL进行点云过滤或其他处理:
      #include <iostream>
      #include <pcl/io/pcd_io.h>
      #include <pcl/point_cloud.h>
      #include <pcl/point_types.h>
      #include <pcl/filters/voxel_grid.h>
      
      int main() {
          pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());
          pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>());
      
          if (pcl::io::loadPCDFile<pcl::PointXYZ>("saved_cloud.pcd", *cloud) == -1) {
              PCL_ERROR("Couldn't read file saved_cloud.pcd \n");
              return -1;
          }
      
          pcl::VoxelGrid<pcl::PointXYZ> sor;
          sor.setInputCloud(cloud);
          sor.setLeafSize(0.01f, 0.01f, 0.01f);
          sor.filter(*cloud_filtered);
      
          pcl::io::savePCDFileASCII("filtered_cloud.pcd", *cloud_filtered);
          std::cout << "Filtered cloud saved." << std::endl;
      
          return 0;
      }
      
  2. 编译并运行处理程序:

    • 使用g++或CMake编译并运行此程序以处理保存的PCD文件。

总结

以上步骤为您提供了一个系统性的方法,通过ROS和PCL处理从bag文件中提取的点云数据。这一流程旨在确保数据的精确处理,同时为点云数据的进一步应用打下坚实基础。这种方法不仅适用于机器人领域,还适用于其他需要精确三维数据处理的科学和工程应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915524.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

29.电影院售票系统(基于springboot和vue的Java项目)

目录 1.系统的受众说明 2 论文背景 2.1 国内研究现状&#xff1a; 2.2 国外研究现状&#xff1a; ​​​​​​​2.3 所用技术 3 系统需求分析 ​​​​​​​3.1 需求分析 ​​​​​​​3.2 可行性分析 3.2.1技术可行性分析 3.2.2市场可行性分析 3.2.3经济可…

(一)<江科大STM32>——软件环境搭建+新建工程步骤

一、软件环境搭建 &#xff08;1&#xff09;安装 Keil5 MDK 文件路径&#xff1a;江科大stm32入门教程资料/Keil5 MDK/MDK524a.EXE&#xff0c;安装即可&#xff0c;路径不能有中文。 &#xff08;2&#xff09;安装器件支持包 文件路径&#xff1a;江科大stm32入门教程资料…

热点更新场景,OceanBase如何实现性能优化

案例背景 这个案例来自一个保险行业的客户&#xff1a;他们的核心系统底层采用了OceanBase数据库作为存储解决方案&#xff0c;然而&#xff0c;在系统上线运行后&#xff0c;出现了一个异常情况&#xff0c;执行简单的主键更新语句时SQL执行时间出现了显著的波动。为了迅速定…

从0开始学习机器学习--Day24--核函数

核函数(Kernelsl function) 非线性数据的决策边界 对于非线性问题来说&#xff0c;决策边界在很多时候都是曲线&#xff0c;需要我们在假设函数中加入高阶多项式来拟合原始数据&#xff0c;这对于算法来说需要很长的运行时间去计算这些高阶多项式&#xff0c;那么有没有更高效…

Unity学习笔记(4):人物和基本组件

文章目录 前言开发环境新增角色添加组件RigidBody 2D全局项目设置Edit 给地图添加碰撞体 总结 前言 今天不加班&#xff0c;有空闲时间。争取一天学一课&#xff0c;养成习惯 开发环境 Unity 6windows 11vs studio 2022Unity2022.2 最新教程《勇士传说》入门到进阶&#xff…

【C++】字符串相乘

1.题目 2.代码 介绍一种比较简单的方法&#xff0c;就是先将字符串逆序&#xff0c;然后取出其中每一位的数相乘、相加。最后再考虑进位问题。 class Solution { public:string multiply(string num1, string num2) {//先排除边界情况&#xff0c;防止输出"00000...&quo…

Pycharm PyQt5 环境搭建创建第一个Hello程序

第一步: 创建Pycharm项目,下载包: pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/下载好了之后,可以看到相应包: PyQt5:PyQt5是一套Python绑定Digia QT5应用的框架。Qt库是最…

新手小白学习docker第六弹------Docker常规安装(安装tomcat、mysql、redis)

目录 1 总体步骤2 安装tomcat2.1 搜索镜像2.2 拉取镜像2.3 查看镜像2.4 启动镜像2.5 访问猫首页 3 安装mysql3.1 搜索镜像3.2 拉取镜像3.3 启动镜像 4 安装redis4.1 拉取镜像4.2 启动镜像&#xff08;法1基础版&#xff09;4.3 配置文件4.3.1 在宿主机下新建目录 /app/redis4.3…

python基础大杂烩

命令提示符程序&#xff0c;输入python&#xff0c;运行python程序 代码通过解释器程序翻译给计算机去执行 命令提示符输入的python本质上就是调用D:/dev/python/python3.12.5/python.exe这个解释器程序 有python程序将输入的代码翻译成二进制的0和1&#xff0c;去向计算机去运…

【数字图像处理+MATLAB】对图片进行伽马校正(Gamma Correction):使用幂律变换公式进行伽马变换

引言 伽马校正&#xff08;Gamma Correction&#xff09;是一种用于图像处理的技术&#xff0c;主要用于调整图像的亮度或对比度。其基本原理是对图像的每一个像素应用一个非线性变换&#xff0c;以更好地适应人眼的视觉感知。在数字图像处理中&#xff0c;伽马校正通常用于调…

Golang | Leetcode Golang题解之第553题最优除法

题目&#xff1a; 题解&#xff1a; func optimalDivision(nums []int) string {n : len(nums)if n 1 {return strconv.Itoa(nums[0])}if n 2 {return fmt.Sprintf("%d/%d", nums[0], nums[1])}ans : &strings.Builder{}ans.WriteString(fmt.Sprintf("%d…

基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路

一、项目概述 随着电动车的普及&#xff0c;充电桩作为关键基础设施&#xff0c;其智能化、网络化管理显得尤为重要。本项目旨在基于STM32微控制器开发一款智能充电桩&#xff0c;能够实现高效的充电监控与管理。项目通过物联网技术&#xff0c;提供实时数据监测、远程管理、用…

性能高于Transformer模型1.7-2倍,彩云科技发布基于DCFormer架构通用大模型云锦天章

2017年&#xff0c;谷歌发布《Attention Is All You Need》论文&#xff0c;首次提出Transformer架构&#xff0c;掀开了人工智能自然语言处理&#xff08;NLP&#xff09;领域发展的全新篇章。Transformer架构作为神经网络学习中最重要的架构&#xff0c;成为后来席卷全球的一…

黄仁勋:AI革命将创百万亿美元价值!近屿智能带你入局AIGC

11月13日&#xff0c;NVIDIA在日本成功举办了2024年AI峰会。一场关于人工智能驱动的新工业革命的讨论热烈展开。英伟达创始人兼CEO黄仁勋与软银主席兼CEO孙正义共同探讨了当前技术革命的独特之处及其深远影响。 黄仁勋在会上表示&#xff0c;AI革命将创造的价值不是以万亿美元计…

大数据面试题--kafka夺命连环问(后10问)

目录 16、kafka是如何做到高效读写&#xff1f; 17、Kafka集群中数据的存储是按照什么方式存储的&#xff1f; 18、kafka中是如何快速定位到一个offset的。 19、简述kafka中的数据清理策略。 20、消费者组和分区数之间的关系是怎样的&#xff1f; 21、kafka如何知道哪个消…

Vue2:组件

Vue2&#xff1a;组件 非单文件组件定义注册使用 单文件组件 组件是Vue中最核心的内容&#xff0c;在编写页面时&#xff0c;将整个页面视为一个个组件&#xff0c;再把组件拼接起来&#xff0c;这样每个组件之间相互独立&#xff0c;有自己的结构样式&#xff0c;使页面编写思…

超子物联网HAL库笔记:定时器[基础定时]篇

超子物联网 HAL库学习 汇总入口&#xff1a; 超子物联网HAL库笔记&#xff1a;[汇总] 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一、资源介绍&#xff1a;STM32F103C8T6定时器资源介绍 高级定时器&#x…

ubuntu20.04_从零LOD-3DGS的复现

环境要求 dependencies:- cudatoolkit11.6- plyfile0.8.1- python3.7.13- pip22.3.1- pytorch1.12.1- torchaudio0.12.1- torchvision0.13.1- tqdm1. 安装conda创建环境 conda create -n lod-3dgs python3.7.132. 安装CUDA11.6和相应cuDNN。 2.1 CUDA CUDA安装参考CUDA10.1…

Springboot 启动端口占用如何解决

Springboot 启动端口占用如何解决 1、报错信息如下 *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 9010 was already in use.Action:Identify and stop the process thats listening o…

Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码...

全文链接&#xff1a;https://tecdat.cn/?p38195 股票市场在经济发展中占据重要地位。由于股票的高回报特性&#xff0c;股票市场吸引了越来越多机构和投资者的关注。然而&#xff0c;由于股票市场的复杂波动性&#xff0c;有时会给机构或投资者带来巨大损失。考虑到股票市场的…