当前位置: 首页 > news >正文

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嵌入式设备。 本文区分必装步骤和可选步骤完整翻译并补充操作说明、注意事项。二、目录前期准备系统环境配置配置系统字符集必选启用系统软件源必选安装开发工具可选安装 ROS 2 本体必选更新系统与软件源缓存桌面完整版安装推荐基础精简版安装安装额外中间件 RMW可选配置运行环境必选运行示例验证安装推荐后续学习指引问题排查卸载 ROS 2可选操作三、详细安装步骤3.1 系统环境配置3.1.1 配置 UTF-8 字符集必选ROS 2 要求系统使用UTF-8 编码Docker 等极简环境默认可能为POSIX会导致乱码、功能异常必须配置。查看当前字符集bash运行locale若输出中无UTF-8相关字段执行以下命令配置安装字符集工具、生成英文 UTF-8 字符集bash运行sudo apt update sudo apt install locales -y sudo locale-gen en_US en_US.UTF-8全局设置系统编码bash运行sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8再次校验配置结果bash运行locale看到LANGen_US.UTF-8、LC_ALLen_US.UTF-8即配置成功。3.1.2 启用系统 Universe 软件源 ROS 官方源必选Ubuntu 默认部分版本未开启universe仓库且需要手动添加 ROS 专属 APT 源所有安装依赖都依赖此步骤。安装软件源管理工具并启用 Universe 仓库bash运行sudo apt install software-properties-common -y sudo add-apt-repository universe安装curl用于在线拉取源配置包bash运行sudo apt update sudo apt install curl -y自动获取最新源配置包版本并下载安装 该脚本会自动匹配当前 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 -y3.2 安装 ROS 2 本体必选3.2.1 更新软件源并升级系统安装前强烈建议更新系统所有软件包避免版本依赖冲突bash运行# 更新APT缓存 sudo apt update # 升级系统全部已安装包 sudo apt upgrade -y3.2.2 两种安装版本二选一方式 1桌面完整版推荐新手 / 开发首选包含 ROS 核心、RViz 可视化工具、仿真、示例程序、教程、GUI 工具功能最全。bash运行sudo apt install ros-lyrical-desktop -y方式 2基础精简版纯服务端 / 嵌入式使用仅保留通信库、消息定义、命令行工具无任何图形界面工具体积更小适合机器人下位机、服务器。bash运行sudo apt install ros-lyrical-ros-base -y3.3 安装额外 RMW 中间件可选ROS 2 支持多种通信中间件RMW默认使用Fast DDS。 如需切换为 Zenoh、Cyclone DDS 等其他中间件可额外安装对应包安装方法参考官方多中间件使用文档仅使用默认 Fast DDS 可直接跳过此步骤。3.4 配置环境变量必选每次终端生效ROS 2 不会自动配置环境变量打开新终端都需要执行以下命令否则无法识别ros2命令。3.4.1 临时生效当前终端根据你使用的 Shell 选择对应命令BashUbuntu 默认终端bash运行source /opt/ros/lyrical/setup.bashZshbash运行source /opt/ros/lyrical/setup.zsh通用兼容格式shbash运行source /opt/ros/lyrical/setup.sh3.4.2 永久生效推荐所有终端自动加载以默认 Bash 为例将环境配置写入用户配置文件bash运行echo source /opt/ros/lyrical/setup.bash ~/.bashrc # 立即生效 source ~/.bashrcZsh 用户对应写入~/.zshrc即可。3.5 运行示例验证安装推荐安装完成后通过官方talker/listener示例测试 C、Python 接口通信是否正常。操作步骤终端 1运行 C 发布节点 talkerbash运行# 已配置永久环境变量可省略 source ros2 run demo_nodes_cpp talker正常输出Publishing: Hello World: 序号新建终端 2运行 Python 订阅节点 listenerbash运行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 -y6.2 卸载 ROS 源配置包彻底移除 ROS 软件源bash运行sudo apt remove ros2-apt-source -y # 再次更新、清理、升级系统 sudo apt update sudo apt autoremove -y sudo apt upgrade -y6.3 额外清理可选手动删除临时安装包bash运行rm /tmp/ros2-apt-source.deb编辑 Shell 配置文件删除手动添加的source /opt/ros/lyrical/setup.*行避免终端报错。ROS 2 Lyrical Luth代号 Lyrical2026 年 5 月完整中文详解一、版本概述Lyrical Luth是ROS 2 的第 12 个正式版本属于长期支持LTS版本官方维护支持周期至2031 年 5 月。 本文全面翻译、梳理该版本新增功能、使用示例、命令行、代码用法及底层接口更新。二、目录核心执行器优化rclcpp参数数组范围校验rclcppPython 异步节点 AsyncNoderclpy零拷贝消息发布rosidl::BufferYAML 参数文件类型显式标注Launch 文件逐消息日志级别控制Launch 文件新增变量拼接替换器运行时切换 ROS 日志后端rosbag2 录包远程服务控制Python 程序化控制录包 / 播包循环录包限制最大包文件数录包拆分文件命名优化rosbag2 消息丢失监控Fish Shell 环境支持增强ros2 param参数命令ros2 doctor诊断报告升级服务详情增强ros2 service info --verbose多主题带宽统计ros2 topic bwURDF 机器人描述格式升级机器人状态发布器功能扩展通用资源获取服务CMake 构建系统优化线程名称工具与底层接口更新插件构造函数传参class_loader运行时追踪Tracing功能优化三、分模块功能详解1. 回调组事件执行器Callback Group Events executorrclcpp针对执行器性能优化新增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_sharedMyNode(); // 实例化新的事件回调组执行器 rclcpp::executors::EventsCBGExecutor executor; executor.add_node(node); executor.spin(); rclcpp::shutdown(); return 0; }组件节点Composable Node使用命令行启动容器bash运行ros2 run rclcpp_components component_container --executor-type events-cbgXML Launch 文件配置xml?xml version1.0 encodingUTF-8? launch node_container pkgrclcpp_components execcomponent_container namemy_node_container namespace args--executor-type events-cbg !-- 在此添加你的组件节点 -- /node_container /launch2. 整型 / 浮点数组参数范围校验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::vectorint64_t{2, 4, 6, 8, 10}, descriptor );3. Python 异步节点 AsyncNoderclpy新增AsyncNode类原生支持 Pythonasyncio异步事件循环订阅、服务、定时器回调均可使用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::Bufferuint8_t实现数据零拷贝收发。适用场景数据存在 GPU / 硬件加速器中无需反复拷贝内存大数据流、图像、点云等高频传输场景。说明当前仅兼容rmw_fastrtps_cpp中间件Zenoh 中间件后续会适配可自定义rosidl::BufferBackend后端对接自研硬件 / AI 库。5. YAML 参数文件显式类型标注解决 YAML 自动类型推断错误问题通过YAML 标签强制指定参数类型。示例配置yamlmy_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 version1.0 encodingUTF-8? launch !-- 通用写法指定级别 -- log levelINFO messageHello world! (普通信息日志) / !-- 快捷标签 -- log_debug message调试日志 / log_info message普通信息日志 / log_warning message警告日志 / log_error message错误日志 / /launch7. Launch 文件新增拼接替换器XML/YAML Launch 新增两个变量替换器用于动态拼接字符串、文件路径$(string-join)字符串拼接$(path-join)路径拼接使用示例xml?xml version1.0 encodingUTF-8? launch !-- 字符串拼接 -- log_info message网址$(string-join . https://docs ros org)/ !-- 路径拼接 -- log_info message环境脚本/$(path-join opt ros lyrical $(string-join . setup bash))/ /launch8. 运行时切换 ROS 日志后端以往切换日志库需要重新编译 rcl现在通过环境变量即可在运行时切换bash运行# 设置环境变量指定日志后端 export RCL_LOGGING_IMPLEMENTATIONrcl_logging_spdlog可选值rcl_logging_spdlog默认日志后端rcl_logging_noop空日志关闭所有日志输出自定义日志实现名称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支持代码层面暂停、继续、跳转、步进、等待结束替代传统阻塞式命令行调用。示例 1Python 控制录包python运行import rclpy import rosbag2_py with rclpy.init(): # 存储配置 录包配置 storage_opts rosbag2_py.StorageOptions(uri/tmp/my_bag, storage_idmcap) 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()示例 2Python 控制播包python运行import rclpy import rosbag2_py with rclpy.init(): storage_opts rosbag2_py.StorageOptions(uri/tmp/my_bag, storage_idmcap) 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 512. 录包拆分文件命名规则优化分包文件采用自描述、可溯源命名格式{序号}_{包前缀}_{时间戳}.后缀序号分包编号从 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_lost14. Fish Shell 环境支持正式提供setup.fish环境脚本原生支持 Fish Shellbash运行source /opt/ros/lyrical/setup.fish搭配colcon-fish插件可完整支持编译工具链。15. 增强 ros2 param 命令1查询所有节点的同一个参数bash运行# 查看所有节点的 use_sim_time 参数 ros2 param get use_sim_time2单节点批量查参数bash运行ros2 param get /robot_state_publisher frame_prefix ignore_timestamp publish_frequency3单节点批量设参数bash运行ros2 param set /robot_state_publisher frame_prefix foo ignore_timestamp True publish_frequency 10.016. 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 --all19. URDF 机器人描述格式 1.2 版本升级URDF 升级至version1.2新增特性原生 ** 四元数quaternion** 姿态描述** 胶囊体capsule** 碰撞 / 可视化几何体关节新增 ** 加速度、减速度、加加速度jerk** 限位示例代码xml?xml version1.0 ? robot namecapsule_arm version1.2 link namelink1 visual origin xyz0 0 0.25 quat_xyzw0 0 0 1/ geometry capsule radius0.1 length0.5/ /geometry /visual /link joint namejoint1 typerevolute origin xyz0 0 0.5 quat_xyzw0 0.7071068 0 0.7071068/ !-- 新增加速度、减速度、加加速度限制 -- limit lower-1.57 upper1.57 velocity2.0 acceleration10.0 deceleration5.0 jerk50.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 编译标准无需手动指定版本cmakefind_package(ament_cmake_ros REQUIRED) target_link_libraries(my_library PUBLIC ament_cmake_ros_core::ament_ros_defaults)23. 线程工具 底层基础库 API1线程名称工具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; }2rcutils 新增接口rcutils_strnlen跨平台安全字符串长度计算替代平台特有strnlenBase64 编解码rcutils_encode_base64/rcutils_decode_base643rcl 核心库新增 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::InterfaceTraitsMyPluginWithConstructor { using constructor_parameters class_loader::ConstructorParametersstd::string, std::unique_ptrint; };25. 运行时追踪Tracing优化1. 运行时关闭追踪无需重新编译通过环境变量全局禁用追踪工具bash运行export TRACETOOLS_RUNTIME_DISABLE1 ros2 run tracetools status # 输出Tracing disabled2. 快照模式追踪飞行记录仪追踪数据先存入内存缓冲区仅手动触发快照时才写入磁盘缓冲区满则丢弃最旧数据。 优势降低磁盘 IO 开销仅在故障发生时抓取现场数据。3. 双会话追踪解决程序启动阶段追踪数据丢失问题会话 1快照模式常驻内存记录初始化过程会话 2常规模式记录运行时数据 可随时对初始化会话做快照完整保留启动日志。
http://www.gsyq.cn/news/1399686.html

