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

ROS2的核心概念E-参数

一、参数参数是一种ROS系统中常用的数据传输方式。类似C编程中的全局变量可以便于在多个程序中共享某些数据参数是ROS机器人系统中的全局字典可以在运行多个节点时共享数据。二、参数的作用在机器视觉识别时有很多参数都会影响识别效果现在我们假设有两个节点NodeA和NodeB。1NodeA相机驱动节点需要考虑很多问题相机连接到哪个usb端口使用的图像分辨率是多少曝光度和编码格式分别是什么这些都可以通过参数设置我们可以通过配置文件或者程序进行设置。2NodeB图像识别节点也是一样的图像识别使用的阈值是多少整个图像面积是多大哪个部分是我们关注的核心区域识别过程是否需要美颜等等就像我们使用美颜相机一样我们可以通过滑动条或者输入框设置很多参数不同参数设置后都会改变执行功能的一些效果。三、全局字典ROS系统中参数以全局字典的形态存在何为字典就像真实的字典一样由名称和数值组成即键值对比方说名称: 话题发布的周期值: 5s名称: 显示器亮度 值: 60%名称的数据类型肯定是字符串值的数据类型在这里用到5是整形数据显然只有整形是不够用的ROS2支持的参数值的类型如下:bool 和bool[]用来表示开关量比如雷达的控制节点开始扫描和停止扫描。int64 和int64[]整形表示一个数字用来表示整数类型的参数值float64 和float64[]浮点型用来表示小数类型的参数值string 和string[]字符串可以表示编号如学号、IP地址等byte[]字节数组可以用来表示图片、点云数据等信息四、参数的动态特性1、基于服务实现参数的获取/设置本质是调用/get_parameters、/set_parameters等服务也就是说参数是由服务构建出来的。2、全局共享某一节点共享了一个参数其他节点可访问同一参数空间3、动态更新任一节点修改参数其他节点会得到获得最新值五、海龟例程启动两个终端分别运行小海龟仿真器和键盘控制节点ros2 run turtlesim turtlesim_noderos2 run turtlesim turtle_teleop_key①查看具体参数ros2 param list②查看某个参数的描述信息ros2 param describe turtlesim 参数名③查询某个参数的值ros2 param get turtlesim 参数名④修改某个参数的值ros2 param set turtlesim 参数名 修改值⑤将某个节点的参数保存到参数文件中ros2 param dump turtlesim turtlesim.yaml⑥一次性加载某一个文件中的所有参数ros2 param load turtlesim turtlesim.yaml六、案例Python APIhttps://docs.ros2.org/latest/api/rclpy/index.htmlC APIhttps://docs.ros2.org/latest/api/rclcpp/终端循环打印日志信息其中的“Xbot”就是我们设置的一个参数值参数名称是“robot_name”通过命令行修改这个参数启动另外一个终端运行修改命令参数名称修改为NewBot。图1 功能包内部结构parameter_node.hpp#ifndef LEARNING_PKG_C__PARAMETER_NODE_HPP_ #define LEARNING_PKG_C__PARAMETER_NODE_HPP_ #include rclcpp/rclcpp.hpp #include string #include vector class ParameterNode : public rclcpp::Node { public: ParameterNode(const std::string name); private: void timer_callback(); rclcpp::TimerBase::SharedPtr timer_; }; #endif // LEARNING_PKG_C__PARAMETER_NODE_HPP_parameter_node.cpp#include learning_pkg_c/parameter_node.hpp ParameterNode::ParameterNode(const std::string name) : Node(name) { RCLCPP_INFO(this-get_logger(), 正在初始化参数示例节点...); // 声明参数并设置默认值 this-declare_parameterstd::string(robot_name, Xbot); RCLCPP_INFO(this-get_logger(), 已声明参数 robot_name默认值: Xbot); // 创建定时器每2秒执行一次回调 timer_ this-create_wall_timer( std::chrono::seconds(2), std::bind(ParameterNode::timer_callback, this)); RCLCPP_INFO(this-get_logger(), 参数示例节点已启动); } void ParameterNode::timer_callback() { // 1. 读取参数值 std::string robot_name this-get_parameter(robot_name).as_string(); RCLCPP_INFO(this-get_logger(), Hello %s!, robot_name.c_str()); // 2. 重新将参数值设置为初始值 std::vectorrclcpp::Parameter new_parameters; new_parameters.push_back(rclcpp::Parameter(robot_name, Xbot)); this-set_parameters(new_parameters); RCLCPP_DEBUG(this-get_logger(), 参数已重置为 Xbot); }parameter_main.cpp#include learning_pkg_c/parameter_node.hpp #include rclcpp/rclcpp.hpp int main(int argc, char *argv[]) { rclcpp::init(argc, argv); auto node std::make_sharedParameterNode(param_sample); rclcpp::spin(node); rclcpp::shutdown(); return 0; }CMakeLists.txtcmake_minimum_required(VERSION 3.8) project(learning_pkg_c) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES Clang) add_compile_options(-Wall -Wextra -Wpedantic) endif() # 查找依赖包 find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) # 包含目录 include_directories(include) # 参数示例节点 add_executable(parameter_node src/parameter_node.cpp src/parameter_main.cpp ) # 设置依赖 ament_target_dependencies(parameter_node rclcpp ) # 安装可执行文件 - 使用 ${PROJECT_NAME} 而不是 ${learning_pkg_c} install(TARGETS parameter_node DESTINATION lib/${PROJECT_NAME}) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) # the following line skips the linter which checks for copyrights # comment the line when a copyright and license is added to all source files set(ament_cmake_copyright_FOUND TRUE) # the following line skips cpplint (only works in a git repo) # comment the line when this package is in a git repo and when # a copyright and license is added to all source files set(ament_cmake_cpplint_FOUND TRUE) ament_lint_auto_find_test_dependencies() endif() ament_package()package.xml?xml version1.0? ?xml-model hrefhttp://download.ros.org/schema/package_format3.xsd schematypenshttp://www.w3.org/2001/XMLSchema? package format3 namelearning_pkg_c/name version0.0.0/version descriptionObject detection service package with image processing/description maintainer emailseantodo.todosean/maintainer licenseTODO: License declaration/license buildtool_dependament_cmake/buildtool_depend !-- 依赖 -- dependrclcpp/depend test_dependament_lint_auto/test_depend test_dependament_lint_common/test_depend export build_typeament_cmake/build_type /export /package运行结果图2 启动参数示例节点图3 修改参数名称切换路径到工作空间根目录下cd ~/study_ws编译功能包colcon buildcolcon build --packages-select learning_pkg_c设置环境变量source install/local_setup.sh运行参数节点ros2 run learning_pkg_c parameter_node在另一个终端查看参数ros2 param list param_sampleros2 param get param_sample robot_name动态修改参数ros2 param set param_sample robot_name NewBot七、暂停进程后如何终止的解决方法CtrlZ暂停进程 CtrlC终止进程1、方法1①查看被暂停的任务jobs输出示例[1] 已停止 ros2 run learning_pkg_c parameter_nod②恢复到前台fg %1③然后按 CtrlC 正常终止Ctrl C2、方法2①查找进程 PIDps aux | grep camera_node输出示例sean 6600 0.0 0.3 44360 24648 pts/0 T 20:32 0:00 /usr/bin/python3 /opt/ros/humble/bin/ros2 run learning_pkg_c parameter_node②杀死进程kill 6600③如果杀不死强制杀死kill -9 6600八、参数命令的常用操作查看参数列表ros2 param list设置获取参数值ros2 param set/get param_name将某节点中参数存到当前路径下的*.yaml文件中比如myparam.yamlros2 param dump /node_name param_name *.yaml将*.yaml文件中的参数值设置为对应节点的对应参数值ros2 param load /node_name param_name *.yaml

