【ROS】—— ROS常用组件—rosbag与rqt工具箱(十二)

news2024/11/25 22:50:14

文章目录

  • 前言
  • 1. rosbag
    • 1.1 rosbag使用_命令行
  • 2. rosbag使用_编码
    • 2.1 C++实现
      • 2.1.1 写bag
      • 2.1.2 读bag
    • 2.2 python实现
      • 2.2.1 写bag
      • 2.2.2 读bag
  • 3. rqt工具箱
    • 3.1 rqt安装启动与基本使用
    • 3.2 rqt常用插件:rqt_graph
    • 3.3 rqt常用插件:rqt_console
    • 3.4 rqt常用插件:rqt_plot
    • 3.5 rqt常用插件:rqt_bag

前言

📢本系列将依托赵虚左老师的ROS课程,写下自己的一些心得与笔记。
📢课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ
📢讲义链接:http://www.autolabor.com.cn/book/ROSTutorials/index.html
📢 文章可能存在疏漏的地方,恳请大家指出。

1. rosbag

在ROS中关于数据的留存以及读取实现,提供了专门的工具: rosbag。

概念
是用于录制和回放 ROS 主题的一个工具集。

作用
实现了数据的复用,方便调试、测试。

本质
rosbag本质也是ros的节点,当录制时,rosbag是一个订阅节点,可以订阅话题消息并将订阅到的数据写入磁盘文件;当重放时,rosbag是一个发布节点,可以读取磁盘文件,发布文件中的话题消息。

1.1 rosbag使用_命令行

1.准备,创建目录保存录制的文件

mkdir ./xxx
cd xxx

2.开始录制

rosbag record -a -o 目标文件

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

3.查看文件

rosbag info 文件名
yuan@yuan-Legion-Y9000P-IAH7H:~$ rosbag info bag/demo01_2023-01-10-19-59-47.bag 
path:        bag/demo01_2023-01-10-19-59-47.bag
version:     2.0
duration:    14.9s
start:       Jan 10 2023 19:59:47.37 (1673351987.37)
end:         Jan 10 2023 20:00:02.27 (1673352002.27)
size:        149.8 KB
messages:    1951
compression: none [1/1 chunks]
types:      	 geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
		             rosgraph_msgs/Log   [acffd30cd6b6de30f120938c17c593fb]
		             turtlesim/Color     [353891e354491c51aabe32df673fb446]
		             turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]
topics:       /rosout                   6 msgs    : rosgraph_msgs/Log   (2 connections)
		             /turtle1/cmd_vel        109 msgs    : geometry_msgs/Twist
		             /turtle1/color_sensor   918 msgs    : turtlesim/Color    
		             /turtle1/pose           918 msgs    : turtlesim/Pose

4.回放文件

rosbag play 文件名

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

更多内容http://wiki.ros.org/rosbag/Commandline

2. rosbag使用_编码

2.1 C++实现

2.1.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[])
{
    // 2.初始化
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"rosbag_write");
    ros::NodeHandle nh;
    // 3.创建rosbag对象
    rosbag::Bag bag;
    // 4.打开文件流
    bag.open("hello.bag",rosbag::BagMode::Write);
    // 5.写数据
    std_msgs::String msg;
    msg.data = "hello";
    /*
        参数1:话题
        参数2:时间戳
        参数3:消息
    */
    bag.write("/chatter",ros::Time::now(),msg);
    // 6.关闭文件流
    bag.close();
    return 0;
}

查看

yuan@yuan-Legion-Y9000P-IAH7H:~/catkin_ws$ rosbag info hello.bag path:        hello.bag
version:     2.0
duration:    0.0s
start:       Jan 10 2023 20:21:07.13 (1673353267.13)
end:         Jan 10 2023 20:21:07.13 (1673353267.13)
size:        4.6 KB
messages:    1
compression: none [1/1 chunks]
types:       std_msgs/String [992ce8a1687cec8c8bd883ec73ca41d1]
topics:      /chatter   1 msg     : std_msgs/String

2.1.2 读bag

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

内容如下

yuan@yuan-Legion-Y9000P-IAH7H:~/catkin_ws$ rosrun rosbag_demo demo02_read_bag 
[ INFO] [1673355585.834041271]: 解析的内容,话题:/chatter,时间戳:1673353897.95,消息内容:hello
[ INFO] [1673355585.834978975]: 解析的内容,话题:/chatter,时间戳:1673353897.95,消息内容:hello
[ INFO] [1673355585.834995757]: 解析的内容,话题:/chatter,时间戳:1673353897.95,消息内容:hello
[ INFO] [1673355585.835001959]: 解析的内容,话题:/chatter,时间戳:1673353897.95,消息内容:hello

2.2 python实现

2.2.1 写bag

#! /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.2.2 读bag

#! /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()

3. rqt工具箱

概念
ROS基于 QT 框架,针对机器人开发提供了一系列可视化的工具,这些工具的集合就是rqt

作用
可以方便的实现 ROS 可视化调试,并且在同一窗口中打开多个部件,提高开发效率,优化用户体验。

