第 5 章 ROS常用组件-rosbag(自学二刷笔记)

2024-03-14 09:44

本文主要是介绍第 5 章 ROS常用组件-rosbag(自学二刷笔记),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

重要参考:

课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ

讲义链接:Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

5.2.1 rosbag使用_命令行

需求:

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

实现:

1.准备

创建目录保存录制的文件

mkdir ./xxx
cd xxx

2.开始录制

rosbag record -a -O 目标文件

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

3.查看文件

rosbag info 文件名

4.回放文件

rosbag play 文件名

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


另请参考:

  • rosbag/Commandline - ROS Wiki

 

5.2.2 rosbag使用_编码

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


方案A:C++实现

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;
}
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("/home/rosdemo/demo/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());}}//关闭文件流bag.close();return 0;
}

方案B:Python实现

1.写 bag
#! /usr/bin/env python
import rospy
import rosbag
from std_msgs.msg import Stringif __name__ == "__main__":#初始化节点 rospy.init_node("w_bag_p")# 创建 rosbag 对象bag = rosbag.Bag("/home/rosdemo/demo/test.bag",'w')# 写数据s = String()s.data= "hahahaha"bag.write("chatter",s)bag.write("chatter",s)bag.write("chatter",s)# 关闭流bag.close()
2.读bag
#! /usr/bin/env python
import rospy
import rosbag
from std_msgs.msg import Stringif __name__ == "__main__":#初始化节点 rospy.init_node("w_bag_p")# 创建 rosbag 对象bag = rosbag.Bag("/home/rosdemo/demo/test.bag",'r')# 读数据bagMessage = bag.read_messages("chatter")for topic,msg,t in bagMessage:rospy.loginfo("%s,%s,%s",topic,msg,t)# 关闭流bag.close()

另请参考:

  • rosbag/Code API - ROS Wiki

 

这篇关于第 5 章 ROS常用组件-rosbag(自学二刷笔记)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808006

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1