【ROS2】Beginner : CLI tools - rqt_console / launching nodes

使用 rqt_console 查看日志

目标:了解 rqt_console——一款用于查看日志消息的工具。
难度级别:初学者
预计时间:5 分钟

目录

  • 背景
  • 前提条件
  • 任务
    1. 设置
    2. rqt_console 上的消息
    3. 日志级别
  • 总结
  • 下一步

背景

rqt_console 是 ROS 2 中用于查看日志消息的 GUI 工具。通常,日志消息会直接显示在终端中,而通过 rqt_console,你可以长期收集这些消息,以更有条理的方式近距离查看、过滤消息,还能保存消息文件,甚至在后续重新加载已保存的文件进行查看。

节点会通过日志输出与事件和状态相关的消息,这些消息内容通常具有参考价值,方便用户了解系统运行情况。

前提条件

需提前安装 rqt_consoleturtlesim 功能包。

和往常一样,每个新打开的终端都需先执行 ROS 2 的环境配置文件(source setup 文件)。

任务

1. 设置

  1. 打开新终端,输入以下命令启动 rqt_console

    ros2 run rqt_console rqt_console
    

    在这里插入图片描述

    此时会弹出 rqt_console 窗口,窗口分为三个核心区域:

    • 顶部区域:显示系统输出的日志消息;
    • 中间区域:可通过排除不同严重级别的消息来过滤日志,点击右侧的“+”号按钮还能添加更多排除过滤器;
    • 底部区域:用于高亮包含指定字符串的消息,同样支持添加多个过滤条件。
  2. 再打开一个新终端,启动 turtlesim 节点:

    ros2 run turtlesim turtlesim_node
    

2. rqt_console 上的消息

为了让 rqt_console 显示日志消息,我们可以让乌龟撞到墙壁。打开新终端,输入以下 ros2 topic pub 命令(在“话题”教程中已详细介绍该命令),持续发送前进指令:

ros2 topic pub -r 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
  • -r 1 表示以 1 Hz 的频率持续发布话题消息,因此乌龟会不断向前移动并撞到墙壁。

此时在 rqt_console 窗口中,会反复显示带有 Warn(警告) 级别的日志消息,内容为乌龟撞到墙壁的提示。
在这里插入图片描述

完成演示后,在运行 ros2 topic pub 命令的终端中按 Ctrl+C,停止乌龟继续撞墙。

3. 日志级别

ROS 2 的日志级别按严重程度从高到低排序如下:

  1. Fatal(致命)
  2. Error(错误)
  3. Warn(警告)
  4. Info(信息)
  5. Debug(调试)

虽然各日志级别的定义没有绝对统一的标准,但通常遵循以下含义:

  • Fatal:表示系统即将终止运行,以避免自身受到严重损害;
  • Error:表示系统出现重大问题,虽不一定会损坏系统,但会导致系统无法正常运行;
  • Warn:表示出现意外情况或非理想结果,可能暗示存在深层问题,但不会直接影响功能正常使用;
  • Info:表示事件和状态更新,用于直观验证系统是否按预期运行;
  • Debug:详细记录系统执行的每一步流程,用于开发调试。
日志级别默认规则
  • 默认日志级别为 Info,此时只能看到默认级别及更高级别的消息(即 Info、Warn、Error、Fatal);
  • 默认情况下,只有 Debug 级别的消息会被隐藏,因为它是唯一比 Info 级别更低的日志类型;
  • 若修改默认级别,例如设为 Warn,则只会显示 Warn、Error、Fatal 级别的消息。
3.1 设置默认日志级别

启动节点时,可通过重映射(remapping)设置默认日志级别。在终端中输入以下命令,以 Warn 级别启动 /turtlesim 节点:

ros2 run turtlesim turtlesim_node --ros-args --log-level WARN

此时 rqt_console 窗口中不会显示上次启动 turtlesim 时出现的 Info 级初始消息——因为 Info 级别的优先级低于新设置的默认级别(Warn)。

总结

当你需要仔细检查系统日志消息时,rqt_console 会非常实用。查看日志消息的场景有很多,最常见的是排查问题根源,了解导致问题发生的一系列事件过程。

下一步

下一篇教程将介绍如何使用 ROS 2 启动文件(Launch)一次性启动多个节点。

启动多个节点

目标:使用命令行工具一次性启动多个节点。
难度级别:初学者
预计时间:5 分钟

目录

  • 背景
  • 前提条件
  • 任务
    1. 运行启动文件
    2. (可选)控制 Turtlesim 节点
  • 总结
  • 下一步

背景

在大部分入门教程中,你需要为每个要运行的节点打开一个新终端。当你构建的系统越来越复杂、需要同时运行的节点越来越多时,反复打开终端并重新输入配置信息会变得十分繁琐。

启动文件(Launch File)允许你一次性启动并配置多个包含 ROS 2 节点的可执行文件。

使用 ros2 launch 命令运行单个启动文件,即可一次性启动整个系统——包括所有节点及其配置。