组成
rqt 工具箱组成有三大部分

  • rqt——核心实现,开发人员无需关注
  • rqt_common_plugins——rqt 中常用的工具套件
  • rqt_robot_plugins——运行中和机器人交互的插件(比如: rviz)

3.1 rqt安装启动与基本使用

一般只要你安装的是desktop-full版本就会自带工具箱
如果需要安装可以以如下方式安装

$ sudo apt-get install ros-melodic-rqt
$ sudo apt-get install ros-melodic-rqt-common-plugins

rqt的启动方式有两种:

  • 方式1:rqt
  • 方式2:rosrun rqt_gui rqt_gui

启动 rqt 之后,可以通过 plugins 添加所需的插件

话题发布控制
在这里插入图片描述在这里插入图片描述
服务控制
在这里插入图片描述在这里插入图片描述

3.2 rqt常用插件:rqt_graph

简介:可视化显示计算图
启动:可以在 rqt 的 plugins 中添加,或者使用rqt_graph启动
在这里插入图片描述
乌龟跟随案例的rqt_graph如下
在这里插入图片描述

3.3 rqt常用插件:rqt_console

简介: rqt_console 是 ROS 中用于显示和过滤日志的图形化插件

准备: 编写 Node 节点输出各个级别的日志信息

/*  
    ROS 节点:输出各种级别的日志信息

*/
#include "ros/ros.h"

