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

重要参考:

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

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

5.2.1 rosbag使用_命令行

需求:

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

实现:

1.准备

创建目录保存录制的文件

bash 复制代码
mkdir ./xxx
cd xxx

2.开始录制

bash 复制代码
rosbag record -a -O 目标文件

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

3.查看文件

bash 复制代码
rosbag info 文件名

4.回放文件

bash 复制代码
rosbag play 文件名

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


另请参考:

5.2.2 rosbag使用_编码

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


方案A:C++实现

1.写 bag
cpp 复制代码
#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
cpp 复制代码
/*  
    读取 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
python 复制代码
#! /usr/bin/env python
import rospy
import rosbag
from std_msgs.msg import String

if __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
python 复制代码
#! /usr/bin/env python
import rospy
import rosbag
from std_msgs.msg import String

if __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()

另请参考:

相关推荐
泽虞14 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
FakeOccupational14 小时前
电路笔记(信号):网线能传多少米?网线信号传输距离
开发语言·笔记·php
Yawesh_best1 天前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
喵手1 天前
AI在自动化与机器人技术中的前沿应用
人工智能·机器人·自动化
Ccjf酷儿1 天前
操作系统 蒋炎岩 3.硬件视角的操作系统
笔记
习习.y1 天前
python笔记梳理以及一些题目整理
开发语言·笔记·python
在逃热干面1 天前
(笔记)自定义 systemd 服务
笔记
DKPT1 天前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
QT 小鲜肉1 天前
【孙子兵法之上篇】001. 孙子兵法·计篇
笔记·读书·孙子兵法
星轨初途1 天前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法