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

本文主要介绍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 Int64


class NumberPublisherNode(Node):
  def __init__(self):
    super().__init__("number_publisher")
    self.declare_parameter("number_to_publish")

    self.number = self.get_parameter("number_to_publish").value
    self.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.number
    self.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 node
    remappings=[  # remap topic
      remap_number_topic
    ],
    parameters=[  # provide parameter
      {"number_to_publish": 4},
      {"publish_frequency": 1},
    ]
  )

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

install(DIRECTORY
  launch
  DESTINATION 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

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

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

相关文章

测试基础07:测试工作流程规范、进度同步与把控

课程大纲 1、迭代测试流程 2、测试流程 2.1、测试用例评审 目的&#xff1a;对齐产品需求理解&#xff0c;完善、优化测试场景。 参与方&#xff1a;项目、产品、开发、测试。 用例内容&#xff1a;冒烟用例&#xff08;主流程&#xff09; 功能用例。 2.2、冒烟测试 提测…

JAVA类与方法·易错题分析

分析一下作业中关于类与方法写错或者易错的题。 N o . 1 No.1 No.1 下面程序的执行结果是______。 public class Test7 {public static void main(String[] args){new B().display();} } class A{public void draw() {System.out.print("Draw A.");}public void di…

PHPSTOM配置Laradock,xdebug,phpunit

原理图&#xff1a; 片面理解&#xff1a; phpstorm启用一个9000端口&#xff0c;这个端口用来接收到信息后&#xff0c;启用xdebug功能。服务器端(docker), 当客户端访问laravel项目域名后, 并读取xdebug.ini的配置, 把调试的请求数据, 向配置里面的端口发送消息, 配置里面的端…

这个橙子真的香!老司机徒手把玩香橙派Kunpeng Pro事后回忆录

说&#xff01;你是哪个门派&#xff1f; 香橙&#xff0c;芸香科柑橘属小乔木。枝通常有粗长刺&#xff0c;新梢及嫩叶柄常被疏短毛。叶厚纸质&#xff0c;翼叶倒卵状椭圆形&#xff0c;顶部圆或钝。。。 咦&#xff1f;小李&#xff1f;我们不是搞IT的嘛&#xff0c;怎么会有…

Photoshop粘贴 lorem-ipsum 占位符文本

Photoshop在使用文字工具的时候&#xff0c;点击画布会自动出现一段英文“Lorem Ipsum”&#xff0c;这是占位文本&#xff0c;除了响应速度慢外&#xff0c;目前我也没发现它有什么太大意义。 那么要如何操作才能取消占位文本的填写呢&#xff1f;在菜单栏点 编辑-首选项-文字…

list常用接口模拟实现

文章目录 一、模拟list类的框架二、函数接口实现1、迭代器接口2、常用删除、插入接口3、常用其他的一些函数接口4、默认成员函数 一、模拟list类的框架 1、使用带哨兵的双向链表实现。 2、链表结点&#xff1a; // List的结点类 template<class T> struct ListNode {Li…

【YashanDB知识库】OCI驱动类问题定位方法

【标题】OCI驱动类问题定位方法 【需求分类】故障分析 【关键字】OCI 【需求描述】由于我们的OCI接口目前尚不完善&#xff0c;经常会遇见OCI接口能力不足导致应用功能无法运行的问题&#xff0c;需要定位手段确定底层是哪个接口报错 【需求原因分析】方便一线数据库管理员…

Spring OAuth2:开发者的安全盾牌!(下)

上文我们教了大家如何像海盗一样寻找宝藏&#xff0c;一步步解锁令牌的奥秘&#xff0c;今天将把更加核心的技巧带给大家一起学习&#xff0c;共同进步&#xff01; 文章目录 6. 客户端凭证与密码模式6.1 客户端凭证模式应用适用于后端服务间通信 6.2 密码模式考量直接传递用户…

RabbitMQ详情

一.MQ简介 什么是MQ MQ本质是队列&#xff0c;FIFO先入先出&#xff0c;队列中存放的内容是message&#xff08;消息&#xff09;&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互联网架构中是常见的上下游“逻辑解耦物理解耦”的消息通信服务。 主…

win10双网卡如何同时上内网和外网?

win10双网卡如何同时上内网和外网? Chapter1 win10双网卡如何同时上内网和外网?Chapter2 网络基础--win10双网卡设置成访问不同的网络 Chapter1 win10双网卡如何同时上内网和外网? 原文链接&#xff1a;https://www.jb51.net/os/win10/806585.html 场景&#xff1a;很多办…

反射器与联邦实验

反射器与联邦实验 一.拓扑 二.实验要求: 1.AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24&#xff0c;该地址不能在任何协议中宣告&#xff0c;AS3存在两个环回&#xff0c;一个地址为192.168.2.0/24&#xff0c;该地址不能在任何协议中宣告&#xff0c;As1还有一个环…

GPT-4O神器来袭!自动生成Figma设计稿,移动端开发瞬间加速!

2024年5月29日- 近日&#xff0c;一款基于GPT-4O技术的创新工具成功实现根据产品需求文档&#xff08;PRD&#xff09;自动生成Figma设计稿的功能&#xff0c;为移动端应用开发者带来革命性的便捷。据悉&#xff0c;该功能主要针对移动端应用进行优化&#xff0c;并支持使用高质…

php之sql代码审计

1 SQL注入代码审计流程 1.1 反向查找流程 通过可控变量(输入点)回溯危险函数 查找危险函数确定可控变量 传递的过程中触发漏洞 1.2 反向查找流程特点 暴力&#xff1a;全局搜索危险函数 简单&#xff1a;无需过多理解目标网站功能与架构 快速&#xff1a;适用于自动化代码审…

图书/科技馆进行客流统计的价值和意义是什么?

在当今数字化时代&#xff0c;图书/科技馆进行客流统计具有极其重要的价值和意义。 一、客流统计原因 首先探讨一下图书/科技馆进行客流统计的原因。其一&#xff0c;为了更好地规划和利用场馆空间。了解不同区域的客流分布情况&#xff0c;能够针对性地进行布局调整&#xff0…

【漏洞复现】大华智能物联综合管理平台 log4j远程代码执行漏洞

0x01 产品简介 大华ICC智能物联综合管理平台对技术组件进行模块化和松耦合&#xff0c;将解决方案分层分级&#xff0c;提高面向智慧物联的数据接入与生态合作能力。 0x02 漏洞概述 大华ICC智能物联综合管理平台/evo-apigw/evo-brm/1.2.0/user/is-exist 接口处存在 l0g4i远程…

matlab工具使用记录-编辑器和命令行窗口分开还原

工具&#xff1a;matlab2021b 场景&#xff1a;在使用软件的过程中&#xff0c;我们误操作将matlab的编辑器单独出来了。这时候对软件进行各种操作都还原不回去。 matlab中编辑器和命令行窗口分开了如下图所示。 这时候只需要使用快捷键在编辑器窗口按CtrlshiftD&#xff0c;…

QGIS开发笔记(三):Windows安装版二次开发环境搭建(下):将QGis融入QtDemo,添加QGis并加载tif遥感图的Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139136356 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

Redis-事务

简介 说到事务&#xff0c;一般都会第一时间的想到MySQL的事务。 在MySQL中事务的提出是为了解决解决原子性操作的&#xff0c;一组执行命令要么全部执行成功&#xff0c;要么执行失败进行回滚&#xff0c;一条也不执行。 在Redis中也有事务这个概念&#xff0c;但与MySQL相…

Windows内核函数 - 添加、修改注册表键值

打开注册表的句柄后&#xff0c;就可以对该项进行设置和修改了。注册表是以二元形式存储的&#xff0c;即“键名”和“键值”。通过键名设置键值&#xff0c;而键值可以划分几个类&#xff0c;如下表所示。 表1 键值的分类 在添加和修改注册表键值的时候&#xff0c;要分类进行…