ROS笔记二:launch

目录

launch

node标签

参数

参数服务器

节点分组


launch

launch文件是一种可以可实现多节点启动参数配置的xml文件,launch文件用于启动和配置ROS节点、参数和其他相关组件。launch文件通常使用XML格式编写,其主要目的是方便地启动ROS节点和设置节点之间的连接关系。

launch常用标签:

  1. <launch>标签:launch文件的根标签,表示这是一个launch文件。

  2. <node>标签 :用于启动ROS节点。例如,<node pkg="my_package" type="my_node" name="node_name" output="screen"/>表示启动名为my_node的ROS节点,该节点属于my_package软件包,并且节点的名称为node_nameoutput="screen"表示将节点输出重定向到屏幕。

  3. <arg>标签 :用于定义参数,可以在启动launch文件时传递给节点。例如,<arg name="my_arg" default="default_value"/>定义了一个名为my_arg的参数,并设置了默认值为default_value

  4. <param>标签 :用于设置ROS参数。例如,<param name="my_param" type="int" value="42"/>表示设置一个名为my_param的整数类型参数,其值为42。

  5. <include>标签++用于包含其他launch文件。这使得launch文件可以模块化并重用。例如,<include file="$(find my_package)/launch/other_launch_file.launch"/>表示包含了my_package软件包中的other_launch_file.launch文件++。或者

  6. <group>标签 :用于将一组节点放入一个组中。例如,可以使用<group ns="my_namespace">...</group>来指定一个命名空间,并且其中的所有节点都将位于这个命名空间下。

node标签

<node>标签是在ROS中用于启动ROS节点的XML标签(等同于rosrun)。通过<node>标签,可以指定要启动的ROS节点的相关信息,如软件包名称、节点类型、节点名称等。

ROS程序运行单位是是node即节点,运行单个node的指令是rosrun

rosrun 是 ROS 中用于直接运行已编译的节点程序的命令。使用 rosrun 命令可以方便地启动指定软件包中的节点,而无需指定软件包的路径。

语法为:rosrun <package_name> <node_name>

  • <package_name>:指定要运行节点所属的软件包名称。
  • <node_name>:指定要运行的节点的名称

要运行一个名为 my_node 的节点,它属于 my_package 软件包:rosrun my_package my_node

rosrun 命令会自动查找指定软件包,并在该软件包的目录下寻找对应的节点可执行文件并运行。

使用 rosrun 命令相对于直接使用可执行文件路径的好处是,它会自动设置 ROS 环境变量和节点名称空间,并提供了更方便的方式来启动节点。此外,rosrun 命令还支持其他选项和参数,可以通过运行 rosrun --help 查看详细信息。
<node>标签的一般结构和常用属性

++<node pkg="package_name" type="node_type" name="node_name" [args="arg1 arg2 ..."] [output="output_option"]/>++

  • pkg: 指定ROS节点所属的软件包名称。
  • type: 指定要启动的ROS节点类型(即可执行文件名)。
  • name: 指定为ROS节点设置的名称。通常用于在ROS图中唯一标识该节点。
  • args: 可选属性,用于传递参数给要启动的ROS节点。参数以空格分隔。
  • output: 可选属性,用于指定如何处理节点的输出信息。常见的选项包括log(将输出信息记录到日志文件)、screen(将输出信息打印到屏幕)等。

示例:
<node pkg="my_package" type="my_node" name="my_node" output="screen"/>

这个示例中,<node>标签会启动my_node节点,该节点属于my_package软件包,节点的名称为my_node,并且节点的输出信息会打印到屏幕上。

参数

<param>, <rosparam><arg> 是用于在launch文件中设置参数和传递参数的标签(tags)。

<param> 标签:<param> 标签用于在ROS的launch文件中设置节点参数的数值。通过 <param> 标签可以为特定节点设置参数值,这些参数值将会在节点启动时传递给该节点。

例如,可以使用以下方式在launch文件中设置参数值:

<param name="parameter_name" value="parameter_value"/>

<rosparam> 标签:<rosparam> 标签用于从文件或字符串中加载参数,并将这些参数设置到ROS参数服务器上。通过 <rosparam> 标签可以加载包含参数值的YAML文件,这些参数值可以在ROS节点中访问。

