launch文件的编写

launch文件的编写及ROS配置文件的详细介绍

1 launch文件介绍及简单应用

1.1 launch文件介绍

根据ROS的架构和通信机制来看,ROS的各个功能的实现离不开节点(node)话题(topic)、参数(parameter)、服务(service)等构成的网络拓扑(rosgraph),其中每个j节点 都可以完成对应的功能。而一个机器人完整功能的实现,通常需要启动多个节点,如果一个节点一个节点的启动,比较麻烦。官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。通过launch文件以及roslaunch命令可以一次性启动多个节点,并且可以设置丰富的参数。
在官方给出的例程中,发部分功能的实现都是通过launch文件来实现的,我们也应该学会这种优化策略,通过launch文件来启动自己的功能包,高效的实现各种功能。

1.2 launch文件简单应用

1.对于launch文件的存放,我们可以在功能包下新建一个launch文件夹来专门存在launch文件,方便我们进行调用,下面进行实操
VSode在工作空间目录下打开,这里我们打开的是之前演示的VScode_ws工作空间,打开后在功能包下创建launch文件夹即可
launch文件夹创建
2.在launch文件夹下新建一个名为test01的*.launch文件
launch文件创建
3.在编写launch文件之前,我们先介绍一下launch文件的格式,launch文件本质是一个xml类型的文件,通过各种标签进行功能的实现,下面列举launch文件的基本格式及各标签的作用
launch文件的基本格式如下:

<launch>
    <node .../>
   	<param .../>
    <rosparam .../>
    <include .../>
    <remap .../>
    <arg .../>
    <group>  </group>
</launch>

launch

<!-- launch 标签是 launch 文件的根节点,它是其他子标签的容器,没有其他特殊功能。 -->
<launch>
	...
</launch>

node
node标签会指定一个准备运行的ROS节点,node标签是 launch 文件中最重要的标签,因为它实现了launch文件的基本功能,即同时启动多个ROS节点。

<node pkg="package_name" type="executable_node" name="node_name" args="$()" respawn="true" output="sceen">

pkg:节点所在功能包的名称package_name
type:节点类型是可执行文件(节点)的名称executable_node
name:节点运行时的名称node_name
args:传递命令行设置的参数;
respawn:是否自动重启,true表示如果节点未启动或异常关闭,则自动重启;false则表示不自动重启,默认值为false
output:是否将节点信息输出到屏幕,如果不设置该属性,则节点信息会被写入到日志文件,并不会显示到屏幕上。
param
在工程项目开发中,我们常常需要改变程序变量的一些参数,如果在程序中赋值,我们每次修改参数都需要重新编译程序,大大降低了开发效率,而param标签则可以实现传递参数的功能,它可以定义一个将要被设置到参数服务器的参数,它的参数值可以通过文本文件、二进制文件或命令等属性来设置。

<param name="param_name" type="param_type" value="param_value" />
<!-- param 标签可以嵌入到 node 标签中,以此来作为该 node 的私有参数 -->
<node>
	<param name="param_name" type="param_type" value="param_value" />
</node>

name:参数名称param_name
type:参数类型double,str,int,bool,yaml
value:需要设置的参数值param_value
rosparam
rosparam标签可以实现节点从参数服务器上加载(load)、导出(dump)和删除(delete)YAML文件

<!-- 加载package_name功能包下的example.yaml文件 -->
<rosparam command="load" file="$(find package_name)/example.yaml">
<!-- 导出example_out.yaml文件到package_name功能包下 -->
<rosparam command="dump" file="$(find package_name)/example_out.yaml" />
<!-- 删除参数 -->
<rosparam command="delete" param="xxx/param">

command:功能类型(load、dump、delete)
file:参数文件的路径
param:参数名称
include
include标签功能和编程语言中的include预处理类似,它可以导入其他launch文件到当前include标签所在的位置,实现launch文件复用。

<include file="$(find package_name)/launch_file_name">

