ROS学习第二十四节——rosbag

news2024/9/22 3:38:09

1 rosbag使用_命令行

需求:

ROS 内置的乌龟案例并操作,操作过程中使用 rosbag 录制,录制结束后,实现重放

实现:

1.准备

创建目录保存录制的文件

mkdir ./xxx
cd xxx

2.开始录制

-a:all,录制所有话题消息

-o:out,输出

rosbag record -a -O 目标文件

操作小乌龟一段时间,结束录制使用 ctrl + c,在创建的目录中会生成bag文件。

3.查看文件

rosbag info 文件名

4.回放文件

rosbag play 文件名

重启乌龟节点,会发现,乌龟按照录制时的轨迹运动。


另请参考:

  • rosbag/Commandline - ROS Wiki

2 rosbag使用_编码

命令实现不够灵活,可以使用编码的方式,增强录制与回放的灵活性,本节将通过简单的读写实现演示rosbag的编码实现。

创建功能包的时候需要以下依赖

rospy roscpp std_msgs rosbag


1.写 bag

#include "ros/ros.h"
#include "rosbag/bag.h"
#include "std_msgs/String.h"


int main(int argc, char *argv[])
{
    ros::init(argc,argv,"bag_write");
    ros::NodeHandle nh;
    //创建bag对象
    rosbag::Bag bag;
    //打开
    bag.open("/home/rosdemo/demo/test.bag",rosbag::BagMode::Write);
    //写
    std_msgs::String msg;
    msg.data = "hello world";
    bag.write("/chatter",ros::Time::now(),msg);
    bag.write("/chatter",ros::Time::now(),msg);
    bag.write("/chatter",ros::Time::now(),msg);
    bag.write("/chatter",ros::Time::now(),msg);
    //关闭
    bag.close();

    return 0;
}

 在test.bag文件所在文件夹打开终端,执行以下命令就可以查看详细信息

rosbag info test.bag

2.读bag

通过以下两种方式读取,一种是文档里面写的,另一种是上课讲的

/*  
    读取 bag 文件:

*/
#include "ros/ros.h"
#include "rosbag/bag.h"
#include "rosbag/view.h"
#include "std_msgs/String.h"
#include "std_msgs/Int32.h"

int main(int argc, char *argv[])
{

    setlocale(LC_ALL,"");

    ros::init(argc,argv,"bag_read");
    ros::NodeHandle nh;

    //创建 bag 对象
    rosbag::Bag bag;
    //打开 bag 文件
    bag.open("test.bag",rosbag::BagMode::Read);
    
    
    
    //读数据
    //取出话题,时间戳,消息内容
    //可以先取消息的集合,在迭代取出消息的字段
    // for (rosbag::MessageInstance const m : rosbag::View(bag))
    // {
    //     std_msgs::String::ConstPtr p = m.instantiate<std_msgs::String>();
    //     if(p != nullptr){
    //         ROS_INFO("读取的数据:%s",p->data.c_str());
    //     }
    // }




    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()
                                );
    }





    //关闭文件流
    bag.close();
    return 0;
}

运行效果

rosrun rosbag_demo demo01_write_bag
rosrun rosbag_demo demo01_read_bag

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

领跑行泊一体,纵目科技剑指自动驾驶L2到L4的规模化商业落地机遇

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 2019年&#xff0c;通用、丰田、特斯拉等11家车企承诺自动驾驶时间表&#xff0c;他们大都表示在2020年底实现高级别自动驾驶。以特斯拉为例&#xff0c;其CEO埃隆马斯克曾承诺在2020年实现自动驾驶食言后&#xff0c;随后在…

【工作记录】centos7.5环境下通过源码编译方式部署mysql5.7.25

前言 本文介绍centos7.5环境下通过源码编译安装mysql5.7.25的过程及安装过程中遇到的问题解决。 一、准备工作 # 新建目录 # data 数据 config 配置 boost 引导文件 log 日志文件 mkdir -p /opt/mysql/data /opt/mysql/config /opt/mysql/boost /opt/mysql/log /opt/mysql/ …

Python小姿势 - # 基础数据结构与算法

基础数据结构与算法 Python中基础的数据结构与算法是非常重要的&#xff0c;它们可以帮助我们解决很多实际问题。今天我们就来学习一下Python中的基础数据结构与算法。 首先&#xff0c;我们先来了解一下数据结构。数据结构是一种用来存储、组织、处理数据的方法。它可以帮助我…

理解Java程序的执行

main 方法 public class Solution {public static void main(String[] args) {Person person new Person();person.hello();} }class Person {public void hello() {System.out.println("hello");} }源文件名是 Solution.java&#xff0c;这是因为文件名必须与 pub…

初刷leetcode题目总结 -- 数据结构

魔王的介绍&#xff1a;&#x1f636;‍&#x1f32b;️一名双非本科大一小白。魔王的目标&#xff1a;&#x1f92f;努力赶上周围卷王的脚步。魔王的主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王.&#x1f525;&#x1f525;&#x1f525; ❤️‍&#x1…

Leetcode38. 外观数列

一、题目描述&#xff1a; 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) “…

4月19日第壹简报,星期三,农历闰二月廿九

