ROS Learning-032 (提高篇-010 Launch)Launch 深入研究 --- (启动文件编程)ROS 的 XML语法简介

本文详细介绍了ROS的launch文件编程,包括启动脚本的使用、创建过程及其基本成分。文章重点讲解了XML语法,如node元素的属性,如name、pkg、type等,并探讨了如何控制节点的日志输出、重生、命名空间、重映射等。此外,还介绍了launch文件中的其他元素,如include、arg、group等,以及如何通过参数传递和创建组来管理节点启动。通过本文,读者将掌握编写复杂launch文件的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS 提高篇 之 Launch 深入研究 - 01 — 启动文件的编程 — ROSXML语法简介


我使用的虚拟机软件:VMware Workstation 11
使用的Ubuntu系统:Ubuntu 14.04.4 LTS
ROS 版本:ROS Indigo


注意:
1 . ROS 提高篇这个专栏的教学有门槛。
2 . 如果你没有学习前面的教程,请想学习前面的 beginner_Tutorialslearning_tfROS 相关教程。


1 . 前言

在之前的 beginner_Tutorials 教程里面,我们已经初步学习了 Launch文件 要如何编写。但是那篇博客只是简单的讲解了一些 Launch 文件里面比较常用的几个 标签如何使用。
这一篇博客和接下来的几篇博客,我们将详细的讲解 Launch 文件要如何编写。

使用 launch文件,我们可以一次性配置并且运行很多节点。

至今,如果你按照我们的教程(ROS Learning)学习到这里,想必你一定运行了许多的例子。你可能会对在许多的终端中运行不同的节点感到麻烦,并且你会因为不了解我们运行过的例子中的 launch文件 都做了什么事情会感到困扰。我们在ROS Learning教程中 的 beginner_Tutorialslearning_tfROS 相关教程 中已经学习简单的 launch启动脚本 如何编写,现在的你所知道的launch文件的编写技巧已经无法满足你现在想编写更复杂更大型的launch启动脚本文件了。所以这一篇博客和接下来的几篇博客,我们会详细的讲 launch文件 的技巧,当你学完这几篇的博客,你会具备编写大型launch启动脚本的能力。

说了一堆废话,接下来进入正题。

2 . 使用launch启动脚本文件:

<launch>
    <node
    pkg="turtlesim"
    type="turtlesim_node "
    name="turtlesim "
    respawn="true "
    />
    <node
    pkg="turtlesim"
    type="turtle_teleop_key "
    name="teleop_key"
    required="true"
    launch−prefix="xterm −e"
    />
    <node
    pkg="agitr"
    type="subpose"
    name="pose_subscriber"
    output="screen"
    />
</launch>

roslaunch 是如何允许我们一次启动多个节点”?
基本的实现思想是列表,在一个指定的XML格式,一组节点需要在同一时间被启动。你会很熟悉下面的列表,它展示启动了海龟(turtlesim)模拟器的一个简单的launch文件

再我们深入研究launch文件的格式的细节前,让我们看看这些文件都是如何使用的:

roslaunch 命令的使用格式:

# roslaunch package-name launch-file-name

编写简单的启动脚本文件 的博客中最后的小练习中,我们自己编写了一个launch文件,如果一切工作正常的话,这个命令将会启动3个节点。在开始任何一个节点前,roslaunch 将会确定 roscore节点 是否已经在运行,如果没有,自动启动它。

注意: 要小心,不要与 rosrun命令 混淆,rosrun 只能启动一个节点。roslaunch 命令可以同时启动多个节点。

扩展 :你也可以在使用 roslaunch 启动launch文件的时候没有package-name这部分。要想做到这一定,launch-file-name 文件需要写成绝对路径的形式。只要可以让 roalaunch 命令找到唯一的一个 launch 文件,你就可以不提供 package-name 部分。举例:

$ roslaunch ~/catkin_ws/src/beginner_turtorls/launch/xxx.launch

关于 roslaunch 的一个重要的事实,这个事实很容易被忽略,就是在launch文件中的所有节点几乎被同一时间启动。结果,我们不能确定这些节点初始化的顺序。好在 ROS节点 不关系彼此的启动顺序。

为什么?
这个行为体现了ROS哲学:每一个节点与其他的节点都应该尽可能的独立、不相关。

如果你想请求 roslaunch命令 请求详细输出( Requesting verbosity )信息的话。就像其他的命令行工具一样,roslaunch 也有请求详细输出的选项。在你进行调试程序的时候,使用 -v 参数对你是有帮助的,你可以看到 roslaunch 是如何解读你的 launch文件 的详细解释。

# roslaunch -v package-name launch-file-name


3 . 创建launch启动脚本文件:

3-1 . 基本的成分:

3-1-1 . <launch>

最简单的启动文件是由一个包含了几个节点元素的根元素(root element)组成。

根元素launch文件XML文档,每一个XML文档必须有且只有一个跟元素(root element)。对于ROS launch文件,根元素(root element)是由一对 launch 标签定义的。

<launch>
    ...
</launch>

其他的所有元素标签都要写在 <launch>...</launch> 便签之间。


3-1-2 . <node>

启动的节点:任何一个launch文件的重点都是:节点(node)元素的集合。启动的每一个节点(node)都要有自己独一无二的名字(name)。一个节点(node)元素看上去就像下面这个样子:

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

注意: 在节点(node)标签的末尾加上’ / ‘斜杠是重要的,并且也容易被忘记。’ / ’ 表明:这里不会再有”</node>“出现,并且node元素定义完成。
XML解析器非常严格,如果你忘记了加’ / ‘,你要对这样的错误做好准备:

    Invalid roslaunch XML syntax: mismatched tag

你也可以写成显式关闭标签的形式:

 <node 
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值