首页/新闻资讯/正文详情

livox_ros_driver2 日志系统工作原理解析:DRIVER_INFO/DRIVER_ERROR 宏设计的完整指南

发布时间:2026/9/20 23:56:16 来源:云帆数科 栏目:资讯中心
livox_ros_driver2 日志系统工作原理解析:DRIVER_INFO/DRIVER_ERROR 宏设计的完整指南
livox_ros_driver2 日志系统工作原理解析DRIVER_INFO/DRIVER_ERROR 宏设计的完整指南【免费下载链接】livox_ros_driver2Livox device driver under Ros(Compatible with ros and ros2), support Lidar HAP and Mid-360.项目地址: https://gitcode.com/GitHub_Trending/li/livox_ros_driver2livox_ros_driver2 是乐鑫Livox官方第二代激光雷达 ROS 驱动同时兼容 ROS 与 ROS2支持 HAP、MID360 等机型。它通过 DRIVER_INFO、DRIVER_ERROR 等日志宏实现统一的日志输出让同一份业务代码在两种框架下无缝编译运行。本文将带你快速看懂这套日志系统的工作原理。一、为什么需要 DRIVER_INFO / DRIVER_ERROR 日志宏ROS1 和 ROS2 的日志 API 完全不同ROS1使用ROS_INFO()、ROS_ERROR()等全局宏底层基于ros::consoleROS2使用RCLCPP_INFO(logger, ...)等宏每条日志都必须绑定一个节点自带的 logger。如果业务代码直接调用原生宏就得为 ROS1/ROS2 各维护一套代码。livox_ros_driver2 的解法很巧妙定义一层DRIVER_前缀的日志宏作为统一日志接口把平台差异全部收进头文件里业务代码一行都不用改。二、日志宏的整体架构3 个头文件的分工日志系统的核心是 src/include/ 下的 3 个头文件文件职责ros_headers.h总入口根据编译开关自动选择 ROS1 或 ROS2 头文件ros1_headers.h定义 ROS1 版的 DRIVER_ 系列日志宏ros2_headers.h定义 ROS2 版的 DRIVER_ 系列日志宏ros_headers.h 的核心逻辑只有几行条件编译#ifdef BUILDING_ROS1 #include ros1_headers.h #elif defined BUILDING_ROS2 #include ros2_headers.h #endif也就是说编译期由BUILDING_ROS1/BUILDING_ROS2这两个开关决定日志宏展开到哪一套 API而业务代码只看到统一的DRIVER_*名称。三、DRIVER_INFO / DRIVER_ERROR 宏在不同平台下的展开方式ros1_headers.h 中的定义非常直接把 node 参数直接忽略掉#define DRIVER_INFO(node, ...) ROS_INFO(__VA_ARGS__) #define DRIVER_ERROR(node, ...) ROS_ERROR(__VA_ARGS__)而 ros2_headers.h 中node 参数派上了用场——取节点的 logger 传给 RCLCPP 宏#define DRIVER_INFO(node, ...) RCLCPP_INFO((node).get_logger(), __VA_ARGS__) #define DRIVER_ERROR(node, ...) RCLCPP_ERROR((node).get_logger(), __VA_ARGS__)这就是同一个调用DRIVER_INFO(livox_node, xxx)在两端都能编译的关键ROS1 端 node 被丢弃ROS2 端 node 被用来获取 logger。EXTRA 变体一次/节流输出技巧两个头文件里还各有一套_EXTRA宏例如 DRIVER_INFO_EXTRA。它利用 C 预处理的##记号拼接能力把中间参数拼进宏名#define DRIVER_INFO_EXTRA(node, EXTRA, ...) RCLCPP_INFO_##EXTRA((node).get_logger(), __VA_ARGS__)这样就能灵活展开成RCLCPP_INFO_ONCE只打印一次、RCLCPP_INFO_THROTTLE节流打印等原生变体非常适合高频数据流中避免日志刷屏的场景。四、编译期开关CMake 如何决定日志走向开关来自 CMakeLists.txt 中的编译定义ROS1 构建时注入-DBUILDING_ROS1见 CMakeLists.txtROS2 构建时注入-DBUILDING_ROS2见 CMakeLists.txt构建脚本根据 ROS1 / ROS2 / humble / jazzy 等不同参数选择分支最终只有对应的日志宏集合生效。整个链路是构建脚本 → CMake 定义宏 → ros_headers.h 条件包含 → 平台专属日志宏 → ROS/ROS2 原生日志系统五、源码中的真实日志调用示例节点类型定义在 driver_node.h 中ROS1 下DriverNode继承ros::NodeHandleROS2 下继承rclcpp::Node——这正是两种平台都能调用.get_logger()的前提。在主入口 livox_ros_driver2.cpp 中能看到典型用法启动时打印版本DRIVER_INFO(livox_node, Livox Ros Driver2 Version: %s, ...)第 51 行打印配置信息DRIVER_INFO(*this, Config file : %s, user_config_path.c_str())第 167 行初始化失败报错DRIVER_ERROR(*this, Init lds lidar fail!);第 178 行参数非法提示DRIVER_ERROR(livox_node, Invalid data src (%d), please check the launch file, data_src);第 105 行另外ROS1 分支在main()开头还会主动把日志级别调高到 Debug第 42-44 行方便用户排查问题时看到更详细的输出。数据分发模块 lddc.cpp 中也大量使用DRIVER_INFO打印 bag 文件创建、多话题模式等状态信息如 第 189 行。六、新手上手建议 看日志级别选型正常状态用DRIVER_INFO可恢复的异常用DRIVER_WARN致命问题用DRIVER_ERROR/DRIVER_FATAL与 ROS 日志级别一一对应高频路径慎用 INFO点云回调中每帧都打印会刷屏可参考_EXTRA变体的思路使用节流或一次性输出排查启动问题程序启动时版本、Config file、Data Source三条 INFO 日志是最快的自检清单任何一条缺失都说明配置或参数有问题阅读源码路径想深入日志设计按 ros_headers.h → ros1_headers.h / ros2_headers.h 的顺序阅读即可全文不超过 100 行。这套统一宏名 条件编译分流的设计是 livox_ros_driver2 能一份源码同时支持 ROS 和 ROS2 的关键技巧之一也很适合你在自己的双框架兼容项目中借鉴。【免费下载链接】livox_ros_driver2Livox device driver under Ros(Compatible with ros and ros2), support Lidar HAP and Mid-360.项目地址: https://gitcode.com/GitHub_Trending/li/livox_ros_driver2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

