ros::NodeHandle nh_private(“~“)讲解
假设我们现在要写一个控制“智能风扇”的 ROS 程序。这个风扇需要知道两个参数最大转速和风扇名字。第一步写一份 YAML 配置文件准备数据新建一个文件叫fan_config.yaml。里面的内容非常简单YAMLmax_speed: 3000 fan_name: LivingRoomFan这就是你风扇的“出厂说明书”。第二步写一个 Launch 文件把数据塞进私有空间新建一个文件叫start_fan.launch。它的作用是启动程序并把上面的说明书“塞”给程序。launch node namemy_fan_node pkgmy_pkg typefan_program outputscreen rosparam file$(find my_pkg)/config/fan_config.yaml commandload / /node /launch这一步做完后ROS 系统里就偷偷多出了两个专属变量/my_fan_node/max_speed和/my_fan_node/fan_name。第三步写 C 代码用 nh_private 把数据掏出来这就是你一直想学的部分。新建你的main.cpp照着下面这样写#include ros/ros.h #include string int main(int argc, char** argv) { // 1. 初始化 ROS 节点名字叫 my_fan_node ros::init(argc, argv, my_fan_node); // // ★ 核心 1打造一把私密空间的钥匙 // ros::NodeHandle nh_private(~); // 2. 准备两个空变量用来接住马上要取出来的数据 int speed_from_yaml 0; std::string name_from_yaml ; // // ★ 核心 2用钥匙开箱取物 // 语法nh_private.getParam(yaml里的变量名, 存入哪个C变量); // // 取出最大转速 if (nh_private.getParam(max_speed, speed_from_yaml)) { ROS_INFO(成功我读到的最大转速是: %d, speed_from_yaml); } else { ROS_WARN(没找到 max_speed 这个参数); } // 取出风扇名字 if (nh_private.getParam(fan_name, name_from_yaml)) { ROS_INFO(成功我读到的风扇名字是: %s, name_from_yaml.c_str()); } return 0; } 核心原理解析这段代码到底发生了什么为什么不写全名注意看getParam(max_speed, ...)。你并没有写/my_fan_node/max_speed你只写了max_speed。这就是~的厉害之处因为你是用nh_private调用的ROS 会自动帮你把节点名字拼在前面/my_fan_node/max_speed准确无误地去你的私密空间里找到了3000这个数字。如果在这个风扇项目中你把ros::NodeHandle nh_private(~);换成了普通的ros::NodeHandle nh;程序的运行结果会非常直接你会读不到任何数据程序会直接打印出警告“没找到 max_speed 这个参数”1. 为什么普通nh读不到找错房间了参数的实际存放位置 在你的start_fan.launch文件中rosparam ... /是写在node ...里面的。这意味着ROS 把max_speed这个参数锁进了my_fan_node的私有金库里。 它在 ROS 系统里的真实全名是/my_fan_node/max_speed。普通nh的寻找路径 如果你在 C 里写了ros::NodeHandle nh;然后调用nh.getParam(max_speed, speed_from_yaml);。 普通nh代表的是“公共大厅”。它会去 ROS 系统的最顶层全局目录下寻找这个参数。 它搜索的路径是/max_speed。结果显而易见普通nh在大厅里找/max_speed但参数实际上藏在/my_fan_node/max_speed房间里。找错了地方当然什么都读不到2. 如果非要用普通nh该怎么改如果你就是想用普通的nh把参数读出来你必须修改.launch文件把参数“搬到公共大厅”里去。你需要把rosparam从node的内部挪到它的外面launch rosparam file$(find my_pkg)/config/fan_config.yaml commandload / node namemy_fan_node pkgmy_pkg typefan_program outputscreen /node /launch当你这样写了之后参数就会被存为/max_speed。此时你的 C 代码里用普通的nh.getParam(max_speed, ...)就能成功读到3000了3. 既然普通nh也能搞定为什么全世界都在用nh_private(~)想象一下这个终极场景 夏天到了你买了两个风扇一个放在客厅LivingRoom一个放在卧室Bedroom。客厅比较大风扇最大转速需要配 3000卧室比较小风扇最大转速配 1500 就够了。这两个风扇运行的都是你写的这同一个 C 程序。灾难现场使用普通nh 如果把参数放在全局/max_speed两个风扇的 C 程序都会去读同一个地方。结果就是你要么让两个风扇都转 3000要么都转 1500它们之间无法区分它们打架了完美解决使用带~的私有nh 如果你在 C 里乖乖使用了ros::NodeHandle nh_private(~);在启动时你只需要写一个这样的 launch 文件launch node nameliving_room_fan pkgmy_pkg typefan_program rosparam file客厅的配置.yaml commandload / /node node namebedroom_fan pkgmy_pkg typefan_program rosparam file卧室的配置.yaml commandload / /node /launch你看完全相同的 C 代码客厅风扇的nh_private自动去读了/living_room_fan/max_speed拿到 3000。卧室风扇的nh_private自动去读了/bedroom_fan/max_speed拿到 1500。