相关文章:

ROS2的核心概念E-参数

一、参数 参数是一种ROS系统中常用的数据传输方式。类似C编程中的全局变量,可以便于在多个程序中共享某些数据,参数是ROS机器人系统中的全局字典,可以在运行多个节点时共享数据。 二、参数的作用 在机器视觉识别时,有很多参数都…...

腾讯版「龙虾」Workbuddy上线当天,我用它搭了一套行业情报日报系统

写在前面最近 AI 圈最火的词大概是「龙虾」。OpenClaw 掀起了一波桌面 AI Agent 的热潮——不再是聊天窗口里你一句我一句的问答,而是让 AI 直接在你的电脑上干活:操作文件、执行脚本、联网搜索、交付结果。3 月 9 日,腾讯发布了 WorkBuddy&a…...

论文AI痕迹怎么消除?2026年最值得用的降AI率软件推荐

论文AI痕迹怎么消除?2026年最值得用的降AI率软件推荐 论文中的AI痕迹怎么才能消除干净?本文从AIGC检测原理出发,推荐2026年最值得使用的降AI率软件,附详细使用教程和效果对比。 论文AI痕迹怎么消除?2026年最值得用的降…...

数字临终关怀测试:临终病人AI陪伴系统的伦理边界‌

AI临终关怀系统的测试伦理新边疆随着人工智能技术在临终关怀领域的加速渗透,AI陪伴系统通过模拟逝者语音、分析患者情绪,提供情感支持,成为医疗数字化的重要应用。然而,这类系统涉及敏感生命数据与伦理决策,对软件测试…...