相关文章:

  • 量子计算加持:AI Agent的算力革命何时到来?
  • 2026年合肥GEO品牌优选指南,哪家更值得信赖?
  • 从Stackdriver到Google Cloud运维套件:一站式可观测性平台深度解析
  • 警惕Agent框架的“驯化”风险:从工具使用者到系统架构师的思维转变
  • 云克隆抗体:科研与诊断领域的可靠伙伴
  • Kafka分区策略深度解析
  • 回收RS罗德与施瓦茨 RTP134B示波器
  • 本地AI助手实战:基于Whisper与LLM的语音控制智能体开发
  • 销售拜访录音怎么整理成客户跟进记录?4款热门转写工具实测盘点
  • AI智能体记忆存储实战:SQLite+FTS5方案对比向量数据库
  • 乐迪信息:船舶违规停靠AI自动识别,港口管理更规范
  • .com的庖丁解牛
  • 构建敢于说“不”的AI:反奉承智能体的技术实现与应用
  • AI编码智能体如何重塑软件工程:从工具到协作者的实践变革
  • Covfefe
  • Rust宏编程实践:编译时代码生成技巧
  • AI代理系统调试优化:基于文件架构的极致可调试性实践
  • 学了PMP不知道做什么?日薪1W+的项目管理讲师可以考虑!
  • 02-认知篇-基础-AOT编译原理
  • 编程语言:Go语言并发编程实战
  • 【OpenCV零基础保姆级入门】一篇吃透计算机视觉预处理!全套实战代码,适配YOLO/深度学习
  • 别再被‘Could not open a connection to your authentication agent’卡住了!手把手教你启动SSH-Agent并添加密钥
  • 从调用链到关系图:多智能体系统故障建模与图算法分析实践
  • Python实现GPU温度精准监控:绕过系统层误差,直连硬件传感器
  • 别再死记硬背了!用Wireshark抓包实战,5分钟搞懂H264/H265的RTP打包与NALU结构
  • 大模型 B 端落地第一战场——财务 AI 的核心逻辑、落地方法与未来架构
  • 论三生原理:一部融贯数理星象的当代东方创世史诗?
  • 别再只盯着GNN了!用Python实战传统图特征:节点中心性、链接预测与图核方法
  • 大模型AI校招核心考点解析:从Transformer到工程实践,助你拿下Offer!
  • 2026年评价高的上海空气除菌过滤器/反冲洗过滤器/双联过滤器公司哪家好 - 行业平台推荐