ROS系列:九、rosbag使用

2023-05-16

文章目录

解析rosbag中的.bag文件,得到.jpg图片数据和.pcd点云数据

https://blog.csdn.net/weixin_40000540/article/details/83859694

 

 

    • 1.rosbag写入文件
    • 2.rosbag读取文件
    • 3.通过Launch文件修改rosbag发布的话题
    • 4.将rosbag中的.bag文件转化成.jpg图片数据和.pcd点云数据(保存loam地图)
    • 5.将rosbag文件某一话题存成txt文件或csv文件
    • 6.播放rosbag文件话题总结
    • 7.参考

1.rosbag写入文件

    rosbag::Bag bag;
    bag.open("test.bag", rosbag::bagmode::Write);
 
    std_msgs::String str;
    str.data = std::string("foo");
 
    std_msgs::Int32 i;
    i.data = 42;
 
    bag.write("chatter", ros::Time::now(), str);
    //从ros::Time实例中获得当前时间ros::Time::now()
    bag.write("numbers", ros::Time::now(), i);
 
    bag.close();

2.rosbag读取文件

    rosbag::Bag bag;
    bag.open("test.bag", rosbag::bagmode::Read);
 
    std::vector<std::string> topics;
    topics.push_back(std::string("chatter"));
    topics.push_back(std::string("numbers"));
 
    rosbag::View view(bag, rosbag::TopicQuery(topics));//note:TopicQuery;TypeQuery
	
	//   std::vector<std::string> types;
	//   types.push_back(std::string("geometry_msgs/TransformStamped"));
	//   rosbag::View view(bag, rosbag::TypeQuery(types));
 
    foreach(rosbag::MessageInstance const m, view)
    {
        std_msgs::String::ConstPtr s = m.instantiate<std_msgs::String>();
        if (s != NULL)
            ASSERT_EQ(s->data, std::string("foo"));
 
        std_msgs::Int32::ConstPtr i = m.instantiate<std_msgs::Int32>();
        if (i != NULL)
            ASSERT_EQ(i->data, 42);
    }
 
    bag.close();

3.通过Launch文件修改rosbag发布的话题

<launch> 
<!-- <remap from="/camera/depth_registered/camera_info" to="/camera/depth/camera_info"/> -->
 <!-- <remap from="/camera/depth_registered/image_raw" to="/camera/depth/image_raw"/> --> 
 <node pkg="rosbag" type="play" name="playe" output="screen" args="--clock /home/zuo/database/tModel-P/calib/test/2017-10-18-21-30-41.bag"/> 
 <!-- 注意这里bag文件的路径必须为绝对路径-->
  </launch>

 

4.将rosbag中的.bag文件转化成.jpg图片数据和.pcd点云数据, 可视化 rviz

  ---详细版本,他们说的太不清楚了,自己理解了一下

4.1 查看某个.bag的数据信息(其中*为.bag文件名)

cd  my_c++/VINS_test/ROS_bag    // 首先进入.bag 的目录: 我把 MH_01_easy.bag 放在了 my_c++/VINS_test/ROS_bag

rosbag info MH_01_easy.bag         //查看信息,具体如下

path:        MH_01_easy.bag
version:     2.0
duration:    3:06s (186s)
start:       Jun 25 2014 03:02:59.81 (1403636579.81)
end:         Jun 25 2014 03:06:06.70 (1403636766.70)
size:        2.5 GB
messages:    47283
compression: none [2456/2456 chunks]
types:       geometry_msgs/PointStamped [c63aecb41bfdfd6b7e1fac37c7cbe7bf]
             sensor_msgs/Image          [060021388200f6f0f447d0fcd9c64743]
             sensor_msgs/Imu            [6a62c6daae103f4ff57a132d6f95cec2]
topics:      /cam0/image_raw    3682 msgs    : sensor_msgs/Image         
             /cam1/image_raw    3682 msgs    : sensor_msgs/Image         
             /imu0             36820 msgs    : sensor_msgs/Imu           
             /leica/position    3099 msgs    : geometry_msgs/PointStamped

注意:topics,  也是后面我们需要用到的内容

 

4.2 建立 export.launch 文件