int main(int argc, char *argv[])
{
    ros::init(argc,argv,"log_demo");
    ros::NodeHandle nh;

    ros::Rate r(0.3);
    while (ros::ok())
    {
        ROS_DEBUG("Debug message d");
        ROS_INFO("Info message oooooooooooooo");
        ROS_WARN("Warn message wwwww");
        ROS_ERROR("Erroe message EEEEEEEEEEEEEEEEEEEE");
        ROS_FATAL("Fatal message FFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
        r.sleep();
    }


    return 0;
}

在这里插入图片描述

3.4 rqt常用插件:rqt_plot

简介:图形绘制插件,可以以 2D 绘图的方式绘制发布在 topic 上的数据
准备:启动 turtlesim 乌龟节点与键盘控制节点,通过 rqt_plot 获取乌龟位姿
启动:可以在 rqt 的 plugins 中添加,或者使用rqt_plot启动
在这里插入图片描述

3.5 rqt常用插件:rqt_bag

简介:录制和重放 bag 文件的图形化插件
准备:启动 turtlesim 乌龟节点与键盘控制节点
启动:可以在 rqt 的 plugins 中添加,或者使用rqt_bag启动
在这里插入图片描述
直接退出就可以结束录制
在这里插入图片描述
文件是循环播放的

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

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

相关文章

python算法与数据结构2-栈、队列、排序算法

目录1、栈1.1 栈的介绍1.2 栈的代码实现2、队列2.1 队列的介绍2.2 队列的代码实现3、双端队列4、数据结构与算法_排序算法4.1 排序算法的稳定性4.2 冒泡排序4.3 选择排序4.4 插入排序4.5 快速排序1、栈 1.1 栈的介绍 栈&#xff1a;运算受限的线性表&#xff0c;其限制是仅允…

黑盒测试用例设计 - 功能图法

目录功能图法原理介绍功能图法步骤案例&#xff1a;以QQ登录界面为例功能图法原理介绍 功能图方法其实是一种灰盒测试&#xff08;因其兼有黑盒和白盒测试&#xff09;用例设计方法&#xff1b;通常情况一个程序的功能说明通常由动态说明和静态说明组成&#xff0c;动态说明描…

UG/NX 二次开发(C#)自动出2D零件图思路

一、前言 项目需要自动出2D零件图&#xff0c;可是我之前没做过这方面的内容&#xff0c;没有一点思路。然后我就做了下面几件事&#xff1a; 1、百度、google翻了一遍&#xff0c;搜索关键字“UG二次开发自动出图” 2、csdn.com 和 cnblogs.com翻了一遍 3、平时逛的qq技术…

数字图像处理(第四版)-冈萨雷斯-学习过程的笔记

作者介绍1.绪论自己读书存在一个问题&#xff0c;书太厚&#xff0c;重点难以把握&#xff0c;对如此经典的书籍&#xff0c;希望自己的学习历程和重点记录下来。 目前在持续更新和学习中&#xff0c;觉得有帮助的话可以先收藏和关注我博客的内容--更新于2023/1/102.数字图像基…

C语言进阶——自定义类型——结构体

目录 一. 结构体类型的声明 结构体的声明 特殊的声明 二. 结构的自引用 三. 结构体变量的定义和初始化 定义 初始化 四. 结构体内存对齐 未完待续 一. 结构体类型的声明 结构体的声明 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以…

08-Alibaba微服务组件Nacos配置中心实战源码分析

Nacos配置中心源码分析 Config相关配置 Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串&#xff0c;公共命名空间&#xff08;public&#xff09;&#xff0c;分组默认是DEFAULT_GROUP 配置中心的架构 nacos config client源码分析 获取配置 获取配置的主要方…

windows配置java环境

windows配置java环境下载JDK安装JDK配置环境变量java9及以上版本配置环境变量&#xff08;以java17为例&#xff0c;只需要配置JAVA_HOME和Path变量&#xff09;配置JAVA_HOME变量配置Path变量java8及以下版本配置环境变量&#xff08;以java8为例&#xff0c;需要配置JAVA_HOM…

Unity官方本地化插件localization

官方文档地址&#xff1a;https://docs.unity3d.com/Packages/com.unity.localization1.0/manual/QuickStartGuideWithVariants.html 使用流程 安装 PackageManager搜索Localization完成对应插件的安装 配置 PlayerSetting->Localization 创建本地化相关配置 创建之后点…

python的安装以及pycharm的配置

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a;lqj_本人的博客_CSDN博客-微信小程序,html特效,vue2基础领域博主 哔哩哔哩欢迎关注&#xff1a;小淼前端 小淼前端的个人空间_哔哩哔哩_bilibili 本篇文章主要讲述python的安装以及pych…

【Linux】小程序进度条

目录回车换行问题日常中的换行代码中的回车换行倒计时函数进度条回车换行问题 日常中的换行 即&#xff1a; 回车&#xff1a;回到当前行的最开始 换行&#xff1a;列不变&#xff0c;新起一行 代码中的回车换行 我们先看一段代码&#xff1a; 这个是带\n的 &#x1f30d;结…

什么是运动神经元 你们真的知道吗

大家好&#xff0c;你们知道什么运动神经元吗&#xff0c;你们有误入这些误区吗&#xff1f; 运动神经元是一种神秘的疾病&#xff0c;导致的原因尚且不明确。这种疾病的发生可能是体内的运动神经元细胞的减少或是凋亡导致的&#xff0c;是一种慢性发展的神经类疾病。虽然导致运…

【晶振】NTP网络校时服务器(卫星时钟)电路里的主心跳

【晶振】NTP网络校时服务器&#xff08;卫星时钟&#xff09;电路里的主心跳 【晶振】NTP网络校时服务器&#xff08;卫星时钟&#xff09;电路里的主心跳 晶振是NTP网络校时服务器&#xff08;卫星时钟&#xff09;电路板数字电路的&#xff02;心跳&#xff02;&#xff0c;在…

阿狸(Hans设计卡通形象)的幸福生活 ---- 充满趣味性(可自定义更改)

Ali the fox 目录 一、前言 二、关于代码 三、效果展示 四、详细介绍 五、编码实现 index.html css 文件夹 88rh.css js 文件夹 img 文件夹 fonts 文件夹 六、获取源码 需要源码&#xff0c;可以私信我(⊙o⊙)&#xff1f;关注我&#xff1f; 一、前言 时光荏苒&…

MyBatis­Plus快速入门

介绍 MyBatisPlus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性&#xff1a; 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xf…

冰冰学习笔记:异常处理

欢迎各位大佬光临本文章&#xff01;&#xff01;&#xff01; 还请各位大佬提出宝贵的意见&#xff0c;如发现文章错误请联系冰冰&#xff0c;冰冰一定会虚心接受&#xff0c;及时改正。 本系列文章为冰冰学习编程的学习笔记&#xff0c;如果对您也有帮助&#xff0c;还请各位…

Github-Action-Workflow-概念和基本操作

workflow 文件 GitHub Actions 的配置文件叫做 workflow文件&#xff0c;存放在代码仓库的.github/workflows/目录下。比如写一个first.yaml文件&#xff0c;存储的目录就是.github/workflows/first.yaml workflow/下的文件采用 YAML 格式&#xff0c;文件名可以任意取&#xf…

代码随想录第56天|● 583. 两个字符串的删除操作 ● 72. 编辑距离

583.两个字符串的删除操作 思路一 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结尾的字符串word2&#xff0c;想要达到相等&#xff0c;所需要删除元素的最少次数。 当word1[i - 1] 与 word2[j - 1]相同的时候 dp[i][j] dp[i - 1][j - 1];当word1[…

检修盒面板AI视觉检测系统,赋能工业发展!

制造业是中国工业化的源头&#xff0c;也是工业生产大国。任何一步的质量都可能影响生产过程的变化。表面缺陷不仅影响产品的美观和舒适性&#xff0c;还会对其性能产生不良影响。因此&#xff0c;制造商对产品的表面缺陷检测非常重视。传统的检修盒面板按钮安装是否正确的质量…

【深度学习】CNN应用于图像分类的建模全流程

文章目录1.摘要2.图片的准备及预处理3.打包并保存数据4.搭建模型5.训练模型6.测试模型7.总结1.摘要 图像分类&#xff0c;也可以称作图像识别&#xff0c;顾名思义&#xff0c;就是辨别图像中的物体属于什么类别。核心是从给定的分类集合中给图像分配一个标签的任务。实际上&a…

DBeaver连接InterSystems IRIS、Ensemble、Cache操作说明

一、驱动获取 1.1、本地安装目录获取 JDBC驱动&#xff1a;“安装目录\dev\java\lib\JDK18” 如需获取ODBC等其他连接驱动则返回“安装目录\dev”路径选择对应文件夹2.1、Intersystems官方获取 官方下载&#xff1a;https://intersystems-community.github.io/iris-driver-…