前提条件

开始本教程前,请按照 ROS 2 安装页面(ROS 2 Installation page)上的说明安装 ROS 2。

本教程中使用的命令默认你已按照对应操作系统的二进制包安装指南(Linux 系统为 deb 包)完成安装。若你通过源码编译安装,仍可参考本教程操作,但 setup 文件的路径可能会有所不同,且无法使用 sudo apt install ros-<distro>-<package> 命令(该命令在初级教程中频繁使用)。

若你使用 Linux 且不熟悉 shell 操作,可参考相关教程学习基础用法。

和往常一样,每个新打开的终端都需先执行 ROS 2 的环境配置文件(source setup 文件)。

任务

1. 运行启动文件

打开一个新终端,输入以下命令:

ros2 launch turtlesim multisim.launch.py

该命令会执行如下启动文件(Python 格式):

from launch import LaunchDescription
import launch_ros.actions

def generate_launch_description():
    return LaunchDescription([
        launch_ros.actions.Node(
            namespace='turtlesim1', package='turtlesim',
            executable='turtlesim_node', output='screen'),
        launch_ros.actions.Node(
            namespace='turtlesim2', package='turtlesim',
            executable='turtlesim_node', output='screen'),
    ])

注意:上述启动文件采用 Python 编写,但你也可以使用 XML 或 YAML 格式创建启动文件。关于 ROS 2 不同启动文件格式的对比,可参考教程《Using XML, YAML, and Python for ROS 2 Launch Files》(使用 XML、YAML 和 Python 编写 ROS 2 启动文件)。

执行命令后,会启动两个 turtlesim 节点,对应弹出两个 Turtlesim 仿真窗口。
在这里插入图片描述

目前无需深入理解启动文件的具体内容,后续的 ROS 2 启动文件专题教程会提供更详细的说明。

2. (可选)控制 Turtlesim 节点

这些节点启动后,你可以像操作其他 ROS 2 节点一样控制它们。例如,打开两个额外的终端,输入以下命令,可让两只乌龟向相反方向旋转:

  • 第二个终端(控制第一个 Turtlesim 节点的乌龟):

    ros2 topic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
    
  • 第三个终端(控制第二个 Turtlesim 节点的乌龟):

    ros2 topic pub /turtlesim2/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"
    

执行上述命令后,你会看到两个 Turtlesim 窗口中的乌龟分别沿顺时针和逆时针方向旋转,效果类似下图:

在这里插入图片描述

总结

到目前为止,你完成的操作核心意义在于:通过一条命令启动了两个 turtlesim 节点。当你学会编写自己的启动文件后,就能以类似方式,通过 ros2 launch 命令一次性启动多个节点,并完成它们的配置。

下一步

在下一篇教程《Recording and playing back data》(记录与回放数据)中,你将学习另一个实用工具——ros2 bag