remap
remap标签可以实现节点名称的重映射,每个remap标签包含一个原始名称和一个新名称,在系统运行后原始名称会被替换为新名称。

<remap from="turtle1/cmd_vel" to="/cmd_vel" />
<!-- remap 标签同样可以嵌入到 node 标签中,以此来作为该 node 的私有重映射 -->
<node>
	<remap from="turtle1/cmd_vel" to="/cmd_vel" />
</node>

arg
arg标签表示启动参数,该标签允许创建更多可重用和可配置的启动文件,其可以通过命令行、include 标签、定义在高级别的文件这 3 种方式配置值。同时注意:arg标签声明的参数不是全局的,只能在声明的单个启动文件中使用,可以当成函数的局部参数来理解。

<arg name="arg_name" default="arg_default" />
<arg name="arg_name" value="arg_value" />
<!-- 命令行传递的 arg 参数可以覆盖 default,但不能覆盖 value。 -->

注意argparam标签的区别:

函数作用
arg启动时的参数,只在launch文件中有意义
param运行时的参数,参数会存储在参数服务器中

group
group标签可以实现将一组配置应用到组内的所有节点,它也具有命名空间ns特点,可以将不同的节点放入不同的 namespace

<!-- 用法1 -->
<group ns="namespace_1">
    <node pkg="pkg_name1" .../>
    <node pkg="pkg_name2" .../>
    ...
</group>

<group ns="namespace_2">
    <node pkg="pkg_name3" .../>
    <node pkg="pkg_name4" .../>
    ...
</group>
<!-- 用法2 -->
<!-- if = value:value 为 true 则包含内部信息 -->
<group if="$(arg foo1)">
    <node pkg="pkg_name1" .../>
</group>

<!-- unless = value:value 为 false 则包含内部信息 -->
<group unless="$(arg foo2)">
    <node pkg="pkg_name2" .../>
</group>
<!--
	当 foo1 == true 时包含其标签内部
	当 foo2 == false 时包含其标签内部
-->

4.下面我们通过几个简单的实例,来演示一下上述函数可以实现的功能

  • 通过launch文件同时启动乌龟GUI节点和键盘控制节点,代码如下
<launch>
	<!-- 启动乌龟GUI节点 -->
	<node pkg="turtlesim" type="turtlesim_node" name="Turtle_Gui" output="screen" />
	<!-- 启动键盘控制节点 -->
	<node pkg="turtlesim" type="turtle_teleop_key"  name="Key_Control" output="screen" />
</launch>

launch文件编写
终端下launch文件运行格式如下,第一次运行记得使用指令更新环境变量source ./devel/setup.bash

roslaunch 功能包名 launch文件名字.launch

本教程在VScode终端下的指令为:

source ./devel/setup.bash
roslaunch demo01_helloworld_vs test01.launch

运行结果如下,我们可以看到,键盘可以成功控制乌龟运动。
launch文件运行
注意:launch文件启动之前,无需再执行roscore指令启动rosmaster,launch文件可以自启动rosmaster

**launch文件的编写,创作不易,希望大家多多点赞收藏,感谢大家!!!**

