当前位置: 首页 > news >正文

ROS学习笔记13——rosbag功能包的简单使用

rosbag是用于录制和回放 ROS 主题的一个工具集,实现了数据的复用,方便调试和测试。rosbag本质也是ros的节点,当录制时,rosbag是一个订阅节点,可以订阅话题消息并将订阅到的数据写入磁盘文件;当重放时,rosbag是一个发布节点,可以读取磁盘文件,发布文件中的话题消息。

1、通过命令行使用rosbag

1.1 录制

rosbag record -a -O 目标文件

-a 录制所有话题

-O 文件命名时不带时间戳

若不想录制所有的话题,可以不使用 -a ,而是将所需话题跟在后面。结束录制使用 ctrl + c,在创建的目录中会生成bag文件。

1.2 查看文件

rosbag info 文件名

1.3 回放文件

rosbag play 文件名

rosbag的 参数远不止这些,可以通过 -h 进行查看。

2、通过编码使用rosbag

通过编码可以更加灵活的使用rosbag,下面通过rosbag实现文本的简单读写。

2.1 写bag

#include "ros/ros.h"
#include "rosbag/bag.h"
#include "std_msgs/String.h"
/*需求:使用rosbag向磁盘文件写数据(话题+消息)流程:1、导包2、初始化3、创建rosbag对象4、打开文件流5、写数据6、关闭文件流
*/
int main(int argc, char *argv[])
{/* code *///2、初始化setlocale(LC_ALL, "");ros::init(argc, argv,"rosbag_write");ros::NodeHandle nh;//3、创建rosbag对象rosbag::Bag bag;//4、打开文件流bag.open("test.bag",rosbag::BagMode::Write);//5、写数据std_msgs::String msgs;msgs.data = "Come on! You are the best!";/*参数1:话题参数1:时间戳参数1:消息*/bag.write("/chatter",ros::Time::now(),msgs);//6、关闭数据流bag.close();return 0;
}

2.2 读bag

#include "ros/ros.h"
#include "rosbag/bag.h"
#include "rosbag/view.h"
#include "std_msgs/String.h"
/*需求:使用rosbag读取磁盘上的bag文件流程:1、导包2、初始化3、创建bag对象4、打开文件流5、读数据6、关闭文件流
*/
int main(int argc, char *argv[])
{/* code *///2、初始化setlocale(LC_ALL, "");ros::init(argc, argv,"rosbag_read");ros::NodeHandle nh;//3、创建bag对象rosbag::Bag bag;//4、打开数据流bag.open("test.bag",rosbag::BagMode::Read);//5、读数据//取出话题、时间戳和消息//先获取消息的集合,再迭代取出消息的字段for (auto &&m : rosbag::View(bag)){//解析std::string topic = m.getTopic();ros::Time time = m.getTime();std_msgs::StringPtr p = m.instantiate<std_msgs::String>();ROS_INFO("话题:%s, 时间戳:%.2f, 消息:%s",topic.c_str(),time.toSec(),p->data.c_str());}//6、关闭bag.close();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【自动化测试】常见的自动化遍历工具以及如何选择合适的自动化遍历工具
  • 1、vectorCast单元测试常用操作
  • 关于 OceanBase 4.x 中被truncate的 table 不再支持进回收站的原因
  • CSS——网格布局(display: grid)之上篇
  • 链路聚合(Link Aggregation)
  • vue 入门一
  • 【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第二篇-着色器制作】
  • JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)
  • jQuery 简介 ③ ready()事件函数、jQuery 二个原则及容错机制
  • 关系型数据库,NoSQL和内存数据库三种数据库的比较
  • nvm node管理工具常用指令
  • 大数据时代的等保测评:数据安全与隐私保护
  • 数据结构(Day14)
  • k8s自动清理pod脚本分享
  • netty编程之基于websocket发送二进制数据
  • 「面试题」如何实现一个圣杯布局?
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • ES6系列(二)变量的解构赋值
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript类型识别
  • OSS Web直传 (文件图片)
  • Promise面试题,控制异步流程
  • Python打包系统简单入门
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 对超线程几个不同角度的解释
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #前后端分离# 头条发布系统
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (六)激光线扫描-三维重建
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (算法)Travel Information Center
  • (小白学Java)Java简介和基本配置
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • **PHP分步表单提交思路(分页表单提交)
  • .net core 6 redis操作类
  • .Net MVC4 上传大文件,并保存表单
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 服务 ServiceController
  • .NET 中 GetProcess 相关方法的性能
  • .NET技术成长路线架构图
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [22]. 括号生成
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [ACTF2020 新生赛]Include
  • [APUE]进程关系(下)
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务