ROS学习笔记5 启动文件

利用启动文件一次配置和运行多个节点。通常使用“rosrun”命令只能一次启动一个节点且每个节点需要打开一个新的终端,使用启动文件则可以避免这个问题,为启动节点提供来更大的灵活性。
ROS 使用启动文件(launch file)的方法来实现同时启动多个节点。
使用启动文件的基本思想是将需要启动的节点信息在一个xml文件中罗列出来。执行启动文件的命令如下:
roslaunch   package-name   launch-file-name
rosrun 和roslaunch 完全不同,rosrun 每次只能启动一个节点,而roslaunch 可以同时启动多个节点。
在使用roslaunch 启动文件时,文件内的所有节点几乎是在同一时刻启动。因此,无法确切知道各个节点的启动顺序,但是设计良好的ROS节点是不关心各个节点的启动顺序的。在设计ROS 的节点时,应该使各个节点之间相互独立,不依赖于启动顺序。
可以使用roslaunch 请求详细信息,命令如下:
roslaunch  -v  package-name  launch-file-name

上述命令在调试时会有用。

创建启动文件
启动文件应该存储在一个功能包的子目录下,命名应该以.launch 为后缀。

启动文件由一个包含若干节点元素(node elements)的根元素(root element)组成。
根元素:
<launch>
    :
    :
    :
    </launch>

根元素由一对launch标签定义。所有的其它元素都应该在这两个标签之中。

启动节点:
启动文件的核心是一系列节点元素,每个节点元素都指向一个需要启动的元素,节点元素的形式为:

<node
    pkg = “package-name// 功能包的名称
    type = “executable-name// 功能包中编译形成的可执行文件的名称
    name = “node-name//节点名称
/>

其中,pkg 和 type 这两个参数和 rosrun 这个命令的参数一样。

name 属性给节点指派来名称,它将覆盖任何使用 ros::init 来赋予节点的名称。

请求复位
在所有节点启动之后,roslaunch会监视每一个节点,记录哪个节点是活跃的,对于每个节点,设置:

respawn = true

之后,当这个节点停止的时候,roslaunch 就会自动重新启动该节点。 如果在程序运行过程中发生软件崩溃或者硬件故障时,这个性质就会起到很大的作用。

必要节点
将一个节点声明为必要节点的命令如下:
required = “true”
当一个必要节点结束时,所有节点都会终止。因此,一般将重要的节点设置为必要节点。注意:对同一个节点不能同时设置 请求复位和必要节点。
为某个节点请求一个独立终端
使用roslaunch时,所有节点共享一个终端,因此,在有需要的时候,可以单独为需要独立终端的节点请求一个终端。在该节点的元素中使用:

launch-prefix = “command-prefix”
可以使用:
Launch-prefix = “xterm -e//完成上述功能。
xterm 的功能是打开一个简单终端窗口。参数-e 是指示在打开的窗口中执行剩余的命令。

这里的简单终端看上去和通常的终端外观有所不同。

在命名空间内启动节点
可以对一个节点设置默认命名空间,这个操作通常称为压入命名空间(pushing down),设置默认命名空间的方法是对节点配置空间(ns)属性。

    ns = “namespace”    
下面的例程展示如何通过为节点添加namespace 属性。
1.  <launch>
2.  # namespace sim1
3.  <node
4.  pkg = "turtlesim"
5.  type = "turtlesim_node"
6.  name = "turtlesim_node"
7.  ns = "sim1"
8.  />
9.  
10. <node
11. pkg = "turtlesim"
12. type = "turtle_teleop_key"
13. name = "teleop_key"
14. required = "true"
15. launch-prefix = "xterm -e"
16. ns = "sim1"
17. />
18. 
19. 
20. #namespace sim2
21. <node
22. pkg = "turtlesim"
23. type = "turtlesim_node"
24. name = "turtlesim_node"
25. ns = "sim2"
26. />
27. 
28. <node
29. pkg = "tutle"
30. type = "walk"
31. name = "velocity_publisher"
32. ns = "sim2"
33. />
34. </launch>

这个启动文件执行之后,就会出现两个小乌龟漫游界面,但是两个界面分属两个不同的命名空间,在命名空间sim1中,我们还添加了远程控制键界面,操作远程控制键界面,会发现该命令支只对一个小乌龟有控制功能,即只对在命名空间sim1中的小乌龟有控制作用。
同样地,在命名空间sim2中,有一个小乌龟漫游节点,还有一个用户自定义的乌龟位姿随机广播界面,这个乌龟位姿命令则只能控制在命名空间sim2中的小乌龟。

名称重映射
ROS节点支持重映射(remapping),重映射可以从更加精细的控制层面控制对所用节点名称的修改。重映射是基于替换的思想,每个重映射包含一个原始名称和一个新名称,每当节点使用重映射中的原始名称时,ROS客户端库就会将它默默地替换成新的名称。

创建重映射的方法如下:
可以使用命令行方法:
original-name := new-name
例如:
    rosrun turtlesim turtlesim_node  turtle1/pose := tim

还可以通过启动文件中设置:

<remap from = “original-nameto “new-name”/>

上面的remap元素可以放到启动文件的根目录下,也可以放在某个节点之内。放在节点内则只对该节点有效,放在根目录下则对启动文件中的所有节点有效。

启动文件的其它元素
可以在启动文件中包含其它的元素,如果在启动文件中包含其它启动文件的内容(包括所有的节点和参数),可以使用包含(include)元素:

<include file = “path-to-launch-file”>

可以使用find命令来包含路径。

    <include file = “$(find package-name)/launch-file-name”>

包含元素同样支持命名空间属性,可以将内容压入一个指定的命名空间中去:
<include file = “...” ns = “namespace”/>

启动参数
为了使启动文件便于配置,roslaunch还支持启动参数,启动参数为 args,其功能类似于可执行程序中的局部变量,其优点在于设置参数来描述节点在不同ROS会话中运行时可能需要改变的一小部分,从而避免代码重复。
声明参数的命令如下:

    <arg name = “arg-name”>

参数赋值:
启动文件中的每一个参数都要进行赋值,赋值有多种方法,可以使用命令行命令:
roslaunch package-name launch-file-name arg-name:=arg-value

创建组(creating groups)
组元素可以提供以下两种功能:
(1) 组可以把若干节点放入同一个命名空间内。

<group ns = “namespace”>
        ……
        </group>

组内的每个节点都从给定的默认命名空间内启动。

(2)组可以有条件地使能或者禁用一个节点
    <group if = “0 or 1”/>

        </group>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值