* * *
**参考资料:
[http://www.autolabor.com.cn/book/ROSTutorials/](http://www.autolabor.com.cn/book/ROSTutorials/)
[http://events.jianshu.io/p/0450e74cbe4a](http://events.jianshu.io/p/0450e74cbe4a)**

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 很高兴见到你!Launch文件是一种用来指示操作系统如何启动或者加载一些程序或服务的文件。它们通常是XML文件,拥有一个特定的结构,用来指定应用程序的启动参数,启动时环境变量,需要加载的插件等等。要编写launch文件,首先需要定义其XML根元素,然后定义每个服务的属性,最后定义各种参数。 ### 回答2: 编写launch文件是在ROS(机器人操作系统)中启动和配置节点(node)的一种方式。以下是编写launch文件的一般步骤: 1. 创建一个新的launch文件:可以使用命令`touch my_launch_file.launch`在终端中创建一个新的launch文件。该文件的后缀名必须是.launch。 2. 编写launch文件的头部:在launch文件中,首先需要写入XML头部。例如,可以添加以下行到文件的开头: ``` <?xml version="1.0" encoding="UTF-8"?> <launch> ``` 3. 添加节点(node):在launch文件中添加需要启动的节点。例如,如果要启动名为"talker"的节点,可以添加以下行: ``` <node name="talker" pkg="my_package" type="talker_node" output="screen"/> ``` 在上述行中,name属性指定节点的名称,pkg属性指定节点所在的软件包(package),type属性指定要执行的节点的命令,output属性可用于指定节点的输出方式。 4. 添加参数(parameters):可以在launch文件中指定节点的参数。例如,如果要为"talker"节点设置一个名为"message"的参数,可以添加以下行: ``` <param name="message" type="string" value="Hello, ROS!"/> ``` 在上述行中,name属性指定参数的名称,type属性指定参数的类型,value属性指定参数的初始值。 5. 添加其他配置:除了节点和参数外,还可以在launch文件中添加其他配置,如设置ROS主题(topic)的重映射、使用节点的命名空间等。这些配置的语法可以参考ROS的launch文件文档。 6. 编写launch文件的尾部:在launch文件的末尾,需要添加以下行来关闭XML标签: ``` </launch> ``` 7. 保存并退出:保存launch文件,并在终端中使用`roslaunch`命令运行该launch文件。例如,可以使用命令`roslaunch my_package my_launch_file.launch`来启动launch文件。 通过编写launch文件,可以方便地配置和启动ROS节点和参数,简化了 ROS 软件包的使用和管理。 ### 回答3: 编写launch文件是在ROS(机器人操作系统)中用于启动节点、参数配置和运行命令的重要步骤。下面是编写launch文件的基本步骤: 1. 创建一个新的launch文件。 首先,使用文本编辑器创建一个新的空文件,并将其保存为.launch格式。 2. 添加launch文件的头部信息。 在文件的第一行添加以下内容: ``` <launch> <!-- 这里添加你的launch文件的描述信息 --> ``` 3. 添加节点的启动命令。 在launch文件中,可以添加多个节点的启动命令。例如,假设你想启动一个名为"my_node"的节点: ``` <node pkg="包名" type="节点类型" name="节点名称" [其他参数] /> ``` 其中,"pkg"表示节点所属的软件包名,"type"表示节点的类型,"name"表示节点的名称,"[其他参数]"为可选项。 4. 添加参数配置。 在launch文件中,可以为启动的节点配置参数。例如,假设你想为节点"my_node"设置一个整数类型的参数: ``` <param name="参数名称" type="参数类型" value="参数值" /> ``` 其中,"name"表示参数名,"type"表示参数类型,"value"表示参数值。 5. 添加启动组件。 在launch文件中,可以创建启动组件来按照一定的顺序启动节点。例如,假设你想先启动节点"node1",然后启动节点"node2": ``` <group> <node pkg="包名" type="节点类型" name="节点1名称" [其他参数] /> <node pkg="包名" type="节点类型" name="节点2名称" [其他参数] /> </group> ``` 6. 添加关闭节点。 在launch文件中,可以定义一个关闭节点的命令。例如,假设你想定义一个在launch文件结束时关闭节点"my_node"的命令: ``` <node pkg="包名" type="节点类型" name="节点名称" [其他参数] respawn="false" output="screen" /> ``` 其中,"respawn"表示节点在退出后是否自动重启,"output"表示节点的输出方法。 7. 结束文件。 在文件的最后一行添加以下内容: ``` </launch> ``` 保存并关闭launch文件。 以上是编写launch文件的基本步骤。通过灵活运用这些步骤,可以根据具体需要编写出更为复杂和功能强大的launch文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羊羊羊ox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值