11 月 18 日 ROS 学习笔记——可视化和调试工具

文章目录

  • 前言
  • 一、调试 ROS 节点
    • 1. `gdb` 调试器
    • 2. 在 ROS 节点启动时调用 `gdb` 调试器
    • 3. 在 ROS 节点启动时调用 `valgrind` 分析节点
    • 4. 设置 ROS 节点 core 文件转储
    • 5. 日志消息
      • 1). 输出日志消息
      • 2). 设置调试消息级别
  • 二、检测系统状态
    • 1. rqt_graph
    • 2. 可视化坐标变换
    • 3. 保存与回放数据
      • 1). 消息记录包文件
    • 4. rqt 与 rqt_gui 插件


前言

本文为 11 月 18 日 ROS 学习笔记——可视化和调试工具,分为两个章节:

  • 调试 ROS 节点,
  • 检测系统状态

一、调试 ROS 节点

ROS 节点可以像正常程序一样调试。调试程序在系统中运行时有一 个进程号(PID)。可以用任何标准工具(gdb)进行调试。同样可以用 memcheck 检查内存泄漏,或者用 callgrind 分析算法性能。

1. gdb 调试器

使用 gdb 调试器调试一个节点,只需知道可执行节点的路径。在 ROS Kinetic 和 catkin 功能包中,节点的可执行文件在工 作空间的 devel/lib/<package> 文件夹下。

cd /home/li/Documents/Chapter2_tut/devel/lib/demo01_pub_cli
gdb example1_a
(gdb) r
>>> Starting program: /home/li/Documents/Chapter2_tut/devel/lib/demo01_pub_cli/example1_a [Thread debugging using libthread_db enabled]Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".[New Thread 0x7ffff49fe700 (LWP 41626)][New Thread 0x7fffeffff700 (LWP 41627)][New Thread 0x7fffe77fe700 (LWP 41628)][New Thread 0x7fffef7fe700 (LWP 41629)]

2. 在 ROS 节点启动时调用 gdb 调试器

  • 在节点启动时调用 gdb 调试器
<launch><node name="example1_a" pkg="demo01_pub_cli" type="example1_a" launch-prefix="xterm -e gdb --args" output="screen" /><node name="example1_b" pkg="demo01_pub_cli" type="example1_b"launch-prefix="xterm -e gdb --args" output="screen" />
</launch>

这个启 动前缀会创建一个调用 gdb 节点的新 xterm 终端。根据需要设置断点,按 C 键或 R 键启动节点并调试.

3. 在 ROS 节点启动时调用 valgrind 分析节点

<launch><node name="example1_a" pkg="demo01_pub_cli" type="example1_a" launch-prefix="valgrind" output="screen" />
</launch>

4. 设置 ROS 节点 core 文件转储

5. 日志消息

ROS 有不同层级的调试消息输出,每条消息都有自己的名称,并根据相应条件输出消息,甚至可调。

1). 输出日志消息

所有输出的消息都附带其级别和当前时间戳,这两个值放在实际消息之前的方括号中。时间戳以 公历时间计时,代表自1970年1月1日以来的秒和纳秒计数

[ INFO] [1700317838.847020306]: I heard: [I am the example_a_node]

2). 设置调试消息级别

ROS 有5个日志记录标准级别,按照顺序排列分别是:

  1. DEBUG(调试)in green
  2. INFO(信息)in white
  3. WARN(警告)in yellow
  4. ERROR(错误)in red
  5. FATAL(致命)in purple

二、检测系统状态

1. rqt_graph

rosrun rqt_graph rqt_graph

rqt_graph

2. 可视化坐标变换

roslaunch turtle_tf turtle_tf_demo.launch

请添加图片描述

rosrun rqt_rviz rqt_rviz

请添加图片描述

3. 保存与回放数据

ROS 能够存储所有节点通过主题发布的消息。它能够创建一个消息记录包(bag)文件来保存消息,并包含消息的所有字段参数和时间戳。这允许离线回放实验并模拟真实的状态,包括消息的时间延迟。

1). 消息记录包文件

消息记录包文件是一个包含各个主题所发消息的容器,用于记录各个节点间的会话过程。简而言之,它们是系统运行期间消息传送的记录文件,并允许我们回放所有一切,包括时间延迟。消息记录包文件中存储的数据使用二进制格式。这个容器使用的数据结构非常特殊,它能够支持超高速数据流的处理和记录。每个消息与发布它的主题都被记录下来。因此,可以指定某个主题进行记录,或者直接选择全部(-a 参数)。

  • 首先运行节点
roslaunch demo01_pub_cli chapter2.launch
  • 记录所有的主题, 数据存储在当前目录下以日期作为文件名的消息记录包文件中
rosbag record -a
>>> [ INFO] [1700320804.461003795]: Subscribing to /rosout_agg[ INFO] [1700320804.461925882]: Recording to '2023-11-18-15-20-04.bag'.[ INFO] [1700320804.463208223]: Subscribing to /rosout[ INFO] [1700320804.464264122]: Subscribing to /message
  • 在 launch 文件中通过添加一个节点可以直接调用 rosbag record
<node pkg="rosbag" type="record" name="bag_record" args="/temp /accel" />
  • 回放消息记录包文件
rosbag play 2023-11-18-15-20-04.bag
>>> Waiting 0.2 seconds after advertising topics... done.Hit space to toggle paused, or 's' to step.[RUNNING]  Bag Time: 1700320816.481530   Duration: 12.015316 / 12.015517                Done.
  • 查看消息记录包文件的主题和消息
