ROS运行文件(LaunchFile)和参数(Parameter)

news/2024/7/24 3:39:19/文章来源:https://blog.csdn.net/hbin5110209161/article/details/139288970

本文主要介绍ROS的Launch File和Parameter概念,通过Launch File启动单个或多个节点,并通过Parameter配置启动参数。
更多内容,访问专栏目录获取实时更新。

当你的应用中包含了很多工作包,每个工作包了又包含了多个节点时,通过硬编码的方式在启动节点时传递参数显然不那么合适,同时要启动哪些节点,通过命令行指令一个个执行启动也必然会有很多麻烦,通过ROS Parameter Server 和 Launch File就能帮助解决这些麻烦。

ROS Parameter

ros2 param list
ros2 param get <node_name> <parameter_name>

通过上面的指令我们能查看每个节点的Parameter及其详细信息。

ros2 run <package_name> <node_name> --ros-args -p <parameter_name>:=<value>

通过上面的指令我们可以在运行节点时给节点的Parameter设置值。
在程序里,我们通过declear_parameter方法声明一个Parameter:
在这里插入图片描述
我们首先创建一个新的节点(参考教程:ROS2 Topics和Services),并为它添加一个Parameter,在启动该节点时传递Parameter的值:

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from std_msgs.msg import Int64class NumberPublisherNode(Node):def __init__(self):super().__init__("number_publisher")self.declare_parameter("number_to_publish")self.number = self.get_parameter("number_to_publish").valueself.publisher = self.create_publisher(Int64, "number", 10)self.timer = self.create_timer(1, self.publish_number)self.get_logger().info("Number Publisher has been started!")def publish_number(self):msg = Int64()msg.data = self.numberself.publisher.publish(msg)def main(args=None):rclpy.init(args=args)node = NumberPublisherNode()rclpy.spin(node)rclpy.shutdown()if __name__ == "__main__":main()

修改setup.py,编译并运行该节点,通过命令行传递Parameter的值,可以看到如下的效果:
在这里插入图片描述

Launch File

在工作空间下创建一个新的工作包my_robot_bringup
在这里插入图片描述
在新的工作包下我们新建了launch文件夹,在该文件夹下创建我们的启动文件:
number_app.launch.py:
在这里插入图片描述

注意:函数名必须是generate_launch_description

更多启动配置:

