【ROS】launch文件

概念:launch文件是一个XML格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。

作用:简化节点的配置与启动,提高ROS程序的启动效率。

1.在功能包下添加include文件夹,在文件夹内新建xxx.launch文件,编辑launch文件

<launch>
    <!--启动的节点-->
    <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" />
    <!--键盘控制节点-->
    <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
    
</launch>

2.调用launch文件

$roslaunch 功能包名 xxx.launch

注意:roslaunch命令执行launch文件时,首先会判断是否启动了roscore,如果启动了,则不再启动,否则,会自动调用roscore

---------------------------------------------------------------------------------------------------------------------------------

launch文件标签之launch

<launch>标签是所有alunch文件的根标签,充当其他标签的容器

1.属性

deprecated=“弃用声明”

告知用户当前launch文件已经弃用,运行可以正常运行,只是会多一行红色”弃用声明“

2.子级标签

所有其他标签都是launch的子级

<launch deprecated="此文件已经过时,不建议使用!">
    <!--启动的节点-->
    <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" />
    <!--键盘控制节点-->
    <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
    
</launch>

---------------------------------------------------------------------------------------------------------------------------------launch文件标签之node

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

1.属性

pkg=“包名”                节点所属的包

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

name="nodeName"                节点名称(在ROS网络拓扑中节点的名称)

args="xxx xxx xxx"(可选)                将参数传递给节点

machine="机器名"                在指定机器上启动节点

respawn="true | false"(可选)                如果节点退出,是否自动重启,true会自动重启

respawn_delay="N"(可选)                如果respawn为true,那么延迟N秒后启动节点

required="true | false"(可选)                该节点是否必须,如果为true,那么如果该节点退出,将杀死整个roslaunch

ns="xxx"(可选)                在指定命名空间xxx中启动节点

clear_params="true | false"(可选)                在启动前,删除节点的私有空间的所有参数

output="log | screen"(可选)                日志发送目标,可以设置为log日志文件,或screen屏幕默认是log

2.子级标签

env环境变量设置

remap重映射节点名称

rosparam参数设置

param参数设置

<launch deprecated="此文件已经过时,不建议使用!">
    <!--启动的节点-->
    <!-- respawn="true" 节点关闭后自动重启-->
    <!-- required="true" 节点退出后,关闭整个系统-->
    <!-- ns="hello" 设置节点的命名空间-->
    <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" />
    <!--键盘控制节点-->
    <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
    
</launch>

---------------------------------------------------------------------------------------------------------------------------------launch文件标签之include

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

1.属性

file="$(find 包名)/xxx/xxx.launch"                要包含的文件路径

ns="xxx”(可选)                在指定命名空间导入文件

2.子级标签

env环境变量设置

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

<!--需要复用start_turtle.launch-->
<launch>
    <!--包含-->
    <include file="$(find launch01_basic)/launch/start_turtle.launch" />
    <!--其他节点-->
</launch>

---------------------------------------------------------------------------------------------------------------------------------launch文件标签之remap

remap标签用于话题重命名

1.属性

from="xxx"                原始话题名称

to="yyy"                目标名称

<launch deprecated="此文件已经过时,不建议使用!">
    <!--启动的节点-->
    <!-- respawn="true" 节点关闭后自动重启-->
    <!-- required="true" 节点退出后,关闭整个系统-->
    <!-- ns="hello" 设置节点的命名空间-->
    <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" >
        <remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
    </node>
    <!--键盘控制节点-->
    <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
</launch>

重命名后可以使用如下命令来控制乌龟运动

$rosrun teleop_twist_keyboard teleop_twist_keyboard.py

如果显示没有此功能包,可以通过如下命令进行下载

sudo apt-get install ros-noetic-teleop-twist-keyboard

注意:其中的noetic需要替换成自己相应的ROS版本

---------------------------------------------------------------------------------------------------------------------------------launch文件标签之param

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

1.属性

name="命名空间/参数名"                参数名称,可以包含命名空间

value="xxx"(可选)                定义参数值,如果此处省略,必须指定外部文件作为参数源

