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.mzph.cn/news/151409.shtml

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

相关文章

trzsz支持文件拖动到终端进行上传,类似lrzsz

考虑到 LapTop -> Host 1 -> Host 2 -> Docker -> TMUX&#xff0c;使用scp或sftp命令不方便&#xff1b;使用rz和sz命令就会方便很多&#xff0c;但是却又与 TMUX 不兼容&#xff08;备注&#xff1a;Tmux是一个终端复用工具&#xff0c;允许用户在一个终端窗口中…

Hello World分析

文章目录 代码分析源代码代码解析注释单行注释多行注释 代码分析 源代码 以下就是我们上一个文章中编写过的程序。大家一定注意到&#xff0c;这个代码相比上一个代码多了很多的内容&#xff0c;这些内容并不影响程序的运行&#xff0c;因为这些是注释内容&#xff0c;本章节会…

前端食堂技术周刊第 105 期:TS 5.3 RC、Vite 5.0、W3C 新任 CEO、有害的 Pinia 模式、2024 更快的 Web

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;金桂普洱 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…

初学UE5 C++②

目录 导入csv表格数据 创建、实例化、结构体 GameInstance Actor camera 绑定滚轮控制摇臂移动 碰撞绑定 角色碰撞设定 按钮 UI显示 单播代理 多播和动态多播 写一个接口 其他 NewObject 和 CreateDefaultSubobject区别 导入csv表格数据 创建一个object的C类 …

设计模式-责任链-笔记

动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;一个请求可能被多个对象处理&#xff0c;但是每个请求在运行时只能有个接受者&#xff0c;如果显示指定&#xff0c;将必不可少地带来请求者与接受者的紧耦合。 如何使请求的发送者不需要指定具体的接受…

linux nas

挂载到本地 mkdir -p /mnt/mountnasdir mount -t nfs 192.168.62:/cnas_id10086_vol10010_dev/ /mnt/mountnasdir

ORA-00600 【3948】,ORA-00600 【3949】

前言 这个报错没有从ORA600那个tool中查到。 回顾 环境 环境是windows 11203 rac环境&#xff0c;非归档数据库 有部分数据文件建到了本地文件系统。目标是将部分数据文件通过switch to copy的形式移动到diskgroup里 流程 srvctl关闭双节点&#xff0c; 启动单节点到moun…

C语言幂级数求近似值

要计算幂级数的近似值&#xff0c;可以使用以下代码&#xff1a; #include <stdio.h> #include <math.h> double powerSeries(double x, int n) { double result 1.0; // 初始化结果为级数的第一项 double term 1.0; // 初始化当前项的值 for (int i 1; i < …

视频剪辑方法:一键批量调整色调的高效技巧

在视频剪辑的过程中&#xff0c;色调调整是一项非常重要的工作。它能够改变影片的氛围、情感和视觉效果&#xff0c;更好地沉浸在影片的情境中。然而&#xff0c;对于许多视频剪辑师来说&#xff0c;批量调整色调是一项非常繁琐的任务&#xff0c;需要耗费大量的时间和精力。色…

Docker Desktop 配置阿里云镜像加速

阿里云搜索镜像&#xff0c;打开容器镜像服务&#xff0c;复制镜像加速器地址 Docker Desktop 右上角设置&#xff0c;选择 Docker Engine&#xff0c;在配置中添加阿里云的镜像地址&#xff0c;右下 Apply & restart 即可。 "registry-mirrors": ["https…

vmware workstation pro 17.5 安装 macos 13.5.2 虚拟机超详细图文教程

前言 本文很细&#xff0c;甚至有点墨迹&#xff0c;主要为了方便从来没用过 vmware 的新人&#xff0c;其实大部分步骤和正常安装虚拟机没有区别&#xff0c;详细贴图以方便大家对比细节 参考文章 感谢大佬们的无私分享 https://blog.csdn.net/qq_19731521/article/details…

idea中误删.iml和.idea文件,如何处理

目录 一、问题描述 二、解决方案 1、理论知识 &#xff08;1&#xff09;.iml 文件 &#xff08;2&#xff09;.idea文件 2、操作环境 3、操作步骤 &#xff08;1&#xff09;找到【Maven】工具按钮 &#xff08;2&#xff09;点图标&#xff0c;重复导入maven项目&am…

睡前随笔1

这个世界上为什么会有自卑内向一词&#xff0c;难道是因为大家潜意识里的弱肉强食吗&#xff1f; 在一个恶劣的环境中&#xff0c;在一个资源有限的环境中&#xff0c;人们必定会弱肉强食&#xff0c;抢占资源。 这个世界的一切有哪些活动是你喜欢的呢&#xff1f;我们处在一…

大批量合并识别成一个表或文档的方法

金鸣表格文字识别系统功能强大&#xff0c;其中可以将上百张图片或上百页PDF中的表格文字合并识别成一个表格或文档的功能尤其受到广大用户的欢迎&#xff0c;那应该怎么操作呢&#xff1f; 一、打开金鸣表格文字识别软件&#xff0c;点击左上角的“表格识别”&#xff0c;选择…

多因素方差分析(Multi-way Analysis of Variance) R实现

1, data0507 flower 是某种植物在两个海拔和两个气温下的开花高度&#xff0c;采用合适 的统计方法&#xff0c;检验该种植物的开花高度在不同的海拔之间和不同的气温之间有无差异&#xff1f;如果有差异&#xff0c;具体如何差异的&#xff1f;&#xff08;说明依据、结论等关…

LintCode 1394 · Goat Latin (字符串处理题)

1394 Goat Latin Description A sentence S is given, composed of words separated by spaces. Each word consists of lowercase and uppercase letters only. We would like to convert the sentence to “Goat Latin” (a made-up language similar to Pig Latin.) The …

Spark资源规划-资源上线评估

1、总体原则 以单台服务器 128G 内存&#xff0c;32 线程为例。 先设定单个 Executor 核数&#xff0c;根据 Yarn 配置得出每个节点最多的 Executor 数量&#xff0c;每个节点的 yarn 内存/每个节点数量单个节点的数量 总的 executor 数单节点数量*节点数。 2、具体提交参数 …

Java中异常的概念、体系结构和分类

引言&#xff1a; 在Java编程中&#xff0c;异常是一种特殊情况的事件&#xff0c;它打断了程序正常的执行流程&#xff0c;需要进行相应的处理。理解异常的概念、体系结构和分类是成为一名优秀的Java开发者的基本要求。在本篇博客中&#xff0c;我们将详细讨论Java中异…

【ceph】AI时代-数据为王-ceph存储将成为未来比较看好的赛道之一,为什么不all in一把学习一个不那么卷的赛道呢?

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

Codeforces Round 908 (Div. 2)

一个教训&#xff1a;做题的时候一定要自己模拟一遍所有样例&#xff0c;这样思路出来的很快&#xff01;&#xff01;&#xff01; C. Anonymous Informant Example input Copy 6 5 3 4 3 3 2 3 3 100 7 2 1 5 5 6 1 1 1 1 1 1000000000 1 8 48 9 10 11 12 13 14 …