当前位置:   article > 正文

ROS 笔记(10)— launch 文件启动_ros节点初始化延时

ros节点初始化延时

1. 背景

一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?

官方给出的优化策略是使用 launch 文件(通过 xml 文件实现多节点的配置和启动),可以一次性启动多个 ROS 节点,并且可以自动启动 ROS Master

2. 实现

2.1 创建功能包

$ catkin_create_pkg launch 
Created file launch/package.xml
Created file launch/CMakeLists.txt
Successfully created files in /home/wohu/project/ros/ros_demo/src/launch. Please adjust the values in package.xml.
  • 1
  • 2
  • 3
  • 4

2.2 添加 launch 文件

launchlaunch.yaml 文件内容

<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>
  • 1
  • 2
  • 3
  • 4

2.3 运行

$ roslaunch launch  launch.yaml 
... logging to /home/wohu/.ros/log/e021148a-f125-11ec-92ca-00e070ce7d11/roslaunch-wohu-pc-17490.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://wohu-pc:35733/

SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.13

NODES
  /
    key1 (turtlesim/turtle_teleop_key)
    t1 (turtlesim/turtlesim_node)

auto-starting new master
process[master]: started with pid [17500]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to e021148a-f125-11ec-92ca-00e070ce7d11
process[rosout-1]: started with pid [17512]
started core service [/rosout]
process[t1-2]: started with pid [17516]
process[key1-3]: started with pid [17520]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

3. launch 文件语法

语法

3.1 launch 标签

<launch> 标签是所有 launch 文件的根标签,充当其他标签的容器,所有其它标签都是 launch 的子级。

3.2 node 标签

<node> 标签用于指定 ROS 节点,是最常见的标签,需要注意的是: roslaunch 命令不能保证按照 node 的声明顺序来启动节点(节点的启动是多进程的)。

属性如下:

  • pkg=“包名”

    节点所属的包

  • type=“nodeType”

    节点类型(与之相同名称的可执行文件)

  • name=“nodeName”

    节点名称(在 ROS 网络拓扑中节点的名称)

  • args=“xxx xxx xxx” (可选)

    将参数传递给节点

  • machine=“机器名”

    在指定机器上启动节点

  • respawn=“true | false” (可选)

    如果节点退出,是否自动重启

  • respawn_delay=" N" (可选)

    如果 respawn 为 true, 那么延迟 N 秒后启动节点

  • required=“true | false” (可选)

    该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch

  • ns=“xxx” (可选)

    在指定命名空间 xxx 中启动节点

  • clear_params=“true | false” (可选)

    在启动前,删除节点的私有空间的所有参数

  • output=“log | screen” (可选)

    日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log

子级标签

  • env 环境变量设置

  • remap 重映射节点名称

  • rosparam 参数设置

  • param 参数设置

3.3 include 标签

include
include 标签用于将另一个 xml 格式的 launch 文件导入到当前文件

属性

  • file=“$(find 包名)/xxx/xxx.launch”

    要包含的文件路径

  • ns=“xxx” (可选)

    在指定命名空间导入文件

子级标签

  • env 环境变量设置

  • arg 将参数传递给被包含的文件

3.4 remap 标签

remap

用于话题重命名

  • from=“xxx”
    原始话题名称

  • to=“yyy”
    目标名称

rrmap

3.5 param 标签

param
<param> 标签主要用于在参数服务器上设置参数,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在 <node> 标签中时,相当于私有命名空间。

属性

  • name=“命名空间/参数名”

    参数名称,可以包含命名空间

  • value=“xxx” (可选)

    定义参数值,如果此处省略,必须指定外部文件作为参数源

  • type=“str | int | double | bool | yaml” (可选)

    指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:

    如果包含 ‘.’ 的数字解析未浮点型,否则为整型
    “true” 和 “false” 是 bool 值(不区分大小写)
    其他是字符串

paaaema

3.6 rosparam 标签

<rosparam> 标签可以从YAML 文件导入参数,或将参数导出到 YAML 文件,也可以用来删除参数,<rosparam> 标签在 <node> 标签中时被视为私有。

属性

  • command=“load | dump | delete” (可选,默认 load)

    加载、导出或删除参数

  • file=“$(find xxxxx)/xxx/yyy…”

    加载或导出到的 yaml 文件

  • param=“参数名称”

  • ns=“命名空间” (可选)

3.7 group 标签

<group> 标签可以对节点分组,具有 ns 属性,可以让节点归属某个命名空间

属性

  • ns=“名称空间” (可选)

  • clear_params=“true | false” (可选)

    启动前,是否删除组名称空间的所有参数(慎用…此功能危险)

子级标签

除了launch 标签外的其他标签
  • 1

3.8 arg 标签

args
<arg> 标签是用于动态传参,类似于函数的参数,可以增强 launch 文件的灵活性。

属性

  • name=“参数名称”

  • default=“默认值” (可选)

  • value=“数值” (可选)

    不可以与 default 并存

  • doc=“描述”

    参数说明

示例:

  • launch文件传参语法实现,hello.lcaunch
<launch>
    <arg name="xxx" />
    <param name="param" value="$(arg xxx)" />
</launch>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 命令行调用launch传参
roslaunch hello.launch xxx:=
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/555444
推荐阅读
相关标签
  

闽ICP备14008679号