rosbag info 2023-11-18-15-20-04.bag
>>> path:        2023-11-18-15-20-04.bagversion:     2.0duration:    12.0sstart:       Nov 18 2023 15:20:04.47 (1700320804.47)end:         Nov 18 2023 15:20:16.48 (1700320816.48)size:        78.2 KBmessages:    358compression: none [1/1 chunks]types:       rosgraph_msgs/Log [acffd30cd6b6de30f120938c17c593fb]std_msgs/String   [992ce8a1687cec8c8bd883ec73ca41d1]topics:      /message      119 msgs    : std_msgs/String  /rosout       120 msgs    : rosgraph_msgs/Log (2 connections)/rosout_agg   119 msgs    : rosgraph_msgs/Log
  • rqt_bag
rqt_bag

请添加图片描述

4. rqt 与 rqt_gui 插件

rosrun rqt_gui rqt_gui

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—2760.最长奇偶子数组【简单】

2023每日刷题&#xff08;三十一&#xff09; Leetcode—2760.最长奇偶子数组 实现代码 #define MAX(a, b) ((a > b) ? (a): (b)) int longestAlternatingSubarray(int* nums, int numsSize, int threshold){int ans 0;int i 0;while(i < numsSize) {if(nums[i] >…

HUAWEI华为MateBook X 2020款i5集显(EUL-W19P)原装出厂Windows10系统

链接&#xff1a;https://pan.baidu.com/s/1eZuLjarWH2PjAWVqMWnzjQ?pwd2374 提取码&#xff1a;2374 原厂系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、华为电脑管家等预装程序

迭代新品 | 第四代可燃气体监测仪,守护燃气管网安全快人一步

城市地下市政基础设施是城市有序运行的生命线&#xff0c;事关城市安全、健康运行和高质量发展。近年来&#xff0c;我国燃气事故多发、频发。2020、2021、2022 年分别发生燃气事故668、1140 起、802 起&#xff0c;造成92、106、66 人死亡&#xff0c;560、763、487 人受伤。尤…

【docker】iptables实现NAT

iptables是一个Linux内核中的防火墙工具&#xff0c;可以被用来执行各种网络相关的任务&#xff0c;如过滤、NAT和端口转发等&#xff0c;可以监控、过滤和重定向网络流量。 iptables可以用于以下应用场景&#xff1a; 网络安全&#xff1a;iptables可以过滤网络流量&#xf…

CMSIS-RTOS在stm32使用

目录&#xff1a; 一、安装和配置CMSIS_RTOS.1.打开KEIL工程&#xff0c;点击MANAGE RUN-TIME Environment图标。2.勾选CMSIS CORE和RTX.3.配置RTOS 时钟频率、任务栈大小和数量&#xff0c; 软件定时器. 二、CMSIS_RTOS内核启动和创建线程。1.包含头文件。2.内核初始化和启动。…

注解【元数据,自定义注解等概念详解】(超简单的好吧)

注解的理解与使用 注解的释义元数据的含义基础阶段常见的注解注解的作用&#xff08;包括但不限于&#xff09;教你读懂注解内部代码内容五种元注解尝试解读简单注解我当时的疑惑点 自定义注解自定义注解举例 注解的原理总结 注解的释义 我们都知道注释是拿来给程序员看的&…

SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(七)

LEFT JOIN LEFT JOIN 同样用于关联两个表&#xff0c;ON 关键字后指定两个表共有的字段作为匹配条件&#xff0c;与 INNER JOIN 不同的地方在于匹配不上的数据行&#xff0c;INNER JOIN 对两表匹配不上的数据行不返回结果&#xff0c;而 LEFT JOIN 只对右表&#xff08;table2…

<C++>类和对象下|初始化列表|explicit static|友元|内部类|匿名对象|构造函数的优化

文章目录 1. 初始化列表2. explicit关键字3. 友元3.1 友元函数3.2 友元类 4. static关键字4.1 概念4.2 特性 5.内部类5.1 概念5.2 特性 6. 匿名对象7. 拷贝构造时的优化 1. 初始化列表 在类的构造函数体中&#xff0c;对成员属性写的操作叫做赋值&#xff0c;那么成员的初始化…

[CISCN 2023 初赛]ezbyte

从字符串找到%100s&#xff0c;发现下面有个yes 跟踪yes 、 yes之前有个jmp 看上面的代码&#xff0c;要想跳转到含有yes这一块&#xff0c;需要r13等于r12 xor r13&#xff0c;r13说明r13是0&#xff0c;但是找不到r12的操作代码 实际着这个关键的操作r12的加密逻辑&…

Android 弹出自定义对话框

Android在任意Activity界面弹出一个自定义的对话框&#xff0c;效果如下图所示: 准备一张小图片&#xff0c;右上角的小X图标64*64&#xff0c;close_icon.png&#xff0c;随便找个小图片代替&#xff1b; 第一步&#xff1a;样式添加&#xff0c;注意&#xff1a;默认在value…

基于SSM的在线投稿系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

RAAGR2-Net:一种使用多个空间帧的并行处理的脑肿瘤分割网络

RAAGR2-Net: A brain tumor segmentation network using parallel processing of multiple spatial frames RAAGR2-Net&#xff1a;一种使用多个空间帧的并行处理的脑肿瘤分割网络背景贡献实验N4 bias-field-correction 数据预处理Z-score and re-sampling Z-score归一化&#…