type=" str | int | double | bool | yaml "(可选)                指定参数类型,如果未指定,roslaunch会尝试确定参数类型,规则如下:

        如果包含'.'的数字分析为浮点型,否则为整型;

        "true"和"false"是bool值(不区分大小写);

        其他是字符串;

<launch deprecated="此文件已经过时,不建议使用!">
    <!--启动的节点-->
    <!-- respawn="true" 节点关闭后自动重启-->
    <!-- required="true" 节点退出后,关闭整个系统-->
    <!-- ns="hello" 设置节点的命名空间-->
    <!--param使用:向参数服务器设置参数-->
    <!--格式1:launch下,node外-->
    <param name="param_A" type="int" value="100"/>
    
    <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" >
        <remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
        <!--格式2:node下-->
        <param name="param_B" type="double" value="3.14" />
    </node>
    <!--键盘控制节点-->
    <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
</launch>

---------------------------------------------------------------------------------------------------------------------------------launch文件标签之rosparam

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

1.属性

command=" load | dump | delete "(可选,默认load)                加载、导出或删除参数

file="$(find xxx)/xxx/yyy..."                加载或导出到的yaml文件

param="参数名称"

ns="命名空间"(可选)

新建YAML文件,YAML文件内容如下

<launch deprecated="此文件已经过时,不建议使用!">
    <!--启动的节点-->
    <!-- respawn="true" 节点关闭后自动重启-->
    <!-- required="true" 节点退出后,关闭整个系统-->
    <!-- ns="hello" 设置节点的命名空间-->
    <!--param使用:向参数服务器设置参数-->
    <!--格式1:launch下,node外-->
    <param name="param_A" type="int" value="100"/>

    <!--rosparam使用:操作参数服务器数据-->
    <!--格式1:launch下,node外-->
    <rosparam command="load" file="$(find launch01_basic)/launch/params.yaml" />
    
    <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" >
        <remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
        <!--格式2:node下-->
        <param name="param_B" type="double" value="3.14" />

        <!--格式2:node下-->
        <rosparam command="load" file="$(find launch01_basic)/launch/params.yaml" />
    </node>
    <!--键盘控制节点-->
    <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
</launch>
<launch>
    <!--导出参数-->
    <rosparam command="dump" file="$(find launch01_basic)/launch/params_out.yaml" />
    <!--删除参数-->
    <rosparam command="delete" param="bg_B" />
</launch>

注意:

        YAML文件中:和数字中间需要有空格

        <rosparam>如果与<node>在同一个launch文件中时,会先执行<rosparam>标签的内容。所以在导出时,会出现没有数据的现象。需要将<rosparam>单独放入一个launch文件,将其余launch文件运行结束后,再运行属于<rosparam>的launch文件

---------------------------------------------------------------------------------------------------------------------------------launch文件标签之group

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

1.属性

ns="命名空间"(可选)

clear_params=" true | false "(可选)                启动前,是否删除组名称空间的所有参数(慎用...此功能危险)

2.子级标签

除了launch标签外的其他标签

<launch>
    
    <!--启动两对乌龟GUI与键盘控制节点-->
    <group ns="first">
        <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" />
        <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
    </group>

    <group ns="second">
        <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" />
        <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
    </group>

</launch>

---------------------------------------------------------------------------------------------------------------------------------launch文件标签之arg

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

1.属性

name="参数名称"

default="默认值"(可选)

value="数值"(可选)                不可以于default并存

doc="描述"                参数说明

<launch>
    <!--需求:演示arg的使用,需要设置多个参数,这些参数使用的是同一个值(小车的长度),怎么设置?-->
    <!-- 
    <param name="A" value="0.5" />
    <param name="B" value="0.5" /> 
    -->

    <arg name="car_length" default="0.55" />
    <param name="A" value="$(arg car_length)" />
    <param name="B" value="$(arg car_length)" />
    <param name="C" value="$(arg car_length)" />

</launch>

注意:

        可以通过命令行直接修改数据,命令行$roslaunch 功能包名 launch文件文件名 arg名:=0.6,例如:$roslaunch launch01_basic arg.launch car_length:=0.6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值