第 5 章 ROS 常用组件 4 —— rosbag / rqt工具箱

1 rosbag

机器人传感器获取到的信息,有时我们可能需要时时处理,有时可能只是采集数据,事后分析,比如:

机器人导航实现中,可能需要绘制导航所需的全局地图,地图绘制实现,有两种方式
方式1:可以控制机器人运动,将机器人传感器感知到的数据时时处理,生成地图信息。
方式2:同样是控制机器人运动,将机器人传感器感知到的数据留存,事后,再重新读取数据,生成地图信息。两种方式比较,显然方式2使用上更为灵活方便。

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

1.0 概念 - 作用 - 本质

概念

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

作用

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

本质

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

1.1 rosbag 命令行

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

实现方式

启动窗口1:roscore
启动窗口2:rosrun turtlesim turtlesim_node
启动窗口3:rosrun turtlesim turtle_teleop_key

  1. 准备:创建目录保存录制的文件
mkdir ./xxx
cd xxx
Copy
  1. 开始录制:ctrl + c 录制结束
rosbag record -a -O 目标文件
rosbag record -a -O bags/hello.bag

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

  1. 查看文件
rosbag info 文件名
rosbag info bags/hello tab补齐
  1. 回放文件
rosbag play 文件名
rosbag play bags/hello tab补齐

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

1.2 rosbag 使用_编码

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

1.2.1 C++ 写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;
}

1.2.2 C++ 读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;
}

2 rqt 工具箱

在 ROS 中使用了一些实用的工具,比如: ros_bag 用于录制与回放、tf2_tools 可以生成 TF 树 … 这些工具大大提高了开发的便利性,但是也存在一些问题: 这些工具的启动和使用过程中涉及到一些命令操作,应用起来不够方便,在ROS中,提供了rqt工具箱,在调用工具时以图形化操作代替了命令操作,应用更便利,提高了操作效率,优化了用户体验。

2.0 概念 - 作用 - 组成

概念

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

作用

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

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

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

2.1 rqt 安装启动与基本使用

  1. 安装:一般只要你安装的是desktop-full版本就会自带工具箱
    如果需要安装可以以如下方式安装
$ sudo apt-get install ros-noetic-rqt
$ sudo apt-get install ros-noetic-rqt-common-plugins
  1. 启动
    rqt 启动方式有两种:

方式1:rqt

方式2:rosrun rqt_gui rqt_gui

  1. 基本使用

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

在这里插入图片描述

2.2 rqt 常用插件:rqt_graph

  • 简介:可视化显示计算图
  • 启动:可以在 rqt 的 plugins 中添加,或者使用rqt_graph启动
    在这里插入图片描述
  • 乌龟跟随案例
  • turtle1是乌龟GUI节点,key是键盘控制节点,只控制第1个乌龟运动,pub1/2订阅乌龟位姿信息产生坐标系相对关系并发布,向tf发布坐标变换,产生相对关系,control控制第2个。control订阅坐标变换关系。并生成速度关系。
  • 圆圈是节点,方框是话题
    在这里插入图片描述

2.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;
}

启动

  • 可以在 rqt 的 plugins 中添加,或者使用rqt_console启动
    在这里插入图片描述

2.4 rqt 常用插件:rqt_plot

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

启动窗口1

roscore

启动窗口2

rosrun turtlesim turtlesim_node

启动窗口3

rosrun turlesim turtle_teleop_key

启动窗口4

rqt_plot 或者rqt 里面 visualization里面的plot

在这里插入图片描述

2.5 rqt 常用插件:rqt_bag

  • 简介:录制和重放 bag 文件的图形化插件
  • 准备:启动 turtlesim 乌龟节点与键盘控制节点
  • 启动:可以在 rqt 的 plugins 中添加,或者使用rqt_bag启动

启动窗口1

roscore

启动窗口2

rosrun turtlesim turtlesim_node

启动窗口3

rosrun turlesim turtle_teleop_key

启动窗口4

rqt_bag 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NqqGOGO

你的鼓励是我学习的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值