【ROS学习】launch文件的使用

我们都知道在使用ROS时,启动一个节点我们可以使用rosrun启动一个节点!但是如果要启动多个节点呢?是不是得一个个都得启动!是不是感觉特别麻烦和累赘!don't worry!ROS已经帮我们考虑好了!那就是launch 文件,我们可以在launch文件编写多个node节点,然后只需启动launch文件,就可以实现一键启动!

目录

一、launch文件快速使用

二、launch文件一些配置

1、launch根标签设置

2、launch的node标签

3、launch文件的include标签(常用)

4、launch文件的remap标签(实用)

5、launch文件的param标签

6、launch文件的rosparam

①导入参数

②导出参数

③删除参数(用的少)

7、launch文件的group标签

8、launch文件的arg标签 


一、launch文件快速使用

我们以turtlesim为例进行编写launch文件!

我们如果要启动一个turtle节点,如下:

rosrun turtlesim turtlesim_node 

启动键盘节点,如下:

rosrun turtlesim turtle_teleop_key

需要两步!而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>

node pkg:功能包名

type:节点名

name:自定义名称

output:输出到屏幕

运行只需:

roslaunch launch_learning start_turtle.launch 

launch_learning:功能包名     

start_turtle.launch:launch文件名           

 注:启动launch文件就不需要启动roscore了!

二、launch文件一些配置

1、launch根标签设置

当我们的launch文件已经弃用或者过时,可以添加备注,让其他使用者知道弃用情况!

<launch deprecated = "该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>

在launch根标签加入 deprecated="该launch文件已经过时,建议不使用"

 2、launch的node标签

①属性

  • pkg:功能包名(常用)
  • type:node节点名(常用)
  • name:自定义节点名(常用)
  • args:参数(将参数传递给节点)
  • respawn:如果节点退出,是否自动重启(true/false)<这个在后续的激光雷达启动时十分有用,若异常断开,可以自动重连>(实用)
  • respawn_delay="N"(若respawn为true,那么延迟N秒后启动节点)

  •  required:(true/false)若为true,如果该节点退出,将结束整个roslaunch

  •  ns="xxx" 添加命名空间namespace(目的是防止重名)

 

3、launch文件的include标签(常用)

我们都知道,不可能把所以launch代码都放在一块,显得十分臃肿,因此可以采用include标签进行代码复用!

  • file="$(find 功能包名)/xxx/xxx.launch"
<launch>
    <include file="$(find launch_learning)/launch/start_turtle.launch" />   
</launch>

4、launch文件的remap标签(实用)

我们可以看到下图,启动turtle节点和turtle的键盘控制节点,然后启动键盘控制节点,我们发现新启动的键盘控制节点并不能控制小乌龟,原因在于话题名称不对应,一个是/cmd_vel 另一个是/turtle1/cmd_vel ,如果想要新启动的键盘控制节点控制小乌龟移动,那就可以采用remap进行话题重命名!

<launch>
    <!-- 启动显示界面节点 -->
    <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>

 5、launch文件的param标签

  • <param name ="xxx" type="xx" value="xx" />
<launch>
    <param name="param_A" type="int" value="10"/>
    <!-- 启动显示界面节点 -->
    <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" >
        <param name="param_B" type="double" value="3.1415"/>
    </node>
    <!-- 启动键盘控制节点 -->
    <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen"/>
</launch>

param放置的外置的区别是后者添加了命名空间

 

 6、launch文件的rosparam

<rosparam>标签可以从yaml文件中导入参数,或者将参数导出到yaml文件

①导入参数

有点像param标签,但是区别在于rosparam可以导入yaml文件一次性导入参数!

<launch>
    <rosparam command="load" file="$(find launch_learning)/launch/params.yaml" />
    <!-- 启动显示界面节点 -->
    <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" >
        <rosparam command="load" file="$(find launch_learning)/launch/params.yaml" />
    </node>
    <!-- 启动键盘控制节点 -->
    <node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen"/>
</launch>

 

②导出参数

<rosparam command="dump" file="$(find launch_learning)/launch/params_out.yaml" />

 ③删除参数(用的少)

<rosparam command="delete" param="bg_B" />

7、launch文件的group标签

我们都知道如果启动两个相同的节点,后一个节点会把前一个节点干掉!但如何两个都启动呢!那就需要使用group这个标签了!

<launch>
    <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>

我们可以发现启动了两个小乌龟界面,话题也更新了两个不一样的命名空间的话题!这样就可以两个相同的节点同时启动了!

 8、launch文件的arg标签 

<launch>
    <arg name="car_length" default="0.55" />
    <arg name="car_width" default="0.6" />
    <arg name="car_height" default="0.3" />

    <param name="A" value="$(arg car_length)"/>
    <param name="B" value="$(arg car_width)"/>
    <param name="C" value="$(arg car_height)"/>
</launch>

如果在启动launch文件没有设置参数的话,就默认使用default的参数值

 也可以在启动launch文件时设置参数,如下:

roslaunch launch_learning arg.launch car_length:=0.9 car_width:=0.1 car_height:=0.99

 

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值