扩展二次剩余在密码学中的应用与实现
扩展二次剩余在密码学中的应用与实现

1. 扩展二次剩余的概念与背景在密码学研究中,二次剩余理论构成了许多公钥密码方案的基础数学结构。而扩展二次剩余(Extended Quadratic Residue)作为标准二次剩余的推广形式,为设计更灵活的密码协议提供了新的数学工具。简单来说&… · 2026/9/20 23:55:16

React Starter Kit 生产环境监控指南:Wrangler Tail、Cloudflare Analytics 与快速回滚实战
React Starter Kit 生产环境监控指南:Wrangler Tail、Cloudflare Analytics 与快速回滚实战

后端前端 【免费下载链接】react-starter-kit Modern React starter kit with Bun, TypeScript, Tailwind CSS, tRPC, Stripe, and Cloudflare Workers. Production-ready monorepo for building fast web apps. 项目地址: https://gitcode.com/gh_mirrors/rea/reac… · 2026/9/20 23:55:16

PTO-ISA TCMP 指令详解:Tile 比较与打包谓词掩码的跨平台实现指南
PTO-ISA TCMP 指令详解:Tile 比较与打包谓词掩码的跨平台实现指南

PTO-ISA TCMP 指令详解:Tile 比较与打包谓词掩码的跨平台实现指南 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high… · 2026/9/20 23:55:16

本地AI视频剪辑实战:Palmier Pro完整体验与避坑指南
本地AI视频剪辑实战:Palmier Pro完整体验与避坑指南

在 Mac 上折腾视频剪辑这些年,我见过太多“新概念剪辑工具”,上来都说自己有多智能,结果百分之八十是套了一层 AI 壳,剪个片子还是得靠手。2024 年底我开始用 Palmier Pro,本来没抱太高期待,几周体验下来反… · 2026/9/21 0:39:26

个人特种证件查询网站被黑?这份速查手册救急
个人特种证件查询网站被黑?这份速查手册救急

个人特种证件查询网站被黑?这份速查手册救急 网站突然弹窗、被挂马、甚至变成钓鱼页,后台却查不到异常日志?这种“网站被黑挂马不知道怎么办”的恐慌,是做过个人特种证件查询网站的开发者最熟悉的噩梦。别慌,这篇速查手册不讲虚的,直接拆解从代码层到服务器层的致命漏洞,给你一套能落地的防护方案。… · 2026/9/21 0:38:59

STM32驱动SPL06-001气压传感器:I2C通信与温度补偿实战
STM32驱动SPL06-001气压传感器:I2C通信与温度补偿实战

1. 项目缘起与整体设计思路1.1 为什么选SPL06-001这颗气压传感器先说选型这件事。市面上做气压测量的传感器不少,BMP280、BME280、MS5611、DPS310这些我都用过,最后在这个项目里定下SPL06-001,原因很实在:它的相对精度能到0.06 hP… · 2026/9/21 0:38:26

解决Codex频繁重连问题:本地代理配置与修复指南
解决Codex频繁重连问题:本地代理配置与修复指南

这周被 Codex 整得有点上火——每次在终端里丢一个问题过去,它先沉默十几秒,日志里反复刷 connecting、reconnecting 的痕迹,循环整整五次之后才开始出字。一开始我以为是自己网络不稳,Wi-Fi 换了、热点也试了、网络环境也切换了&… · 2026/9/21 0:38:26

汽车制造业主数据治理架构与实施指南
汽车制造业主数据治理架构与实施指南

1. 项目背景与核心价值解析汽车制造业作为典型的离散型制造行业,其数据管理复杂度远超一般行业。一辆普通乘用车包含2万多个零部件,涉及上下游数百家供应商,整个价值链产生的数据维度呈现几何级增长。德勤这份112页的解决方案正是针对这一行业… · 2026/9/21 0:38:26

本地部署大模型实战:从零打造个人AI知识库与Agent助手
本地部署大模型实战:从零打造个人AI知识库与Agent助手

作为一个把业余时间几乎都砸在折腾AI上的人,这些年我前前后后做过不少小项目,但真正让我觉得拿得出手、愿意一直维护下去的,是我最近完成的一个个人AI项目——一套跑在本地的“个人AI工作助手”。简单说,它不是一个只会聊天的玩具… · 2026/9/21 0:38:26

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39

Word表格编号全攻略:从列表编号到题注交叉引用
Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39

从第一个站到第二个站:独立开发者的静态网站选型与落地实践
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 0:00:18

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码