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



    前言

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

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

    一、调试 ROS 节点

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

    1. gdb 调试器

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

    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)]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这个启 动前缀会创建一个调用 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>
    
    • 1
    • 2
    • 3
    • 4

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

    5. 日志消息

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

    1). 输出日志消息

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

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

    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
    
    • 1

    rqt_graph

    2. 可视化坐标变换

    roslaunch turtle_tf turtle_tf_demo.launch
    
    • 1

    请添加图片描述

    rosrun rqt_rviz rqt_rviz
    
    • 1

    请添加图片描述

    3. 保存与回放数据

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

    1). 消息记录包文件

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

    • 首先运行节点
    roslaunch demo01_pub_cli chapter2.launch
    
    • 1
    • 记录所有的主题, 数据存储在当前目录下以日期作为文件名的消息记录包文件中
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 在 launch 文件中通过添加一个节点可以直接调用 rosbag record
    <node pkg="rosbag" type="record" name="bag_record" args="/temp /accel" />
    
    • 1
    • 回放消息记录包文件
    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.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 查看消息记录包文件的主题和消息
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • rqt_bag
    rqt_bag
    
    • 1

    请添加图片描述

    4. rqt 与 rqt_gui 插件

    rosrun rqt_gui rqt_gui
    
    • 1

  • 相关阅读:
    【C++天梯计划】1.4 排列组合(Permutation and Combination)
    TensorFlow开发者认证通过心得
    python操作elasticsearch
    如何使用Solidity和Hardhat构建你自己的NFT以及NFT交易市场
    SpringBoot教程(16) 什么是RESTful?
    Hadoop伪分布式安装教程
    【ROS2原理19】定时器模型
    栈与队列练习题
    爱上开源之golang入门至实战-第二章语言基础
    torch.torchvision
  • 原文地址:https://blog.csdn.net/Ashen_0nee/article/details/134483942