export 只是 launch 文件的名字,你自己想起什么名字都行 

建立一个launch文件

vim  export.launch  //我安装的是vim, 你们可能是其他的;输入 i 代表开始输入,按 Esc 键后,再 输入 :wq   便完成保存   

export.launch 的内容如下:

<launch>
      <node pkg="rosbag" type="play" name="rosbag" args="-d 2 /home/hltt3838/my_c++/VINS_test/ROS_bag/MH_01_easy.bag"/>
      <node name="extract" pkg="image_view" type="extract_images" respawn="false" output="screen" cwd="ROS_HOME">
        <remap from="image" to="/cam1/image_raw"/>
      </node>
 </launch>

注意: 其中 /home/hltt3838/my_c++/VINS_test/ROS_bag/MH_01_easy.bag  为需要解析的 MH_01_easy.bag 文件路径, "/cam1/image_raw" 想要解析的话题名称, 对应  4.1  rosbag info MH_01_easy.bag   后的 topics 信息。

 

4.3 解析该.bag文件到.jpg格式图片

roscore                                           //打开终端,运行roscore, master是整个ROS运行的核心,roscore就是用来启动master的

roslaunch export.launch      // 新建终端, cd到export.launch文件夹下, 运行代码如下

解析结果如下:

 

4.4 rviz可视化bag包

打开端口1

roscore   // 启动 ROS,注意拉,这个是必须打开的,不能上来就  rosbag play   MH_01_easy.bag 

打开端口2:启动  rviz

rosrun rviz rviz     //  rviz是包名

打开端口3

进入文件夹:cd  my_c++/VINS_test/ROS_bag ,   里面包含  MH_01_easy.bag 

rosbag play   MH_01_easy.bag 

打开后在  rviz   左侧 Add 中点击  by display type 或者   by topic  中添加  pointcloud2  和   image

疑问:rosrun rviz rviz   和 rosbag play   MH_01_easy.bag 是两个独立的部分,为什么   bag里面的数据可以在 rviz 里面显示 ?

个人认为:rosbag play   MH_01_easy.bag   可以当成一个节点吧,节点运行时其实 MH_01_easy.bag 里面是有topic的, 而rosrun rviz rviz 也可以看作一个独立的部分吧, rviz 通过订阅 MH_01_easy.bag发布的topic 进而建立联系,而谁来管这个事情,就是 roscore没有这个程序,两个节点之间建立不了通信,可以试以下。学习以下ROS的简单原理

 

4.5 解析.bag文件到.pcd点云数据文件

rosrun pcl_ros bag_to_pcd <*.bag> <topic> <output_directory>

保存loam的地图:

运行laom节点:roslaunch loam_velodyne loam_velodyne.launch
录制loam后生成的地图:rosbag record -o out /laser_cloud_surround//注意话题是全部拼接的点云
保存为pcd格式文件: rosrun pcl_ros bag_to_pcd input.bag /laser_cloud_surround pcd
保存为pcd格式文件:rosrun pcl_ros pointcloud_to_pcd input:=/laser_surround_cloud
此时转化为一个名为cloud的pcd集,cd进入pcd那个文件夹
查看地图:pcl_viewer last.pcd

 

5.将rosbag文件某一话题存成txt文件或csv文件

将file_name.bag文件中topic_name话题的消息转换到Txt_name.txt文件中:
rostopic echo -b file_name.bag -p /topic_name > Txt_name.txt(或者*.csv)

roscore   // 启动 ROS

//进入文件夹:cd  my_c++/VINS_test/ROS_bag ,   里面包含  MH_01_easy.bag

rostopic echo -b   MH_01_easy.bag   /imu0 > imu.txt(或者*.csv)

注意:MH_01_easy.bag  的 topic_name 包括:/cam0/image_raw   /cam1/image_raw   /leica/position    /imu0

自己选一个就行

 

6.播放rosbag文件话题总结

如果想改变消息的发布速率,可以用下面的命令

rosbag play -r 2 <bagfile>

这时的轨迹相当于以两倍的速度通过按键发布控制命令时产生的轨迹。 -r 后面的数字对应播放速率。
如果希望 rosbag 循环播放,可以用命令