例如,可以使用以下方式在launch文件中加载参数文件:

<rosparam file="path/to/params.yaml"/>

<arg> 标签:<arg> 标签用于定义参数并将其传递给其他标签或节点。<arg> 标签通常用于传递参数值,以便在launch文件中重用参数

例如,可以使用以下方式定义一个参数并传递给节点:

<arg name="my_param" default="default_value"/> <node name="my_node" pkg="my_package" type="my_node" output="screen" arg="my_param"/>

参数服务器

参数服务器是一个用于存储和检索参数值的全局参数数据库。它允许ROS节点在运行时动态地获取参数值,并且这些参数值可以在节点之间共享和调整。参数服务器为ROS系统提供了一种方便的方法来管理配置参数,使得节点之间可以共享和访问这些参数。

全局性: 参数服务器是全局性的,意味着所有的ROS节点都可以访问参数服务器上的参数值。

动态性: 节点可以在运行时动态地读取和更改参数服务器中的参数值。

命名空间: 参数服务器支持命名空间,因此可以对参数进行组织和分类,使得参数更加清晰和易于管理。

在ROS中,可以使用rosparam命令行工具或者在节点代码中使用ROS参数服务器 API来访问和设置参数服务器中的参数值。例如,可以使用rosparam set命令来设置参数的值,使用rosparam get命令来获取参数的值。

在节点代码中,可以使用ros::param(C++)或rospy.get_param(Python)等函数来访问和修改参数服务器中的参数值。

节点分组

节点分组是一种将相关节点组织在一起的方式,以便更好地管理和控制节点的行为。节点分组可以通过ROS的launch文件或者命令行进行设置和配置

通过launch文件进行节点分组 :可以使用ROS的launch文件来将相关节点分组到一个launch文件中。在launch文件中,可以使用<group>标签将多个节点组合在一起,并定义它们的启动顺序、命名空间等信息。

e.g.

<launch>

<group ns="my_group">

<node name="node1" pkg="my_package" type="node1" />

<node name="node2" pkg="my_package" type="node2" />

</group>

</launch>

上述示例中,<group> 标签将 node1node2 节点组合到一个命名空间为 "my_group" 的分组中。

<group> 标签用于创建一个节点分组,其中 ns 属性定义了这个分组的命名空间。在这个命名空间下启动的节点将会共享这个命名空间,这意味着它们的名称将会被加上这个命名空间前缀。

例如,如果在 <group> 分组内启动了两个节点,一个叫做 node1,另一个叫做 node2,它们的完整名称将会是 my_group/node1my_group/node2

重命名

在ROS中,可以使用<remap>标签来进行节点话题或服务的重命名。这样可以避免不同节点之间的名称冲突,也可以方便地修改节点之间的通信关系。

在ROS的launch文件中,<remap> 标签用于重命名节点的话题或服务。

重命名节点的话题:

XML 复制代码
<launch>
  <node name="my_node" pkg="my_package" type="my_node_type">
    <remap from="input_topic" to="new_input_topic" />
    <remap from="output_topic" to="new_output_topic" />
  </node>
</launch>

重命名节点的服务:

XML 复制代码
<launch>
  <node name="my_service" pkg="my_package" type="my_service_type" >
    <remap from="input_service" to="new_input_service" />
    <remap from="output_service" to="new_output_service" />
  </node>
</launch>

<remap> 标签指定了要重命名的来源(from)和目标(to)。这意味着节点内部将使用新的名称 来订阅和发布消息,而不是原来的名称

注意:<remap> 标签只是在启动时进行动态的重命名,并不会真正修改节点的代码或定义。

相关推荐
大筒木老辈子1 小时前
Linux笔记---协议定制与序列化/反序列化
网络·笔记
草莓熊Lotso1 小时前
【C++】递归与迭代:两种编程范式的对比与实践
c语言·开发语言·c++·经验分享·笔记·其他
我爱挣钱我也要早睡!4 小时前
Java 复习笔记
java·开发语言·笔记
汇能感知9 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun9 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao9 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾10 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT10 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
ST.J11 小时前
前端笔记2025
前端·javascript·css·vue.js·笔记
Suckerbin11 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全