ROS 2 Lyrical Luth启程-Ubuntu26.04-


本文提供了ROS2 Lyrical Luth版本的完整安装指南和功能说明。安装部分详细介绍了Ubuntu 26.04系统下的二进制包安装流程,包括系统环境配置、ROS2本体安装、环境变量设置和验证步骤。功能详解部分全面介绍了该版本的新特性,包括执行器优化、参数校验、Python异步节点、零拷贝消息发布、Launch文件增强、rosbag2改进等核心功能更新。作为长期支持版本(LTS),Lyrical Luth版本提供了多项性能优化和功能扩展,支持周期至2031年5月,适合机器人开发长期项目使用。


ROS2 Lyrical正式版替换测试版记录


ROS 2 Lyrical Luth Ubuntu 二进制包(Deb)安装指南

一、版本与平台说明

ROS 2 Lyrical Luth 目前仅提供 Ubuntu 26.04 (Resolute Raccoon) 系统的 Deb 安装包,支持架构:amd64(桌面/服务器)arm64(嵌入式设备)。 本文区分必装步骤可选步骤,完整翻译并补充操作说明、注意事项。


二、目录

  1. 前期准备(系统环境配置)
    1. 配置系统字符集(必选
    2. 启用系统软件源(必选
    3. 安装开发工具(可选
  2. 安装 ROS 2 本体(必选
    1. 更新系统与软件源缓存
    2. 桌面完整版安装(推荐)
    3. 基础精简版安装
  3. 安装额外中间件 RMW(可选
  4. 配置运行环境(必选
  5. 运行示例验证安装(推荐
  6. 后续学习指引
  7. 问题排查
  8. 卸载 ROS 2(可选操作)

三、详细安装步骤

3.1 系统环境配置

3.1.1 配置 UTF-8 字符集(必选)

ROS 2 要求系统使用 UTF-8 编码 ,Docker 等极简环境默认可能为 POSIX,会导致乱码、功能异常,必须配置。

  1. 查看当前字符集

bash

运行

复制代码
locale

若输出中无 UTF-8 相关字段,执行以下命令配置:

  1. 安装字符集工具、生成英文 UTF-8 字符集

bash

运行

复制代码
sudo apt update && sudo apt install locales -y
sudo locale-gen en_US en_US.UTF-8
  1. 全局设置系统编码

bash

运行

复制代码
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
  1. 再次校验配置结果

bash

运行

复制代码
locale

看到 LANG=en_US.UTF-8LC_ALL=en_US.UTF-8 即配置成功。


3.1.2 启用系统 Universe 软件源 + ROS 官方源(必选)

Ubuntu 默认部分版本未开启 universe 仓库,且需要手动添加 ROS 专属 APT 源,所有安装依赖都依赖此步骤

  1. 安装软件源管理工具,并启用 Universe 仓库

bash

运行

复制代码
sudo apt install software-properties-common -y
sudo add-apt-repository universe
  1. 安装 curl(用于在线拉取源配置包)

bash

运行

复制代码
sudo apt update && sudo apt install curl -y
  1. 自动获取最新源配置包版本,并下载安装 该脚本会自动匹配当前 Ubuntu 系统代号,下载对应版本的 ros2-apt-source(作用:导入 ROS 软件源密钥、配置 APT 源地址)

bash

运行

复制代码
# 获取最新版本号
export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}')

# 下载 Deb 包到 /tmp 目录
curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb"

# 安装源配置包
sudo dpkg -i /tmp/ros2-apt-source.deb

说明:后续 ROS 源地址、密钥更新会随该包自动升级,无需手动维护。


3.1.3 安装开发工具(可选)

如果后续需要编译源码、开发自定义功能包、使用编译工具链,建议安装;仅运行现成程序可跳过。

bash

运行

复制代码
sudo apt update && sudo apt install ros-dev-tools -y

3.2 安装 ROS 2 本体(必选)

3.2.1 更新软件源并升级系统

安装前强烈建议更新系统所有软件包,避免版本依赖冲突:

bash

运行

复制代码
# 更新APT缓存
sudo apt update
# 升级系统全部已安装包
sudo apt upgrade -y
3.2.2 两种安装版本(二选一)
方式 1:桌面完整版(推荐,新手 / 开发首选)

包含 ROS 核心、RViz 可视化工具、仿真、示例程序、教程、GUI 工具,功能最全。

bash

运行

复制代码
sudo apt install ros-lyrical-desktop -y
方式 2:基础精简版(纯服务端 / 嵌入式使用)

仅保留通信库、消息定义、命令行工具,无任何图形界面工具,体积更小,适合机器人下位机、服务器。

bash

运行

复制代码
sudo apt install ros-lyrical-ros-base -y

3.3 安装额外 RMW 中间件(可选)

ROS 2 支持多种通信中间件(RMW),默认使用 Fast DDS 。 如需切换为 Zenoh、Cyclone DDS 等其他中间件,可额外安装对应包,安装方法参考官方多中间件使用文档; 仅使用默认 Fast DDS 可直接跳过此步骤


3.4 配置环境变量(必选,每次终端生效)

ROS 2 不会自动配置环境变量,打开新终端都需要执行以下命令 ,否则无法识别 ros2 命令。

3.4.1 临时生效(当前终端)

根据你使用的 Shell 选择对应命令:

  1. Bash(Ubuntu 默认终端)

bash

运行

复制代码
source /opt/ros/lyrical/setup.bash
  1. Zsh

bash

运行

复制代码
source /opt/ros/lyrical/setup.zsh
  1. 通用兼容格式(sh)

bash

运行

复制代码
source /opt/ros/lyrical/setup.sh
3.4.2 永久生效(推荐,所有终端自动加载)

以默认 Bash 为例,将环境配置写入用户配置文件:

bash

运行

复制代码
echo "source /opt/ros/lyrical/setup.bash" >> ~/.bashrc
# 立即生效
source ~/.bashrc

Zsh 用户对应写入 ~/.zshrc 即可。


3.5 运行示例,验证安装(推荐)

安装完成后通过官方 talker/listener 示例测试 C++、Python 接口通信是否正常。

操作步骤
  1. 终端 1(运行 C++ 发布节点 talker)

bash

运行

复制代码
# 已配置永久环境变量可省略 source
ros2 run demo_nodes_cpp talker

正常输出:Publishing: "Hello World: 序号"

  1. 新建终端 2(运行 Python 订阅节点 listener)

bash

运行

复制代码
ros2 run demo_nodes_py listener

正常输出:I heard: "Hello World: 序号"

两端正常收发消息 = ROS 2 安装、通信功能全部正常。

补充:若使用了其他 RMW 中间件,可参考官方文档切换中间件后重新测试。


四、后续步骤

安装验证完成后,可继续学习官方教程:

  • 搭建个人工作空间
  • 创建自定义功能包、消息、节点
  • 学习 ROS 2 核心概念、Launch 启动、参数、服务、动作等功能。

五、问题排查

遇到安装报错、命令无法识别、通信异常等问题,可查阅 ROS 2 官方故障排查文档。


六、卸载 ROS 2(可选操作)

如需卸载当前二进制版本、切换为源码编译版本,按以下步骤执行:

6.1 卸载所有 ROS 2 Lyrical 相关包

bash

运行

复制代码
sudo apt remove '~nros-lyrical-*' -y
# 清理无用依赖包
sudo apt autoremove -y

6.2 卸载 ROS 源配置包(彻底移除 ROS 软件源)

bash

运行

复制代码
sudo apt remove ros2-apt-source -y
# 再次更新、清理、升级系统
sudo apt update
sudo apt autoremove -y
sudo apt upgrade -y

6.3 额外清理(可选)

  1. 手动删除临时安装包:

bash

运行

复制代码
rm /tmp/ros2-apt-source.deb
  1. 编辑 Shell 配置文件,删除手动添加的 source /opt/ros/lyrical/setup.* 行,避免终端报错。

ROS 2 Lyrical Luth(代号 Lyrical,2026 年 5 月)完整中文详解

一、版本概述

Lyrical LuthROS 2 的第 12 个正式版本 ,属于长期支持(LTS)版本 ,官方维护支持周期至 2031 年 5 月。 本文全面翻译、梳理该版本新增功能、使用示例、命令行、代码用法及底层接口更新。


二、目录

  1. 核心执行器优化(rclcpp)
  2. 参数数组范围校验(rclcpp)
  3. Python 异步节点 AsyncNode(rclpy)
  4. 零拷贝消息发布 rosidl::Buffer
  5. YAML 参数文件类型显式标注
  6. Launch 文件逐消息日志级别控制
  7. Launch 文件新增变量拼接替换器
  8. 运行时切换 ROS 日志后端
  9. rosbag2 录包远程服务控制
  10. Python 程序化控制录包 / 播包
  11. 循环录包(限制最大包文件数)
  12. 录包拆分文件命名优化
  13. rosbag2 消息丢失监控
  14. Fish Shell 环境支持
  15. 增强 ros2 param 参数命令
  16. ros2 doctor 诊断报告升级
  17. 服务详情增强 ros2 service info --verbose
  18. 多主题带宽统计 ros2 topic bw
  19. URDF 机器人描述格式升级
  20. 机器人状态发布器功能扩展
  21. 通用资源获取服务
  22. CMake 构建系统优化
  23. 线程名称工具与底层接口更新
  24. 插件构造函数传参(class_loader)
  25. 运行时追踪(Tracing)功能优化

三、分模块功能详解

1. 回调组事件执行器(Callback Group Events executor,rclcpp)

针对执行器性能优化,新增 EventsCBGExecutor 回调组事件执行器 ,继承原有事件执行器能力,支持多 ROS 时间源 + 多线程 。 相比单线程 / 多线程执行器,CPU 占用降低 10%~15%

C++ 代码使用示例

cpp

运行

复制代码
#include <rclcpp/rclcpp.hpp>

// 自定义节点类
class MyNode : public rclcpp::Node
{
public:
  MyNode() : Node("my_node") {}
};

int main(int argc, char ** argv)
{
  rclcpp::init(argc, argv);
  auto node = std::make_shared<MyNode>();
  // 实例化新的事件回调组执行器
  rclcpp::executors::EventsCBGExecutor executor;
  executor.add_node(node);
  executor.spin();
  rclcpp::shutdown();
  return 0;
}
组件节点(Composable Node)使用
  1. 命令行启动容器

bash

运行

复制代码
ros2 run rclcpp_components component_container --executor-type events-cbg
  1. XML Launch 文件配置

xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<launch>
  <node_container pkg="rclcpp_components" exec="component_container" 
    name="my_node_container" namespace="" args="--executor-type events-cbg">
    <!-- 在此添加你的组件节点 -->
  </node_container>
</launch>

2. 整型 / 浮点数组参数范围校验(rclcpp)

现在支持对整数数组、浮点数组配置参数范围描述符,自动校验参数上下限、步长,非法参数会直接拦截。

代码示例(限制整型数组:2~10、步长 2,仅允许偶数)

cpp

运行

复制代码
rcl_interfaces::msg::ParameterDescriptor descriptor;
descriptor.integer_range.resize(1);
auto & integer_range = descriptor.integer_range.at(0);

integer_range.from_value = 2;    // 最小值
integer_range.to_value = 10;    // 最大值
integer_range.step = 2;         // 步长

// 声明数组参数,并绑定范围校验规则
node->declare_parameter(
  "my_integer_array", 
  std::vector<int64_t>{2, 4, 6, 8, 10}, 
  descriptor
);

3. Python 异步节点 AsyncNode(rclpy)

新增 AsyncNode 类,原生支持 Python asyncio 异步事件循环,订阅、服务、定时器回调均可使用 awaitCPU 开销远低于默认单线程执行器

完整代码示例

python

运行

复制代码
import asyncio
import rclpy
from rclpy.experimental import AsyncNode

class HelloWorldNode(AsyncNode):
    def __init__(self):
        super().__init__('hello_world_node')
        # 创建5秒触发一次的定时器
        self._timer = self.create_timer(5.0, self._cb)

    async def _cb(self):
        self.get_logger().info('Hello')
        # 支持仿真时间的异步休眠
        await self.get_clock().sleep(1.0)
        self.get_logger().info('World!')

async def _main():
    with rclpy.init():
        await HelloWorldNode().run()

if __name__ == '__main__':
    asyncio.run(_main())

支持异步调用服务、异步等待时钟,完美适配高并发异步场景。


4. 基于 rosidl::Buffer 的零拷贝消息发布

传统 uint8[] 数组会频繁内存拷贝,新版本将 C++ 中 uint8[] 字段类型替换为 rosidl::Buffer<uint8_t> ,实现数据零拷贝收发

适用场景
  • 数据存在 GPU / 硬件加速器中,无需反复拷贝内存;
  • 大数据流、图像、点云等高频传输场景。
说明
  1. 当前仅兼容 rmw_fastrtps_cpp 中间件,Zenoh 中间件后续会适配;
  2. 可自定义 rosidl::BufferBackend 后端,对接自研硬件 / AI 库。

5. YAML 参数文件显式类型标注

解决 YAML 自动类型推断错误问题,通过 YAML 标签 强制指定参数类型。

示例配置

yaml

复制代码
my_node:
  ros__parameters:
    string_param: !!str true      # 强制字符串类型
    bool_param: !!bool yes       # 强制布尔类型
    int_param: !!int 0           # 强制整型
    float_param: !!float 10      # 强制浮点型
    seq_param: !!seq [10, 0, -10]# 数组类型
    map_param: !!map {str: string, bool: true, int: 10, float: 1.1} # 字典类型

6. Launch 文件:单条日志独立级别控制

Launch 脚本支持为单条日志单独设置日志等级,方便调试时过滤日志。

XML Launch 示例

xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<launch>
  <!-- 通用写法:指定级别 -->
  <log level="INFO" message="Hello world! (普通信息日志)" />
  <!-- 快捷标签 -->
  <log_debug message="调试日志" />
  <log_info message="普通信息日志" />
  <log_warning message="警告日志" />
  <log_error message="错误日志" />
</launch>

7. Launch 文件新增拼接替换器

XML/YAML Launch 新增两个变量替换器,用于动态拼接字符串、文件路径

  • $(string-join):字符串拼接
  • $(path-join):路径拼接
使用示例

xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<launch>
  <!-- 字符串拼接 -->
  <log_info message="网址:$(string-join . https://docs ros org)"/>
  <!-- 路径拼接 -->
  <log_info message="环境脚本:/$(path-join opt ros lyrical $(string-join . setup bash))"/>
</launch>

8. 运行时切换 ROS 日志后端

以往切换日志库需要重新编译 rcl,现在通过环境变量即可在运行时切换:

bash

运行

复制代码
# 设置环境变量,指定日志后端
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog

可选值:

  1. rcl_logging_spdlog:默认日志后端
  2. rcl_logging_noop:空日志(关闭所有日志输出)
  3. 自定义日志实现名称

9. rosbag2 录包:远程服务控制

新增一组 ROS 服务,支持远程启停录包、主题发现、状态查询,无需操作终端。

常用操作示例

bash

运行

复制代码
# 1. 正常开始录包
ros2 bag record --all -o /tmp/my_bag

# 2. 另一个终端:远程停止录包
ros2 service call /rosbag2_recorder/stop rosbag2_interfaces/srv/Stop "{}"

# 3. 远程重新启动录包(新存储路径)
ros2 service call /rosbag2_recorder/record rosbag2_interfaces/srv/Record "{uri: 'file:///tmp/my_bag_2'}"

配套服务:启动 / 停止主题发现、查询发现状态。


10. Python 程序化控制录包 & 播包

提供 rosbag2_py 原生 Python API,支持代码层面暂停、继续、跳转、步进、等待结束,替代传统阻塞式命令行调用。

示例 1:Python 控制录包

python

运行

复制代码
import rclpy
import rosbag2_py

with rclpy.init():
    # 存储配置 + 录包配置
    storage_opts = rosbag2_py.StorageOptions(uri='/tmp/my_bag', storage_id='mcap')
    record_opts = rosbag2_py.RecordOptions()
    record_opts.all_topics = True

    recorder = rosbag2_py.Recorder(storage_opts, record_opts)
    recorder.start_spin()
    recorder.record()

    recorder.pause()       # 暂停录包
    print(recorder.is_paused())
    recorder.stop()        # 停止录包
    recorder.stop_spin()
示例 2:Python 控制播包

python

运行

复制代码
import rclpy
import rosbag2_py

with rclpy.init():
    storage_opts = rosbag2_py.StorageOptions(uri='/tmp/my_bag', storage_id='mcap')
    play_opts = rosbag2_py.PlayOptions()
    play_opts.start_paused = True  # 启动后先暂停

    player = rosbag2_py.Player(storage_opts, play_opts)
    player.start_spin()
    player.play()

    print(player.play_next())  # 单步播放一条消息
    player.resume()            # 继续播放
    player.pause()
    player.seek(0)             # 跳转到包起始位置
    player.stop()
    player.stop_spin()

11. 循环录包(限制最大文件数)

针对磁盘空间有限的机器人场景,新增 --max-bag-files 参数,自动删除最旧的分包文件,实现循环覆盖

命令示例

bash

运行

复制代码
# 单个分包最大 100MB,最多保留 5 个包文件,超出自动删旧文件
ros2 bag record --all --max-bag-size 100000000 --max-bag-files 5

12. 录包拆分文件命名规则优化

分包文件采用自描述、可溯源 命名格式: {序号}_{包前缀}_{时间戳}.后缀

  • 序号:分包编号(从 0 开始)
  • 前缀:录包目录名
  • 时间戳:年_月_日-时_分_秒 本地时间
  • 后缀:.mcap/.db3

便于批量区分、归档历史数据包。


13. rosbag2 消息丢失监控

新增消息丢失观测能力 ,底层统计传输层、录包内部的丢包数据,并通过话题 /events/rosbag2_messages_lost 发布统计信息,提前发现链路异常。

使用命令

bash

运行

复制代码
# 录包,并设置统计消息发布频率最大10Hz
ros2 bag record --all --stats_max_publishing_rate 10 -o /tmp/my_bag

# 监听丢包事件,无输出则代表无丢包
ros2 topic echo /events/rosbag2_messages_lost

14. Fish Shell 环境支持

正式提供 setup.fish 环境脚本,原生支持 Fish Shell:

bash

运行

复制代码
source /opt/ros/lyrical/setup.fish

搭配 colcon-fish 插件可完整支持编译工具链。


15. 增强 ros2 param 命令

(1)查询所有节点的同一个参数

bash

运行

复制代码
# 查看所有节点的 use_sim_time 参数
ros2 param get use_sim_time
(2)单节点批量查参数

bash

运行

复制代码
ros2 param get /robot_state_publisher frame_prefix ignore_timestamp publish_frequency
(3)单节点批量设参数

bash

运行

复制代码
ros2 param set /robot_state_publisher frame_prefix foo ignore_timestamp True publish_frequency 10.0

16. ros2 doctor --report 诊断报告升级

诊断报告新增三类信息:动作(Action)、服务(Service)、ROS 环境变量,排障、提交问题时可直接使用。

bash

运行

复制代码
ros2 doctor --report

输出包含:动作服务数量、服务列表、全量 ROS/rmw/rcutils 环境变量。


17. 服务详情增强:ros2 service info --verbose

新增 --verbose 详细模式,输出服务端点、GID、完整 QoS 配置,专门用于排查客户端 / 服务端 QoS 不匹配问题。

bash

运行

复制代码
ros2 service info --verbose /robot_state_publisher/list_parameters

同时开放 C++/Python 接口,代码中可获取服务 / 客户端信息:

python

运行

复制代码
# Python
node.get_servers_info_by_service('some/service/name')
node.get_clients_info_by_service('some/service/name')

cpp

运行

复制代码
// C++
node->get_servers_info_by_service("some/service/name");
node->get_clients_info_by_service("some/service/name");

18. 多主题带宽统计 ros2 topic bw

支持同时统计多个主题带宽,或全局统计所有主题:

bash

运行

复制代码
# 统计指定多个主题
ros2 topic bw /tf /joint_states

# 统计系统所有主题带宽
ros2 topic bw --all

19. URDF 机器人描述格式 1.2 版本升级

URDF 升级至 version="1.2",新增特性:

  1. 原生 ** 四元数(quaternion)** 姿态描述
  2. ** 胶囊体(capsule)** 碰撞 / 可视化几何体
  3. 关节新增 ** 加速度、减速度、加加速度(jerk)** 限位
示例代码

xml

复制代码
<?xml version="1.0" ?>
<robot name="capsule_arm" version="1.2">
  <link name="link1">
    <visual>
      <origin xyz="0 0 0.25" quat_xyzw="0 0 0 1"/>
      <geometry>
        <capsule radius="0.1" length="0.5"/>
      </geometry>
    </visual>
  </link>

  <joint name="joint1" type="revolute">
    <origin xyz="0 0 0.5" quat_xyzw="0 0.7071068 0 0.7071068"/>
    <!-- 新增加速度、减速度、加加速度限制 -->
    <limit lower="-1.57" upper="1.57" velocity="2.0" acceleration="10.0" deceleration="5.0" jerk="50.0"/>
  </joint>
</robot>

备注:RViz 的 Robot Model 插件暂不支持胶囊体显示。


20. robot_state_publisher 功能扩展

新增参数 use_robot_description_topic,开启后不再发布 robot_description 话题,而是订阅该话题。 适用场景:机器人模型由外部框架维护,仅让该节点解析 TF 变换,实现模块解耦。


21. 通用资源获取服务

原有 RViz 仅能通过网络加载网格模型,新版本推出通用资源检索服务,任意节点都可通过网络远程加载模型、资源文件。 提供 C++ 插件接口,可集成到自定义功能包中。


22. CMake 构建系统优化

1. 多次调用 ament_python_install_package

允许同一个 Python 包多次执行 ament_python_install_package,可将消息接口 + 业务代码放入同一个 Python 包。

最佳实践:建议消息接口单独分包,降低依赖复杂度。

2. 新增默认编译目标

ament_cmake_ros_core::ament_ros_defaults 自动统一 C/C++ 编译标准,无需手动指定版本:

cmake

复制代码
find_package(ament_cmake_ros REQUIRED)
target_link_libraries(my_library PUBLIC ament_cmake_ros_core::ament_ros_defaults)

23. 线程工具 & 底层基础库 API

(1)线程名称工具(rcpputils)

支持读写线程名,方便 GDB 等调试器定位线程:

cpp

运行

复制代码
#include <rcpputils/thread_name.hpp>
#include <iostream>

int main() {
    rcpputils::set_thread_name("map_thread"); // 设置线程名
    std::cout << rcpputils::get_thread_name() << "\n"; // 获取线程名
    return 0;
}
(2)rcutils 新增接口
  1. rcutils_strnlen:跨平台安全字符串长度计算(替代平台特有 strnlen
  2. Base64 编解码:rcutils_encode_base64 / rcutils_decode_base64
(3)rcl 核心库新增 API

面向客户端库开发者,提供底层接口:

  • 生命周期状态转换名称查询
  • 主题内容过滤(CFT)能力检测
  • 动作客户端 / 服务端数量统计
  • 定时器回调数据动态替换
  • 动作目标超时自定义回调

24. 插件构造函数传参(class_loader)

支持在加载插件时直接向构造函数传参,不再需要单独的初始化接口。通过模板特化声明构造参数列表:

cpp

运行

复制代码
#include <class_loader/class_loader.hpp>

class MyPluginWithConstructor
{
public:
  explicit MyPluginWithConstructor(std::string) {}
  virtual ~MyPluginWithConstructor() = default;
  virtual int some_api() = 0;
};

// 声明插件构造函数参数类型
template<>
struct class_loader::InterfaceTraits<MyPluginWithConstructor>
{
  using constructor_parameters = class_loader::ConstructorParameters<std::string, std::unique_ptr<int>>;
};

25. 运行时追踪(Tracing)优化

1. 运行时关闭追踪

无需重新编译,通过环境变量全局禁用追踪工具:

bash

运行

复制代码
export TRACETOOLS_RUNTIME_DISABLE=1
ros2 run tracetools status
# 输出:Tracing disabled
2. 快照模式追踪(飞行记录仪)

追踪数据先存入内存缓冲区,仅手动触发快照时才写入磁盘,缓冲区满则丢弃最旧数据。 优势:降低磁盘 IO 开销,仅在故障发生时抓取现场数据。

3. 双会话追踪

解决程序启动阶段追踪数据丢失问题:

  • 会话 1:快照模式,常驻内存,记录初始化过程
  • 会话 2:常规模式,记录运行时数据 可随时对初始化会话做快照,完整保留启动日志。
相关推荐
WoY20203 小时前
使用iostat看磁盘IO
linux
kebidaixu3 小时前
VS Code Remote-SSH 远程开发:解决无法安装扩展、市场加载失败的问题
linux
颖火虫盟主3 小时前
Linux 系统分层架构:从硬件通电到 systemd 进程管理
linux·运维·架构
hehelm3 小时前
Linux 信号(Signal)
linux
cui_ruicheng3 小时前
Linux网络编程(九):应用层协议与序列化
linux·运维·服务器·网络
Undergoer_TW3 小时前
SLAM实战避坑笔记:基础矩阵退化场景分析与解决方案
笔记·线性代数·矩阵
kobe_OKOK_4 小时前
ubuntu server 存儲空間占滿的原因
linux·运维·ubuntu
锦鲤52144 小时前
机器学习学习笔记
笔记·学习·机器学习
minglie14 小时前
utf8转utf16
学习