dwh@PC:~/carla-ros-bridge/catkin_ws$ catkin_make # 或 catkin build(若使用catkin_tools) Base path: /home/dwh/carla-ros-bridge/catkin_ws Source space: /home/dwh/carla-ros-bridge/catkin_ws/src Build space: /home/dwh/carla-ros-bridge/catkin_ws/build Devel space: /home/dwh/carla-ros-bridge/catkin_ws/devel Install space: /home/dwh/carla-ros-bridge/catkin_ws/install Multiple packages found with the same name "carla_ackermann_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ackermann_control - ros-bridge/carla_ackermann_control Multiple packages found with the same name "carla_ackermann_msgs": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ackermann_msgs - ros-bridge/carla_ackermann_msgs Multiple packages found with the same name "carla_ad_agent": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ad_agent - ros-bridge/carla_ad_agent Multiple packages found with the same name "carla_ad_demo": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ad_demo - ros-bridge/carla_ad_demo Multiple packages found with the same name "carla_common": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_common - ros-bridge/carla_common Multiple packages found with the same name "carla_manual_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_manual_control - ros-bridge/carla_manual_control Multiple packages found with the same name "carla_msgs": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_msgs - ros-bridge/carla_msgs Multiple packages found with the same name "carla_ros_bridge": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ros_bridge - ros-bridge/carla_ros_bridge Multiple packages found with the same name "carla_ros_scenario_runner": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ros_scenario_runner - ros-bridge/carla_ros_scenario_runner Multiple packages found with the same name "carla_ros_scenario_runner_types": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ros_scenario_runner_types - ros-bridge/carla_ros_scenario_runner_types Multiple packages found with the same name "carla_spawn_objects": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_spawn_objects - ros-bridge/carla_spawn_objects Multiple packages found with the same name "carla_twist_to_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_twist_to_control - ros-bridge/carla_twist_to_control Multiple packages found with the same name "carla_walker_agent": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_walker_agent - ros-bridge/carla_walker_agent Multiple packages found with the same name "carla_waypoint_publisher": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_waypoint_publisher - ros-bridge/carla_waypoint_publisher Multiple packages found with the same name "carla_waypoint_types": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_waypoint_types - ros-bridge/carla_waypoint_types Multiple packages found with the same name "pcl_recorder": - ros-bridge/carla-ros-bridge/src/ros-bridge/pcl_recorder - ros-bridge/pcl_recorder Multiple packages found with the same name "ros_compatibility": - ros-bridge/carla-ros-bridge/src/ros-bridge/ros_compatibility - ros-bridge/ros_compatibility Multiple packages found with the same name "rqt_carla_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/rqt_carla_control - ros-bridge/rqt_carla_control Multiple packages found with the same name "rviz_carla_plugin": - ros-bridge/carla-ros-bridge/src/ros-bridge/rviz_carla_plugin - ros-bridge/rviz_carla_plugin dwh@PC:~/carla-ros-bridge/catkin_ws$ source devel/setup.bash bash: devel/setup.bash: 没有那个文件或目录
03-19
<think>嗯,用户在使用catkin_make编译Carla ROS Bridge时遇到了多个同名包的问题,并且在编译后无法找到devel/setup.bash文件。首先,我需要分析这些同名包的原因。可能的情况是用户的工作空间中有重复的包路径,导致编译系统无法正确处理。例如,用户可能克隆了仓库到不同的目录,或者子模块嵌套导致路径重复。 接下来,用户执行source devel/setup.bash时提示文件不存在,这通常意味着编译没有成功完成,因此devel目录没有被正确生成。编译失败的原因很可能就是前面提到的重复包问题,导致catkin_make中途停止,从而没有生成必要的setup文件。 需要指导用户如何解决这些重复包的问题。首先应该检查工作空间中的src目录,查找是否有重复的包路径。例如,用户可能同时有ros-bridge/carla-ros-bridge/src/ros-bridge/...和ros-bridge/...这样的路径,这会导致catkin工具发现多个同名包,进而报错。 解决方法包括清理重复的包,可能通过移除重复的目录或调整工作空间的结构。另外,用户可能需要检查是否正确地克隆了子模块,或者是否有误操作导致包被复制到错误的位置。建议用户手动删除重复的包目录,然后重新运行catkin_make,确保编译过程顺利完成,从而生成devel/setup.bash文件。 此外,还需要提醒用户在编译成功后正确source环境变量,以确保ROS能够识别新编译的包。如果用户使用catkin build命令,可能需要使用不同的目录结构,但当前问题主要是重复包导致的编译失败,因此重点应放在解决路径冲突上。</think>在运行`catkin_make`时出现多个同名ROS包冲突的问题,这会导致编译失败。以下是逐步解决此问题的方法: --- ### **问题分析** 错误信息显示**同一工作空间(workspace)中存在多个同名ROS包**,例如: ``` Multiple packages found with the same name "carla_ackermann_control": - ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ackermann_control - ros-bridge/carla_ackermann_control ``` 原因是工作空间的`src`目录中存在重复的包路径。这通常由以下原因导致: 1. **错误地克隆仓库**:可能重复克隆了Carla ROS Bridge的子模块。 2. **子模块嵌套问题**:`carla-ros-bridge`可能自身包含子模块,与其他手动克隆的包冲突。 --- ### **解决方案** #### **步骤1:清理重复的包** 进入工作空间的`src`目录,手动删除重复的包: ```bash cd ~/carla-ros-bridge/catkin_ws/src # 删除所有重复路径的包(根据错误提示选择保留一个) # 例如:保留 "ros-bridge/carla-ros-bridge/src/ros-bridge/carla_ackermann_control" # 删除 "ros-bridge/carla_ackermann_control" rm -rf ros-bridge/carla_ackermann_control rm -rf ros-bridge/carla_ackermann_msgs # 其他重复包同理 ``` #### **步骤2:确保子模块正确初始化** 如果使用了Git子模块,需重新初始化: ```bash cd ~/carla-ros-bridge/catkin_ws/src git submodule update --init --recursive ``` #### **步骤3:重新编译** 清理之前的编译缓存并重新编译: ```bash cd ~/carla-ros-bridge/catkin_ws catkin clean -y # 若使用catkin_tools catkin_make ``` #### **步骤4:Source环境变量** 编译成功后,`devel/setup.bash`会自动生成: ```bash source devel/setup.bash ``` --- ### **注意事项** 1. **路径规范**:确保`src`目录中的包路径唯一,避免嵌套或重复克隆。 2. **子模块管理**:若从Git仓库克隆,建议使用`git submodule`统一管理依赖。 3. **编译失败排查**:若编译仍失败,检查终端输出的具体错误信息(如依赖缺失)。 --- ### **补充说明** - **`catkin_make` vs `catkin build`**:若使用`catkin_tools`工具链,建议使用`catkin build`,它能更好地处理复杂包依赖。 - **工作空间结构**:标准ROS工作空间结构应确保所有包位于`src`目录下,且无重复名称。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ray.so

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值