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

2026.8.05-初入ros+slam+opencv第十天-学习param接口

一.通过独立 demo 吃透所有核心 API,再迁移到项目中

1.目录结构

2.param_test.cpp

#include"ros/ros.h"intmain(intargc,char**argv){ros::init(argc,argv,"param_test_node");ros::NodeHandle nh;// 1. 向参数服务器写入参数 setParamnh.setParam("robot_name","patrol_bot_01");nh.setParam("max_speed",0.5);nh.setParam("patrol_mode",true);ROS_INFO("参数写入完成");// 2. 读取参数 getParam(读取失败返回false,不改变变量值)std::string name;doublespeed;boolmode;if(nh.getParam("robot_name",name))ROS_INFO("读取机器人名称:%s",name.c_str());elseROS_WARN("未找到参数 robot_name");if(nh.getParam("max_speed",speed))ROS_INFO("读取最大速度:%.2f m/s",speed);// 3. param() 读取参数,读取失败直接用默认值赋值(最常用)intpoint_num=nh.param("patrol_point_num",3);ROS_INFO("巡逻点数量:%d",point_num);// 4. 检查参数是否存在 hasParamif(nh.hasParam("battery_level"))ROS_INFO("电池电量参数存在");elseROS_WARN("电池电量参数不存在,使用默认值");// 5. 删除参数 deleteParamnh.deleteParam("patrol_mode");ROS_INFO("已删除参数 patrol_mode");ros::spinOnce();return0;}

3.注意点

1.ros::init(argc,argv,“param_test_node”)
初始化节点 向roscore注册param_test_node节点
2.setParam()写入参数

// 1. 向参数服务器写入参数 setParamnh.setParam("robot_name","patrol_bot_01");nh.setParam("max_speed",0.5);nh.setParam("patrol_mode",true);ROS_INFO("参数写入完成");

nh.setParam(“参数名”,值 )
作用:往参数服务器存一对【键值对】
参数可以是:字符串、小数、整数、布尔
如果这个参数本来不存在:直接新建;如果已经存在:直接覆盖旧值。
终端执行 rosparam list 就能看到这三个参数。
3.getParam () 读取参数,有返回值判断(读取失败不会修改变量)
bool getParam(“参数名”, 接收变量)

// 2. 读取参数 getParam(读取失败返回false,不改变变量值)std::string name;doublespeed;boolmode;if(nh.getParam("robot_name",name))ROS_INFO("读取机器人名称:%s",name.c_str());elseROS_WARN("未找到参数 robot_name");

返回值:读到参数返回 true;找不到参数返回 false
重点:读取失败的时候,name变量里面的值不会被修改,保留原来垃圾值。
适合场景:必须要读到这个参数,读不到节点要告警。
4.param () 带默认值读取 有这个参数就直接读取 没有直接赋值默认值
nh.param(“参数名”, 默认值)

// 3. param() 读取参数,读取失败直接用默认值赋值(最常用)intpoint_num=nh.param("patrol_point_num",3);ROS_INFO("巡逻点数量:%d",point_num);

逻辑:
如果参数服务器存在patrol_point_num → 读出真实值给point_num
如果参数不存在 → 直接把 3 赋值给 point_num,不会报错
本代码里我们没有 set 这个参数,所以这里输出一定是 3。
实际项目大量用这个:参数 hasParam () 判断参数是否存在可以 launch 文件配置,不配置就安全走默认,程序不会崩。
5. hasParam () 判断参数是否存在

// 4. 检查参数是否存在 hasParamif(nh.hasParam("battery_level"))ROS_INFO("电池电量参数存在");elseROS_WARN("电池电量参数不存在,使用默认值");

bool hasParam(“参数名”)
返回 true:参数服务器里面有这个参数
返回 false:没有这个参数
这里代码没有设置battery_level,所以会打印警告。
一般搭配getParam使用,先判断有没有,再读取。
6.deleteParam () 删除参数

// 5. 删除参数 deleteParamnh.deleteParam("patrol_mode");ROS_INFO("已删除参数 patrol_mode");

直接把参数服务器上patrol_mode删掉。
执行完之后 rosparam get /patrol_mode 就找不到该参数。
7.5 个 API 记忆口诀
setParam:写参数,没有就新建,有就覆盖
getParam:读参数,返回真假,失败变量不变
param:读参数,读不到就给默认值(项目首选)
hasParam:单纯判断参数有没有
deleteParam:删掉参数服务器的参数
重要坑点
参数服务器在 roscore,roscore 一关,全部参数灰飞烟灭,不会保存到磁盘
节点退出,自己 setParam 写进去的参数还在,只要 roscore 不关闭
变量类型必须匹配:存 double,不能读到 int,会出错。

http://www.jsqmd.com/news/1337675/

相关文章:

  • 3分钟掌握:如何免费获取国家中小学智慧教育平台电子课本PDF
  • 2026速冻熟面企业综合实力横评,出品质优价格透明值得信赖 - myqiye
  • Snipaste深度解析:从截图工具到效率神器的进阶指南
  • Vue 3标签页导航工程化实践:深度集成Vue Router与Pinia状态管理
  • 计算机系统IOE模块实现:从内存映射到设备模拟的实践指南
  • 车牌识别系统全链路解析:从图像采集到深度学习模型部署
  • Dell G15 5511无线网卡代码43故障:从驱动到硬件的系统性修复指南
  • 交换机堆叠与集群技术:从原理到实战部署指南
  • 从MSSQL到域控:HTB Escape靶机渗透实战与AD域横向移动详解
  • 我用 Claude Code 重构了一个 10 年的老项目,它比我更懂我自己的代码
  • 找河南床单被罩厂商看这里怎么挑靠谱供应商 - 品牌优推
  • STM32外部中断与定时器编码器模式实现传感器精准计次
  • DM8数据库字段注释查询原理与实战:从数据字典到自动化应用
  • OpenClaw本地部署指南:从零搭建私有AI智能体,实现数据安全与定制化
  • 海思Hi3519DV500开发全解析:从AI推理到视频处理的嵌入式视觉实战
  • MATLAB中的meshgrid和ndgrid
  • 如何高效使用抖音批量下载工具:5步实现自动化收藏管理
  • Windows系统Python 3.12专业级开发环境搭建与配置全指南
  • Mac/Linux下使用fcrackzip破解ZIP密码:从原理到实战完整指南
  • 网络监控工具PRTG实战:从零搭建与破解风险警示
  • MySQL 8.0安装与配置全平台指南
  • Godot引擎开发:GDScript脚本编写与API详解
  • ai免费写论文好用吗?实测3款AI论文软件,结果有高有低!
  • 告别头像“大头贴”效应:智能裁剪与CSS object-fit的协同解决方案
  • 基于STM32F4的实时FFT与DDS信号处理系统设计
  • AI写知乎问答失效预警:92.6%的创作者正踩这4个合规雷区,今天不改明天限流
  • 基于ADMX3652Z评估板DIY高精度数字电压表:从UART通信到SCPI协议实践
  • 5分钟掌握Reloaded II:新手轻松上手指南
  • 如何用 vscode-markdown-preview-enhanced 打造你的专属文档创作工作流
  • 中小学智慧教育平台电子课本下载教程:三步轻松获取PDF教材的完整指南