苹果公司称其即将到来的50周年庆典献礼是用户

就在苹果公司上周重大产品发布后不久,苹果公司CEO蒂姆库克分享了一封信函,纪念苹果公司成立50周年(1976年4月1日)这一即将到来的里程碑。看到苹果公司努力应对周年纪念这一概念确实很奇怪。这通常不是该公司的做法,因为…...

拒绝“镜像裸奔”:深度剖析 ACR 私有仓库鉴权机制与本地排障实战

🛡️ 拒绝“镜像裸奔”:深度剖析 ACR 私有仓库鉴权机制与本地排障实战 在云原生开发中,容器镜像仓库(如阿里云 ACR)是我们存放核心业务代码的“金库”。然而,很多开发者在将仓库状态改为 【私有 (Private)…...

2026年热门降AI率工具推荐!一键消除AI痕迹+稳过检测

2026年热门降AI率工具推荐!一键消除AI痕迹稳过检测 又到论文集中提交、自媒体内容批量产出的时间段,不少同学和创作者都在为一件事头疼:AI生成痕迹太重,内容被平台判定为低质量,要么论文打回修改,要么自媒体…...

图表替代文字降AI率不会?看完这篇5分钟学会

图表替代文字降AI率,这个思路我用了快三个月才真正摸清楚门道。一开始只知道「AI率高了」,然后满篇改词换句,改完检测还是62%。后来有人告诉我,先把能换成图表的内容换掉,再上工具处理剩下的文字,AI率一次就…...

JS中的Set 核心认知

1. Set基础用法Set 是 ES6 新增的集合类型,核心特点是:存储唯一值(无重复元素),元素可以是任意类型(基本类型 / 引用类型),且遍历顺序与插入顺序一致。你可以把它理解为:…...

xtuoj矩形

这道题的思路是:1.将数据排序、去重、统计次数2.分为正方形和普通矩形处理,其中普通矩形处理运用了二分求解的思想,通过枚举每一条边x,找到其对应的上值maxy与下值miny,则对这一x满足条件的y也就是矩形个数有right-lef…...

大数据管理与应用如何结合?做好大数据管理与应用五大步骤

面对电脑里堆积如山的销售记录、用户反馈,你是不是觉得头疼,不知从哪里看起?心里清楚这些数字有用,却不知道怎么让它发挥作用? 大数据管理与应用脱节,是很多企业实际遇到的问题。大数据管理是基础工作&…...

结合之前对 **SSE流式输出** 和 **多智能体编排** 的探索,现在我们来深入 **异步任务处理**

结合你之前对 SSE流式输出 和 多智能体编排 的探索,现在我们来深入 异步任务处理。这是构建高性能AI应用的关键技术,特别是在处理长时间运行的代码生成任务时。 一、为什么需要异步任务处理? 同步 vs 异步对比 #mermaid-svg-ZNiJHP02TGpa4eEa{font-family:"trebuchet…...

【独家原创】基于(BO)Bayes-Transformer多变量时序预测(多输入单输出)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

python-flask大学生二手电子数码产品交易平台设计与实现 _39qu9

目录实现计划概述需求分析技术选型功能模块设计数据库设计前后端开发测试与部署扩展功能建议项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作实现计划概述 开发一个基于Python-Flask的大学生二手电子数…...

复杂三维山地环境下小龙虾优化算法COA求解多无人机动态避障路径规划研究,MATLAB代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

动静态库原理与ELF文件详解

1. 什么是库 所有的库,本质都是源文件对应的 .o 文件动静态库中不要包含 main 函数静态库: .a[linux]、.lib[windows]动态库:.so[linux]、.dll[windows] 2. 静态库 静态库(.a):程序在链接的时候把代码链接到可执行文件中&#xff…...

【路径规划】基于时空A星算法求解带时间约束的多机器人路径规划问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

server.impl.ts 文件分析

server.impl.ts 文件分析 文件概述 server.impl.ts 是 OpenClaw 项目的网关服务器实现文件,负责启动和管理整个网关服务。它包含了网关服务器的核心功能,如配置加载、认证授权、通道管理、WebSocket 服务器、插件系统、健康监控等。 文件结构与功能分析 详细注释 import…...