4月19日第壹简报&#xff0c;星期三&#xff0c;农历闰二月廿九坚持阅读&#xff0c;静待花开1. 国家统计局&#xff1a;一季度GDP同比增长4.5%&#xff0c;当前中国经济没有通缩&#xff0c;下阶段也不会出现通缩&#xff0c;全国城镇调查失业率平均值为5.5%。2. 字节跳动发布…

海格里斯HEGERLS高速穿梭车按需定制|四向穿梭车货架和子母穿梭车货架别傻傻分不清?

随着物流行业和仓储行业的发展&#xff0c;越来越多的企业用户对仓储自动化程度要求越来越高。而近年来&#xff0c;各式各样的穿梭车AGV小车也现身各大物流展&#xff0c;备受各大中小型企业用户的青睐。且为了进一步提高仓库仓储的存储率&#xff0c;越来越多的仓储货架和仓储…

Docker之容器数据卷

Docker之容器数据卷 1. 容器数据卷的概念2. 数据卷的使用2.1 方式一2.2 测试22.3 方式二 3. 安装MySQL4. 具名挂载和匿名挂载4.1 匿名挂载4.2 具名挂载 5. 初识 Dockerfile6. 数据卷-容器之间 1. 容器数据卷的概念 将应用和环境打包成一个镜像数据&#xff1f;如果数据都在容器…

Java | 一分钟掌握JDK命令行工具 | 4 - 可视化分析工具

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 我们其实在分析的时候&#xff0c;也并不是必须使用命令行工具才能可以…

八、vue-基础之列表渲染v-for、v-for中的key属性的作用

一、v-for列表渲染 在真实开发中&#xff0c;我们往往会从服务器拿到一组数据&#xff0c;并且需要对其进行渲染。 这个时候我们可以使用v-for来完成&#xff1b;v-for类似于JavaScript的for循环&#xff0c;可以用于遍历一组数据&#xff1b; 二、v-for基本使用 &#xff0…

Kubeadm方式搭建K8s高可用集群【1.23.0版本】

文章目录 一、集群规划及架构二、系统初始化准备(所有节点同步操作)三、安装kubeadm(所有节点同步操作)四、高可用组件安装及配置1、安装Nginx及配置2、安装keepalived及配置 五、初始化Master集群六、扩容K8S集群1、扩容master节点2、扩容node节点 七、安装网络组件Calico八、…

电脑文件剪切到U盘,为什么不见了?这4个技巧帮你找回丢失文件

文件剪切是指对计算机中的文件进行移动操作&#xff0c;将文件从原先的位置剪切到新的位置&#xff0c;然后将这些文件粘贴到新的位置&#xff0c;以完成文件的整个剪切操作。虽然剪切操作起来并不难&#xff0c;但是近日&#xff0c;有位小伙伴遇到了将电脑文件剪切到u盘后出现…

【C++】模板(二)

文章目录 非类型模板参数简单对容器array&#xff08;c11&#xff09;介绍及对比模板特化函数模板特化类模板特化全特化偏特化 模板分离模板总结 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者type…

文献智能管理工具

当下载的文献非常多的时候&#xff0c;对文献的管理将是一个非常耗时且困难的工作。困难主要来自两个方面&#xff0c;一是文献的分类&#xff0c;当文献属于多个类别的时候&#xff0c;究竟应该放在哪个类别的文件夹下&#xff0c;还是说每个类别的文件夹下都放一个该文献的备…

传输层重点协议之【TCP协议】

1. TCP协议段格式 2. TCP原理 2.1 可靠性机制 2.1.1 确认应答 确认应答是实现可靠性的最核心机制 首先来看一个例子&#xff0c;下面是我和女神的对话~ 所以为了解决上述问题呢&#xff0c;就需要针对消息进行编号&#xff01;给发送的消息分配一个”序号“&#xff0c;同时…

【蓝桥杯省赛真题21】python二十四节气 青少年组蓝桥杯比赛python编程省赛真题解析

目录 python二十四节气 一、题目要求 1、编程实现 2、输入输出 二、解题思路

SpringBoot整合ClickHouse

目录 1 ClickHouse准备操作2 使用jdbc方式操作ClickHouse3 SpringBoot的整合ClickHouse 1 ClickHouse准备操作 使用的JDBC方式操作clickhouseclickhouse与springboot的整合使用 提前创建一张表&#xff0c;并为该表插入一些实验数据 create table t_order01(id UInt32,sku_id…

卡片+递增三元组——蓝桥杯(JAVA解法)

1、卡片 题目链接&#xff1a;用户登录https://www.lanqiao.cn/problems/2383/learning/?page5&first_category_id1&sortstudents_count 问题描述 小蓝有 k 种卡片, 一个班有 n 位同学, 小蓝给每位同学发了两张卡片, 一 位同学的两张卡片可能是同一种, 也可能是不同…

xubuntu16.04下安装向日葵并设置开机自启

1.安装Sunlogin 下载 SunloginClient-11.0.1.44968-amd64.deb 解压后将SunloginClient-11.0.1.44968-amd64.deb拷贝到目标设备上&#xff0c;终端运行&#xff1a; dpkg -i SunloginClient-11.0.1.44968-amd64.deb进入到\usr/local/sunlogin/bin目录下&#xff0c;运行向日葵…