rosbag play -l  <bagfile>  # -l == --loop

如果只播放感兴趣的 topic ,则用命令

rosbag play <bagfile> --topic /topic1  /topic2

使用launch文件进行播放,简化播放步骤:

<?xml version="1.0"?>
<launch> 
<node pkg="rosbag" type="play" name="played" output="screen" args="--clock -r 0.2 /****/****.bag"> 
    <remap from="/imu/data" to="/*****/imu"/>
    <remap from="/velodyne_points" to="/*******/lidar/pointcloud3"/>
 </node>
 <!-- 注意这里bag文件的路径必须为绝对路径-->
</launch>

在上述播放命令执行期间,空格键可以暂停播放。

 

7.参考

1.https://answers.ros.org/question/9102/how-to-extract-data-from-bag/
2.http://wiki.ros.org/rosbag/Tutorials/Exporting image and video data
3.https://blog.csdn.net/weixin_40000540/article/details/83859694

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS系列:九、rosbag使用 的相关文章

  • kinova-jaco2使用Moveit!控制真实机械臂抓取固定点物体

    kinova jaco2使用Moveit 控制真实机械臂抓取固定点物体 一 机械臂坐标系 坐标系方向 位姿方向 轴的起始点 二 启动机械臂和Moveit 三 实现抓取 python代码 python文件建议直接用python启动 四 遇到的
  • Python 实现 Dijkstar 路径规划算法

    Dijstar 最短路径算法 用于计算起始点到最终点的最短路径 一般采用的是贪心算法策略 原理可以参考 图解 Open list 和 close list 环境 Terminal 需要预先安装两个库 matplotlib 和 math pi
  • 使用WTGAHRS2(JY-GPSIMU)在ROS中读取数据并发布话题

    目录 IMU简介 驱动程序 IMU串口通信协议 程序 效果 IMU简介 十轴惯性导航传感器WTGAHRS2传感器集成高精度的陀螺仪 加速度计 地磁场传感器 GPS 模块 采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法 能够快速求
  • ros+arduino学习(六):重构ros_lib库文件

    前言 ros lib是arduino程序和ros连接的库文件 通过使用这些库文件和相关函数 可以在arduino上通过编程使得arduino硬件开ros节点程序 这样arduino硬件就可以与上位机通过话题进行通讯 从而把arduino从传
  • Webots小车与Gampping建图仿真与ORB3算法实践

    此篇博客转自本作者在古月居的博客 https www guyuehome com 34537 前言 在研一的时候 由于XXX项目的需要 其中一项就是需要测试Gmapping建图 自然也要求使用ROS系统 由于之前经常在webots中进行仿真
  • 无人飞行器智能感知竞赛--模拟器安装

    开发环境 win11 wsl2 注意事项 请配合视频使用 如果不看视频会对下面的配置过程迷惑 因为一开始我是想安装在ubuntu18 04的 中途发现ubuntu18 04没有ros noetic 所以转入ubuntu20 04配置 视频链
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • Ubuntu下vscode配置ROS环境

    摘要 最近准备放弃用clion开发ROS使用更主流的vscode 整理一下在ubuntu18 04下的VSCode安装和ROS环境配置流程 安装 方法一 软件商店安装 个人还是推荐使用ubuntu软件下载vscode 简单不容易出错 方法二
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 最快实现一个自己的扫地机

    作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 扫地机介绍 扫地机器人行业本质是技术驱动型行业 产品围绕导航系统的升级成为行业发展的主旋律 按功能划分 扫地机器人分为四大系统 即导航系
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • 程序“catkin_init_workspace”尚未安装。 您可以使用以下命令安装: sudo apt install catkin

    程序 catkin init workspace 尚未安装 您可以使用以下命令安装 sudo apt install catkin 问题如图 先贴上解决后的效果 运行环境 ubuntu 16 04 ros版本 kinetic 问题解释 这个
  • (ros/qt报错) FATAL: ROS_MASTER_URI is not defined in the environment

    安装qt之后 明明打开roscore但是qt运行跟ros有关的节点时报错 FATAL 1450943695 306401842 ROS MASTER URI is not defined in the environment Either
  • 如何将从 rospy.Subscriber 数据获得的数据输入到变量中?

    我写了一个示例订阅者 我想将从 rospy Subscriber 获得的数据提供给另一个变量 以便稍后在程序中使用它进行处理 目前 我可以看到订阅者正在运行 因为当我使用 rospy loginfo 函数时 我可以看到打印的订阅值 虽然我不
  • 进入 docker 容器,exec 丢失 PATH 环境变量

    这是我的 Dockerfile FROM ros kinetic ros core xenial CMD bash 如果我跑docker build t ros docker run it ros 然后从容器内echo PATH 我去拿 o
  • 如何将曲面拟合到一组数据点并获得曲面方程

    乌班图 ROS 思维 Python程序 我正在尝试获取适合点云数据中的一组点的表面方程 数据来自激光雷达扫描仪 我在 rviz 中选择整个扫描的一部分 并获得该选择的坐标选定表面的图片 所选曲面并不总是如此线性 因为材质中可能存在轻微的曲线
  • 错误状态:平台不允许不安全的 HTTP:http://0.0.0.0:9090

    我正在尝试从我的 flutter 应用程序连接到 ws local host 9090 使用 rosbridge 运行 的 Ros WebSocket 服务 但我在 Flutter 中收到以下错误 错误状态 平台不允许不安全的 HTTP h
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • ROS 从 python 节点发布数组

    我是 ros python 的新手 我正在尝试从 python ros 节点发布一个一维数组 我使用 Int32MultiArray 但我无法理解多数组中布局的概念 谁能给我解释一下吗 或者还有其他方式发布数组吗 Thanks usr bi
  • 如何从里程计/tf数据获取投影矩阵?

    我想将视觉里程计的结果与 KITTI 数据集提供的事实进行比较 对于地面中的每一帧 我都有一个投影矩阵 例如 1 000000e 00 9 043683e 12 2 326809e 11 1 110223e 16 9 043683e 12