[测试] Phase 1 Notion Draft

新一轮技术发布潮已然到来,工程团队在实际落地过程中遇到的事故与挑战成为关注焦点。近期多个新框架和开源工具陆续上线,开发者们在真实环境下进行了深度实测,结果令人深思。 技术发布背后的工程事故 在某次新框架发布后,团队迅速…...

Spring Boot 3.x 集成 AI 智能体实战

Spring Boot 3.x 集成 AI 智能体实战 本文介绍如何使用 Spring Boot 3.x 构建 AI 智能体应用,涵盖核心概念和详细实战步骤,帮助开发者快速上手智能体开发。 核心概念 Spring Boot 3.x:最新的 Spring Boot 版本,支持现代化开发特性…...

【第10篇】Mamba 100篇合集 · 从入门到天花板

【第10篇】Mamba 100篇合集 从入门到天花板 副标题:从技术到战略:Mamba 为何能成为 AI 换道超车的核心? 作者:华夏之光永存 专栏:Mamba 100篇全集 从入门到道级天花板 卷属:第一卷 入门篇(第…...

TCL发布会解析:Q9M Pro领衔,T7M系列双星登场,163吋Micro LED双曜压轴

3月17日,“当技术站上巅峰 普惠才有力量”2026 TCL SQD-Mini LED电视春季新品发布会隆重举行,TCL重磅推出Q9M Pro、T7M Pro、T7M Ultra、Max163M Pro、Max163M等一系列王炸级电视新品。其中,Q9M Pro、T7M Pro以及T7M Ultra系列的上市&#xf…...

某国赛CTF逆向题目Writeup:re2

目录脱壳第一层EXE第二层EXEFLAG脱壳 010打开 UPX改了特征码,版本5.1.0 直接拖到ida分析不出来 这里我们选择动态调试脱壳,先找OEP,f9运行到入口 触发TLS回调函数断点,停在了ret上 64位UPX壳中不会用一个明显的跨段jmp指令跳…...

深度拆解DeFi经典漏洞案例,Sonne Finance Exploit

在 DeFi 安全事件中,发生在 Sonne Finance上的漏洞非常具有研究价值。攻击者并没有利用传统的重入漏洞或闪电贷操纵,而是利用 借贷协议中“利率与份额计算的精度错误”,最终在几笔交易中抽走约 2000 万美元资产。这类漏洞本质属于 share acco…...

百度文库免vip下载文档_百度文库vip兑换码

这个还是我朋友给我说的一个工具,可以直接下载文档。也不需要登录会员。给大家看一下。方法在这:点我去下载 这个就是测试下载的文档,还是不错的。大家有需要可以去试试看 今日密码在这...

DevSecOps平台建设之Vue3可视化和代码示例

这是我们结合的一份关于Vue3基础理论知识和代码案例的开发教程 Vue2 和 Vue3 最根本的区别在于响应式系统的实现方式,这一变化解决了 Vue2 在数据监听方面的诸多局限性。 Vue2 的 Object.defineProperty 实现 Vue2 使用 Object.defineProperty 来实现响应式系统&…...

免费查AI率的网站有哪些?这3个亲测靠谱

免费查AI率的网站有哪些?这3个亲测靠谱 上周帮室友改论文,她用DeepSeek写了一章文献综述,结果学校预检AI率直接飙到60%多。她问我有没有免费查AI率的地方,想先自己测一下到底哪些段落被标红了。 说实话,现在网上搜&quo…...

南昌本地靠谱的整木定制公司

在南昌,随着人们生活品质的提高,对于家居装修的要求也越来越高,整木定制成为了许多别墅、大平层和高端住宅业主的首选。然而,市场上的整木定制公司众多,如何选择一家靠谱的公司成为了一个难题。今天,就为大…...

记忆函数 II 题解

题目链接 2630. 记忆函数 II - 力扣(LeetCode) 思路 题目所提到 相等才给出缓存的结果,那么我们用 hash 的想法,给每个参数记录下来 对于简单数据类型 —— 值相等 ,类型相等即可 对于复杂数据类型 —— 需要是指…...

2026年,绿壳蛋为何成为餐桌新宠?揭秘专业生产背后的品质坚守

清晨,当你敲开一枚温润如玉的绿壳蛋,看着橙黄透亮的蛋黄在平锅中慢慢凝固,或许不会想到,这枚小小的鸡蛋背后,是一场从田间到餐桌的现代农业品质革命。近年来,绿壳蛋以其独特的营养价值与生态概念&#xff0…...