number_publisher_node = Node(package="my_py_pkg",executable="number_publisher",name="my_number_publisher",  # rename noderemappings=[  # remap topicremap_number_topic],parameters=[  # provide parameter{"number_to_publish": 4},{"publish_frequency": 1},])

修改CMakeLists.txt,添加下面的指令:

install(DIRECTORYlaunchDESTINATION share/${PROJECT_NAME}
)

因为我们需要启动my_py_pkg工作包下的节点,所以在package.xml中,需要添加执行依赖:

<exec_depend>my_py_pkg</exec_depend>

编译并执行,通过ros2 node list就可以看到Launch文件里的两个节点都被启动了

ros2 launch my_robot_bringup number_app.launch.py
如有错误,欢迎留言或来信指正:hbin6358@163.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1054403.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

香橙派AIpro开发板初体验

香橙派AIpro开发板初体验 一、引言 在当前的AI发展浪潮中&#xff0c;边缘计算逐渐成为了研究的热点。香橙派AIpro开发板作为一款基于昇腾AI技术的开发板&#xff0c;凭借其强大的算力和丰富的接口&#xff0c;为AI边缘计算提供了强大的支持。最近&#xff0c;我也是拿到了官…

VUE3 学习笔记(6):data数据的监听、表单绑定、操作DOM

data数据的监听&#xff08;侦听&#xff09; 对于data的值的监听&#xff0c;可以用watch中与data中的参数命名一致的值做为函数进行获取监听变动前后的值再做逻辑判断&#xff0c;如下图所示。 示例代码 <template><div><p :class"classDemo">{…

用Python实现办公自动化

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

机器学习-3-特征工程的重要性及常用特征选择方法

参考特征重要性:理解机器学习模型预测中的关键因素 参考[数据分析]特征选择的方法 1 特征重要性 特征重要性帮助我们理解哪些特征或变量对模型预测的影响最大。 特征重要性是数据科学中一个至关重要的概念,尤其是在建立预测性任务的模型时。想象你正在尝试预测明天是否会下…

Docker部署SpringBoot项目(jar包+Mysql)

部署Java项目 项目准备准备Java项目镜像准备配置网络 部署项目细节展示 项目准备 准备Java项目 hmall项目是一个maven聚合项目&#xff0c;使用IDEA打开hmall项目&#xff0c;查看项目结构如图&#xff1a; 我们要部署的就是其中的hm-service&#xff0c;其中的配置文件采用…

开源与闭源:AI大模型发展路径的博弈

一、引言 在人工智能&#xff08;AI&#xff09;领域&#xff0c;大模型以其卓越的性能和广泛的应用前景&#xff0c;成为了近年来技术发展的热点。然而&#xff0c;在大模型的发展路径上&#xff0c;开源与闭源两种模式一直存在着激烈的博弈。本文将深入探讨这两种模式在大模…

python-合并排列数组 I

问题描述&#xff1a;合并两个按升序排列的整数数组a和b&#xff0c;形成一个新数组&#xff0c;新数组也要按升序排列。 问题示例&#xff1a;输入A[1],B[1],输出[1,1],返回合并后的数组。输入A[1,2,3,4],B[2,4,5,6],输出[1,2,2,3,4,4,5,6],返回合并所有元素后的数组。 完整代…

【旋转链表】python

目录 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 题目&#xff1a; 思路&#xff1a; 求链表长度&#xff1b;找出倒数第 k1 个节点&#xff1b; 3.链表重整&#xff1a;将链表的倒数第 k1 个节点和倒数第 k个节点断开&#xff0c;并把后半部分拼接到链表的头部。…

CTFHUB技能树——SSRF(一)

目录 一、SSRF(服务器端请求伪造) 漏洞产生原理: 漏洞一般存在于 产生SSRF漏洞的函数&#xff08;PHP&#xff09;&#xff1a; 发现SSRF漏洞时&#xff1a; SSRF危害&#xff1a; SSRF漏洞利用手段&#xff1a; SSRF绕过方法&#xff1a; 二、CTFHUB技能树 SSRF 1.Ht…

[JAVASE] String类 StringBuffer类 StringBuilder类

目录 一.String类 1.1 String字符串不可变的原因 1.2 字符串中的比较方法 1.2.1 equals 1.2.2 compareTo 与 compareToIgnoreCase 1.3 字符串中的查找方法 1.3.1 charAt 1.3.2 indexOf 与 lastIndexOf 1.4 字符串中的转换方法 1.4.1 valueOf 1.4.2 toUpperCase 与 to…

我和jetson-Nano的故事(12)——安装pytorch 以及 torchvision

在jetson nano中安装Anaconda、pytorch 以及 torchvision 1.Pytorch下载安装2.Torchvision安装 1.Pytorch下载安装 首先登录英伟达官网下载Pytorch安装包&#xff0c;这里以PyTorch v1.10.0为例 安装依赖库 sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev liba…

做好开源快速开发平台研发创新 助力行业高效发展!

随着信息化时代的到来&#xff0c;科技的力量无处不在。为了提高办公效率&#xff0c;很多大中型企业倾向于使用更为先进的软件平台来助力企业降本增效。在众多助力神器之中&#xff0c;开源快速开发平台低代码技术平台深得广大新老客户朋友的喜爱&#xff0c;它与生俱来的优势…

使用Monkey命令做简单的安卓APP稳定性测试

Monkey是Android SDK提供的一个命令行工具&#xff0c;可以简单方便的发送伪随机的用户事件流&#xff0c;对Android APP做压力&#xff08;稳定性&#xff09;测试。主要是为了测试app是否存在无响应和崩溃的情况。 Monkey 是SDK中附带的一个工具&#xff0c;所有的事件都是随…

yolov10 使用自己的数据集训练目标检测模型

1 环境配置(使用anaconda) conda create -n yolov10 python=3.9 //创建虚拟环境 conda activate yolov10 //激活虚拟环境 pip install -r requirements.txt //执行yolov10 路径下requirements.txt 安装依赖 pip install -e .2.数据集制作 使用lableImage制作数据集(win版…

wps表格样式【笔记】

wps表格样式【笔记】 前言版权推荐wps表格样式第一种方法第二种方法 最后 前言 2024-5-15 19:25:47 以下内容源自《【笔记】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://jsss-1.blog.csdn.net …

OpenHarmony有氧拳击之应用端开发

一、简介 继《OpenHarmony有氧拳击设备端的开发》后&#xff0c;本次为大家带来酷炫的应用端开发。如下&#xff0c;开发者伴随着音乐&#xff0c;律动出拳后&#xff0c;那开发板屡屡播放“挨打”效果&#xff0c;这究竟是怎么一回事&#xff1f;让我们一探背后原理。 这款拳…

一款拥有15000+POC漏洞扫描工具

1 工具介绍 0x01 免责声明 请勿使用本文中所提供的任何技术信息或代码工具进行非法测试和违法行为。若使用者利用本文中技术信息或代码工具对任何计算机系统造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责。本文所提供的技术信息或代码工具仅供于学习&am…

Vue开发者工具安装

通过谷歌应用商店安装&#xff08;国外网站&#xff09; 极简插件下载&#xff08;推荐&#xff09;&#xff1a;下载 → 解压 → 点击左上角的三个小点 → 开发者模式 → 拖拽安装 → 插件详情允许访问文件 https://chrome.zzzmh.cn/index 安装步骤&#xff1a; 安装之后可…

基于C++11实现的手写线程池

在实际的项目中&#xff0c;使用线程池是非常广泛的&#xff0c;所以最近学习了线程池的开发&#xff0c;在此做一个总结。 源码&#xff1a;https://github.com/Cheeron955/Handwriting-threadpool-based-on-C-17 项目介绍 项目分为两个部分&#xff0c;在初版的时候&#x…

142.栈和队列:用栈实现队列(力扣)

题目描述 代码解决 class MyQueue { public:stack<int> stIn; // 输入栈&#xff0c;用于push操作stack<int> stOut; // 输出栈&#xff0c;用于pop和peek操作MyQueue() {}void push(int x) {stIn.push(x); // 将元素压入输入栈}int pop() {// 如果输出栈为空&…