ROS1快速入门学习笔记 - 014launch启动文件的使用方法

一、定义

Launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROSMaster

二、常用语法

1. 根标签

<launch> - launch文件中的根元素采用<launch>标签定义

<launch>表示开始;<launch>表示结束;

2. 启动节点

<node pkg = "package-name"type="executable-name" name="node-name" />

  • pkg:节点所在的功能包名称
  • type:节点的可执行文件名称
  • name:节点运行时的名称
  • output、respwan、required、args

output 用来控制某个节点是不是要把他的日志信息打印到当前终端。

respawn用来控制节点,如果启动运行突然挂掉,需不需要重启。

required代表该节点是否必须要求启动。

ns代表命名空间

3. 参数设置

  1. <param>/<rosparam> (设置ROS系统运行中的参数,存储到参数服务器中;存储一个参数)

    <param name = "output_frame" value="odom"/>
  • name: 参数名
  • value: 参数值
  1. 加载参数文件中的多个参数

    <rosparam file="params.yaml" command="load" ns="params"/>
  2. <arg> (launch文件内部的局部变量,仅限于launch文件使用)

    <arg name="arg-name" default="arg-value"/>
  • name: 参数名
  • value: 参数值

调用

复制代码
<param name="foo" value="$(arg arg-name)"/>

这里通过$(arg arg-name)直接调用arg参数对应的value

复制代码
<node name="node" pkg="package" type="type" args="$(arg arg-name)"/>

通过$(arg arg-name)调用arg参数的name

4. 重映射(<remap>)

重映射ROS计算图资源的命名

复制代码
<remap from="/turtlebot/cmd_vel"to="/cmd_vel"/>
  • from: 原命名
  • to:映射之后的命名

(把/turtlebot/cmd_vel重命名为/cmd_vel)(原来的名字就没有了!)

5. 嵌套(<include>)

包含其他launch文件,类似C语言中头文件的包含。

复制代码
<include file="$(dirname)/other.launch"/>
  • file:包含的其他launch文件路径

三、例子

在工作空间下创建一个learning_launch的功能包,再在里面创建一个以launch命名的文件夹,用来存放launch文件。

1. simple.launch

接下来我们看一个见到那的simple.launch文件

(可以将显示由文本改为XML格式,这样会有高亮显示)

这个launch包含两个节点,类型分别为我们之前在learning_topic创建的文件

接下来我们进行编译并运行

复制代码
catkin_make

运行luanch文件

复制代码
roslaunch learning_launch simple.launch

运行结果如下:

可以发现,一个launch文件可以运行多个节点。

2. turtlesim_parameter_config.launch

内容如下:

复制代码
<launch>

	<param name="/turtle_number"   value="2"/>

    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
		<param name="turtle_name1"   value="Tom"/>
		<param name="turtle_name2"   value="Jerry"/>

		<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
	</node>

    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>

</launch>

这个launch文件包含了小乌龟和键盘控制节点。

这个文件需要导入参数文件,因此我们再导入参数文件。

接下来我们运行该launch文件

复制代码
roslaunch learning_launch turtlesim_parameter_config.launch

运行结果如下:

我们再查看一下我们加载的参数:

复制代码
rosparam list

我们可以发现,参数写在外面和里面的区别:

  • 写在外面的参数命令直接就是自己本身的名字;写在里面的参数的命名需要加上前面的节点名 。
  • A和B,C和D的区别在于,因为C和D前面加了group,因此命名也需要加上group

3. start_tf_demo_c++.launch

launch文件代码如下:

复制代码
 <launch>

    <!-- Turtlesim Node-->
    <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>

    <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
    <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />

    <node pkg="learning_tf" type="turtle_tf_listener" name="listener" />

  </launch>

第一个启动我们的海龟仿真器;第二个启动键盘控制;再运行之前我们写的广播器;最后启动我们之前写的监听文件。

运行结果如下:

此时我们可以发现,一个launch文件即可全部运行我们之间写的文件;且launch文件不需要运行roscore。

4. turtlesim_remap.launch

文件代码如下:

复制代码
<launch>

	<include file="$(find learning_launch)/launch/simple.launch" />

    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
		<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
	</node>

</launch>

(include包含另外一个launch文件(simple.launch);在运行仿真器节点;然后将话题名重命名)

运行结果如下:

此时我们可以发现,话题名已经被重命名(原来的话题名已不存在)。

相关推荐
蔗理苦8 分钟前
2025-04-03 Latex学习1——本地配置Latex + VScode环境
ide·vscode·学习·latex
林政硕(Cohen0415)14 分钟前
Linux驱动开发进阶(四)- 内存管理
linux·驱动开发·内存管理
sqmeeting15 分钟前
Linux NUC小主机化身视频会议服务器: 技术优势与部署实战
linux·服务器·windows·音视频·实时音视频
__Benco2 小时前
OpenHarmony子系统开发 - DFX(一)
人工智能·harmonyos
小西几哦2 小时前
3D点云配准RPM-Net模型解读(附论文+源码)
人工智能·pytorch·3d
CareyWYR2 小时前
每周AI论文速递(250331-250404)
人工智能
V---scwantop---信2 小时前
现代科幻赛博朋克风品牌海报电子竞技设计无衬线英文字体 Glander – Techno Font
笔记·字体
charlie1145141912 小时前
从0开始的构建的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)——第2章——构建简单的ESP8266驱动
stm32·单片机·物联网·学习·c·esp8266
码视野2 小时前
基于快速开发平台与智能手表的区域心电监测与AI预警系统(源码+论文+部署讲解等)
人工智能·智能手表·毕业论文·计算机论文·物联网论文