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

news2024/11/20 2:25:00

文章目录

  • 前言
  • 一、调试 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.bag
	version:     2.0
	duration:    12.0s
	start:       Nov 18 2023 15:20:04.47 (1700320804.47)
	end:         Nov 18 2023 15:20:16.48 (1700320816.48)
	size:        78.2 KB
	messages:    358
	compression: 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.coloradmin.cn/o/1225714.html

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

相关文章

openGauss通过VIP实现的故障转移

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

浅谈WPF之控件模板和数据模板

WPF不仅支持传统的Windows Forms编程的用户界面和用户体验设计&#xff0c;同时还推出了以模板为核心的新一代设计理念。在WPF中&#xff0c;通过引入模板&#xff0c;将数据和算法的“内容”和“形式”进行解耦。模板主要分为两大类&#xff1a;数据模板【Data Template】和控…

实验(三):微程序计数器uPC实验

一、实验内容与目的 实验要求&#xff1a; 利用 CP226 实验仪上的 K16..K23 开关做为 DBUS 的数据&#xff0c;其它开关做为控制信号&#xff0c;实现微程序计数器 uPC 的写入和加1功能。 实验目的&#xff1a; 1、了解模型机中微程序的基本概念。 2、了解 uPC 的结构、工作原理…

Java 高等院校分析与推荐系统

1&#xff09;项目简介 随着我国高等教育的大众化&#xff0c;高校毕业生就业碰到了前所未有的压力&#xff0c;高校学生就业问题开始进入相关研究者们的视野。在高校学生供给忽然急剧增加的同时&#xff0c;我国高校大学生的就业机制也在发生着深刻的变化&#xff0c;作为就业…

RT-Thread STM32F407 BMI088--SPI

BMI088是一款高性能6轴惯性传感器&#xff0c;由16位数字三轴24g加速度计和16位数字三轴2000/ s陀螺仪组成。 这里用SPI来驱动BMI088进行数据解读 第一步&#xff0c;首先在 RT-Thread Settings中进行配置 第二步&#xff0c;退出RT-Thread Settings&#xff0c;进入board.h…

未来科技中的云计算之路

随着科技的不断发展&#xff0c;云计算已经不再是一个陌生的词汇&#xff0c;而是我们日常生活中不可或缺的一部分。从智能家居到无人驾驶&#xff0c;再到虚拟现实和人工智能&#xff0c;云计算在这些领域都扮演着至关重要的角色。在这篇博客中&#xff0c;我们将一同探索云计…

SUID提权教程

SUID提权方法 一、SUID是什么&#xff1f;二、如何设置SUID权限&#xff1f;三、已知的具有SUID权限的二进制可执行文件四、查找具有root权限的SUID的文件1.find命令提权2.nmap命令提权3.more命令提权4.less命令提权5.bash命令提权6.vim命令提权7.awk命令提权8.cp命令提权 五、…

【如何学习Python自动化测试】—— 页面元素定位

接上篇自动化测试环境搭建&#xff0c;现在我们介绍 webdriver 对浏览器操作的 API。 2、 页面元素定位 通过自动化操作 web 页面&#xff0c;首先要解决的问题就是定位到要操作的对象&#xff0c;比如要模拟用户在页面上的输入框中输入一段字符串&#xff0c;那就必须得定位到…

UiPath Studio 2023.10 Crack

UiPath Studio是一款功能强大且用户友好的集成开发环境 (IDE)&#xff0c;专为机器人流程自动化 (RPA) 设计。它由自动化技术领域的领先公司UiPath开发。 以下是 UiPath Studio 的一些主要功能和组件&#xff1a; 图形用户界面 (GUI)&#xff1a;UiPath Studio 具有直观且用户友…

sqli-labs关卡18(基于http头部报错盲注)通关思路

文章目录 前言一、靶场通关需要了解的知识点1、什么是http请求头2、为什么http头部可以进行注入 二、靶场第十八关通关思路1、判断注入点2、爆数据库名3、爆数据库表4、爆数据库列5、爆数据库关键信息 总结 前言 此文章只用于学习和反思巩固sql注入知识&#xff0c;禁止用于做…

【数据预处理3】数据预处理 - 归一化和标准化

处理数据之前&#xff0c;通常会使用一些转换函数将「特征数据」转换成更适合「算法模型」的特征数据。这个过程&#xff0c;也叫数据预处理。 比如&#xff0c;我们在择偶时&#xff0c;有身高、体重、存款三个特征&#xff0c;身高是180、体重是180、存款是180000&#xff1…

算法 LeetCode 题解 | 最小栈

大家好&#xff0c;我是木川 一、题目描述 请你设计一个 最小栈 。它提供 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除…

【Proteus仿真】【STM32单片机】公交车报站系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD12864显示模块、DS18B20温度传感器、DS1302时钟模块、按键、LED蜂鸣器、ULN2003、28BYJ48步进电机模块等。 主要功能&#xff1a; 系统运行…

vulhub redis-4-unacc

环境搭建 cd vulhub/redis/4-unacc docker-compose up -d 漏洞复现 检测 redis-cli -h ip 使用redis工具 工具地址&#xff1a;https://github.com/vulhub/redis-rogue-getshell 下载完成后&#xff0c;先进入RedisModulesSDK/exp/ 目录进行make操作 获得exp.so后可以进行…

Linux shell编程学习笔记26:stty(set tty)

之前我们探讨了Linux中的tty&#xff0c;tty命令的主要功能是显示当前使用的终端名称。 如果我们想进一步对tty进行设置&#xff0c;就要用到stty。 stty的功能&#xff1a;显示和修改终端特性&#xff08;Print or change terminal characteristics&#xff09;。 1 stty -…

【数据预处理2】数据预处理——数据标准化

数据标准化 1. 什么是标准化&#xff1f;   数据标准化是一个常用的数据预处理操作&#xff0c;目的是将不同规格的数据转换到统一规格或不同分布的数据转换到某个特定范围&#xff0c;以减少规模、特征、分布差异等对模型的影响。这种操作也叫作无量纲化。   除了用作模型…

【Dynamic-datasource】Springboot多数据源整合

引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version> </dependency> 整体pom文件&#xff1a; <?xml versi…

SpringBoot 整合 Freemarker

通过 Freemarker 模版&#xff0c;我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。 Freemarker 不是面向最终用户的&#xff0c;而是一个 Java 类库&#xff0c;我们可以将之作为一个普通的组件嵌入到我们的产品中。 Freemarker 模版后缀为 .ftl(FreeMarke…

【音视频基础】AVI文件格式

AVI文件采用的是RIFF文件结构方式。波形音频wave&#xff0c;MIDI和数字视频AVI都采用这种格式存储。 AVI文件的整体结构如下图所示 构造RIFF文件的基本单元叫做数据块&#xff08;Chunk&#xff09;&#xff0c;每个数据块包含3个部分 4字节的数据块标记&#xff08;或者叫…

2023-11-18 Android Linux资源限制命令 ulimit,比如ulimit -d 是设置进程占用的最大数据段大小,默认是unlimited。

一、通过ulimit -a 命令可以查看当前的各种资源限制&#xff0c;比如ulimit -d 是 进程占用的最大数据段大小。 # ulimit -a -t: time(cpu-seconds) unlimited -f: file(blocks) unlimited -c: coredump(blocks) 0 -d: data(KiB) unlimited -s:…