相关新闻

京东商品列表接口实战手记:十一年踩坑与避坑指南

京东商品列表接口实战手记:十一年踩坑与避坑指南

作为深耕京东商品列表接口开发十年的工程师,我经历过无数次凌晨改代码的“生死时速”。以下从两个典型场景切入,分享血泪教训与解决方案。一、排序陷阱:sort参数的“隐形炸弹”现象:某次大促前,竞品监控系统突然报警—…

2026/5/17 8:18:13 阅读更多 →
JPG转PNG用哪个网站更方便?几款在线工具简单对比

JPG转PNG用哪个网站更方便?几款在线工具简单对比

在日常办公、设计或网站开发中,经常会遇到需要把 JPG 图片转换成 PNG 格式的情况。比如需要透明背景、无损格式,或者平台要求必须使用 PNG。 目前市面上有不少在线转换工具,下面整理几款常见的 JPG 转 PNG 网站,方便大家根据自己…

2026/7/6 12:06:48 阅读更多 →
老板看利润、施工看顺手:这份“工程项目管理软件排名”让上下级都满意

老板看利润、施工看顺手:这份“工程项目管理软件排名”让上下级都满意

“老王,上个月那个项目明明预算够,怎么月底一算账又亏了?”老板拍着桌子,眉头紧锁。与此同时,几十公里外的工地上,施工员小李正对着一沓手写单据发愁:验收单要填、材料入库要记,手机里还躺着三个未接来电催资料。“这系统怎么这么难用?还不如我拿笔写快呢!” 这样的场景,在无…

2026/5/17 8:18:11 阅读更多 →

最新新闻

Stable Diffusion 3 图像生成实战:基于《穿石棉的人》描绘未来废墟的 5 个提示词工程技巧

Stable Diffusion 3 图像生成实战:基于《穿石棉的人》描绘未来废墟的 5 个提示词工程技巧

Stable Diffusion 3 图像生成实战:基于《穿石棉的人》描绘未来废墟的 5 个提示词工程技巧当科幻文学中的"沉寂的百老汇"、"永恒的衰败"这类抽象描述遇上Stable Diffusion 3的生成能力,我们面对的不仅是技术实现问题,更是…

2026/7/6 12:35:16 阅读更多 →
字节面试复盘2026/07/03

字节面试复盘2026/07/03

复盘来自2026/07/03 字节扣子编程开发 人生首面~~~1.流式输出是怎么实现的 1. 核心原理 流式输出本质是HTTP分块长连接,区别普通一次性响应:普通接口等后端处理完返回完整JSON;流式是大模型边生成文字、后端边分段推送,前端边接收…

2026/7/6 12:35:16 阅读更多 →
TPAFE0808与MKV44F256VLH16构建多通道信号采集系统

TPAFE0808与MKV44F256VLH16构建多通道信号采集系统

1. 项目背景与核心需求在工业自动化、医疗设备和消费电子领域,多通道信号采集与系统监测一直是关键需求。TPAFE0808作为一款8通道模拟前端芯片,搭配MKV44F256VLH16这款高性能微控制器,能够构建一套稳定可靠的多通道信号处理系统。这套组合特别…

2026/7/6 12:33:13 阅读更多 →
灰度共生矩阵 (GLCM) 实战:Python 提取 4 大纹理特征,准确率提升 15%

灰度共生矩阵 (GLCM) 实战:Python 提取 4 大纹理特征,准确率提升 15%

灰度共生矩阵(GLCM)实战:Python提取4大纹理特征提升分类准确率纹理分析一直是计算机视觉领域的重要研究方向,想象一下你正在开发一个木材质量检测系统,如何让机器像经验丰富的质检员一样,通过表面纹理判断木材等级?这正…

2026/7/6 12:33:13 阅读更多 →
协方差矩阵与皮尔森相关系数:从2维到N维数据的3步可视化分析实战

协方差矩阵与皮尔森相关系数:从2维到N维数据的3步可视化分析实战

协方差矩阵与皮尔森相关系数:从2维到N维数据的3步可视化分析实战在数据科学和机器学习领域,理解变量之间的关系是建模和特征工程的基础。当我们面对高维数据集时,如何快速识别特征间的关联模式?协方差矩阵和皮尔森相关系数矩阵就像…

2026/7/6 12:33:13 阅读更多 →
数据预处理3大核心挑战:特征工程、缺失值与异常值处理的Python解决方案

数据预处理3大核心挑战:特征工程、缺失值与异常值处理的Python解决方案

数据预处理3大核心挑战:特征工程、缺失值与异常值处理的Python解决方案 数据预处理是数据科学项目中最耗时却最关键的环节。当面对真实世界中的脏乱数据集时,如何高效处理缺失值、识别异常点并构建有效特征,直接决定了后续建模的天花板高度。…

2026/7/6 12:31:11 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