随机推荐

  • detecron2中的注册机制

    文章目录 一 为什么使用注册类二 注册类的实现 传送门 Detectron2 01 注册机制 Registry 实现 一 为什么使用注册类 以下转自知乎 https zhuanlan zhihu com p 93835858 对于detec
  • 单目视觉SLAM在无人机上的应用

    目录 写在前面 本文说明 论文链接和实验视频 源代码链接 一 实验环境 硬件 软件 算法 二 实验环境搭建过程 1 Intel NUC安装Ubuntu 16 04 2 安装ROS D435i驱动以及ORB SLAM2算法 3 ORB SLA
  • TypeError: Expected cv::UMat for argument ‘img‘

    研究Detectron2中的在线数据增强的源码 并显示数据增强后的图像时 xff0c 遇到 TypeError Expected cv UMat for argument 39 img 的问题 显然 xff0c 问题要求是输入一个uint8
  • Linux 桌面终于迎来了 Docker Desktop

    Docker 桌面是容器化应用程序的最简单方法 无需考虑在你选择的系统上设置环境即可开始使用 只需要安装 Docker 桌面 xff0c 就可以开始了 Docker 桌面应用程序附带容器工具 xff0c 如 Kubernetes Docke
  • Dockerfile制作镜像和常用Shell脚本语法记录

    一 常规命令和使用记录 1 定义变量 判断匹配 赋值等 定义变量 addr 61 a namespace 61 b 判断匹配自定义的 包括参数化构建设置的变量 环境变量 xff0c 并赋值 case 34 Env 34 in dev nam
  • [Holo_wo]-vscode常用配置项说明

    vscode 配置文件核心 settings json xff1a 整个vscode的配置 xff0c 是本地vscode的配置 xff0c 如果有ssh远程 xff0c 那么会在远程主机的 vscode server目录下有setting
  • 基于jQuery的ajax跨域请求,PHP作为服务器端代码

    ajax实现跨域请求有两种方式 xff1a 方法一 xff1a jsonp的方式 jsonp方式的关键点在客户请求以jsonp作为数据类型 xff0c 服务器端接收jsonp的回调函数 xff0c 并通过回调函数进行数据的传输 具体代码如下
  • 无人机位置信息计算无人机的瞬时速度的matlab仿真

    目录 1 算法描述 2 仿真效果预览 3 MATLAB核心程序 4 完整MATLAB 1 算法描述 无人机最早在20世纪20年代出现 xff0c 1914年第一次世界大战正进行得如火如荼 xff0c 英国的卡德尔和皮切尔两位将军 xff0c
  • 基于simulink的无人机姿态飞行控制仿真

    目录 1 算法描述 2 仿真效果预览 3 MATLAB核心程序 4 完整MATLAB 1 算法描述 无人机是无人驾驶飞机的简称 xff08 Unmanned Aerial Vehicle xff09 xff0c 是利用无线电遥控设备和自备的
  • 基于ADRC自抗扰控制器的simulink仿真,ESO和TD等模块使用S函数开发

    目录 1 算法仿真效果 2 MATLAB核心程序 3 算法涉及理论知识概要 4 完整MATLAB 1 算法仿真效果 matlab2022a仿真结果如下 xff1a 2 MATLAB核心程序 function sys x0 str ts 61
  • m基于模糊控制与遗传优化的自适应ADRC双闭环控制策略matlab仿真

    目录 1 算法仿真效果 2 MATLAB核心程序 3 算法涉及理论知识概要 4 完整MATLAB 1 算法仿真效果 matlab2013b仿真结果如下 xff1a 遗传优化的优化迭代过程仿真图 xff1a 这个是我们采用的优化算法的有过过程
  • VINS-mono在Ubuntu20.04上从零开始安装运行和环境配置(尝试)

    最近尝试在Ubuntu 20 04上安装运行港科大的VINS mono算法 详细记录一下安装过程以及遇到的问题 先记录一下结果 ROS opencv Eigen Ceres以及VINS mono都编译并安装成功了 但是用euroc数据集跑V
  • 数据结构-C++实现

    之前的2周一直在学数据结构 xff0c 头都大了 我是之前对数据结构一点认识都没有 xff0c 我是直接看书怼的 xff0c 我看的是 大话数据结构 xff0c 前面的讲解还不错 xff0c 到了树 图后 xff0c 就有点看不懂了 xff
  • 几款好看的css表格

    表格一 xff1a 代码 xff1a html代码段 xff1a 是用vs写的 表头 lt th gt 那是从数据库读取的数据段 lt td gt 那是我为测试效果加的代码 xff0c 大家可以自行更改 lt h1 gt 待处理订单 lt
  • 非线性优化 (曲线拟合) 问题:高斯牛顿、g2o 方法总结

    其实还有一个Ceres库可以进行优化 xff0c 但是之前的博客已经具体分析了 xff0c 所以这里就对其余两个进行了介绍 xff0c 相关的内容是SLAM14讲里面的知识 一 理论部分 我们先用一个简单的例子来说明如何求解最小二乘问题 x
  • VINS-Fusion : EUROC、TUM、KITTI测试成功 + 程序进程详细梳理

    完成以下任务的前提是系统安装了必备的库 xff0c 比如cere Eigen3 3等 提前下载好了数据集EUROC xff0c KITTI等 一 相关论文 T Qin J Pan S Cao and S Shen A General Opt
  • ROS 简单理解

    https download csdn net download qq 30022867 11120759 utm medium 61 distribute pc relevant download none task download b
  • ROS系列:七、熟练使用rviz

    7 熟练使用rviz xff08 1 xff09 rviz整体界面 rviz是ROS自带的图形化工具 xff0c 可以很方便的让用户通过图形界面开发调试ROS 操作界面也十分简洁 xff0c 如图29 xff0c 界面主要分为上侧菜单区 左
  • ROS系列:八、图像消息和OpenCV图像之间进行转换-cv_bridge

    cv bridge是在ROS图像消息和OpenCV图像之间进行转换的一个功能包 一 xff09 在ROS图像和OpenCV图像之间转换 xff08 C 43 43 xff09 xff11 xff0e Concepts xff08 概念 xf
  • ROS系列:九、rosbag使用

    文章目录 解析rosbag中的 bag文件 xff0c 得到 jpg图片数据和 pcd点云数据 https blog csdn net weixin 40000540 article details 83859694 1 rosbag写入文