16-Ros launch文件解读

launch文件是通过xml文件实现多节点的配置和启动,可自启动ros master等
鉴于本人水平有限,如哪位攻城狮网友发现本文存在的问题,烦请留言指正,谢谢!

launch文件语法

<launch>
    <node pkg="turtlesim" name="sim1" type="turtlesim_node"/>
    <node pkg="turtlesim" name="sim2" type="turtlesim_node"/>
</launch>

launch文件中的根元素采用标签定义

node节点用于启动节点

  • pkg:节点所在的功能包名称
  • type:节点的可知行文件名称
  • name:节点运行时的名称,会取代程序ros::init()中填充的节点名
  • output:节点的日志文件输出目录
  • respawn:是否在程序挂的时候重启节点
  • required:确定某个launch文件中,某个节点是否是必须启动的
  • ns:namespace,为每个节点设置命名空间,确保各节点之间不存在冲突
  • args:节点的输入参数

或者

设置ROS系统运行中存储在参数服务器中的参数

* name:参数名 * value:参数值

加载参数文件中多个参数:
<rosparam file="params.yaml command=“load” ns=“params”/>
将params.yaml的中参数加载进来,且设置此文件内部参数的名称空间是params

launch文件内部的局部变量,仅限于launch文件使用

  • name:参数名
  • value:参数值
    arg调用:

重映射ROS计算图资源的命名

  • from:原名称
  • to:映射之后的命名

重映射后原名称就不存在了

嵌套其他launch文件,类似C语言中的头文件包含

  • file:包含的其他launch文件的路径

参考

示例1

此示例会简单的启动learn_topic包中的person_sub和person_pub两个节点。

<launch>
        <node pkg="learn_topic" type="person_sub" name="listener" output="screen"/>
        <node pkg="learn_topic" type="person_pub" name="talker" output="screen"/>
</launch>

示例2

此示例设置了turtle_num参数,且设置其值为2
另外启动turtlesim_node节点,并在此节点下新增了turtle_name1和turtle_name2两个参数,并读取config/param.yaml文件,并加载其中的参数
之后启动turtle_teleop_key节点

<launch>
        <param name="turtle_number" value="2"/>
        <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
                <param name="turtle_name1" value="Tom"/>
                <param name="turtle_name2" value="Jerry"/>
                <rosparam file="$(find learn_launch)/config/param.yaml" command="load"/>
        </node>
        <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
</launch>

另外所要读取的pram.yaml文件如下.

A: 123
B: "hello"

group: 
  C: 456
  D: "world"

要注意yaml语法中每个":" 后都要跟一个空格.上面的yaml文件中group就是一个命名空间

需要注意在设置参数时,在包里和包外设置是有区别的。就如上面的turtles_number和turtle_name1两个参数.
主要区别就在于在包里设置的参数,在参数服务器存储时会增加其节点名作为前缀,以和外部的参数进行区分。

rosparam list
/rosdistro
/roslaunch/uris/host_msi__35331
/rosversion
/run_id
/turtle_number
/turtlesim_node/A
/turtlesim_node/B
/turtlesim_node/background_b
/turtlesim_node/background_g
/turtlesim_node/background_r
/turtlesim_node/group/C
/turtlesim_node/group/D
/turtlesim_node/turtle_name1
/turtlesim_node/turtle_name2

rosparam get /turtlesim_node/group/D
world

参数的命名是:节点+命名空间+参数名称等组成参数的名称,主要是为了保证参数不重名。

示例3

此示例就是之前的乌龟跟随示例的launch文件

<launch>
    <!-- Turtlesim node-->
    <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
    
    <node pkg="learn_tf" type="turtle_broadcaster" args="/turtle1" name="trutel1_tf_broadcaster"/>
    <node pkg="learn_tf" type="turtle_broadcaster" args="/turtle2" name="trutel2_tf_broadcaster"/>
    
    <node pkg="learn_tf" type="turtle_listenrer" name="listener"/>
    
    
</launch>

示例4

此示例主要是介绍include和remap的使用

<launch>
    <include file="$(find learn_launch)/launch/simple.launch" />
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
        <remap from="/turtle1/cmd_vel" to="cmd_vel" />
    </node>
</launch>

启动此示例后可以发现,/turtle1/cmd_vel已经找不到了取而代之的是/cmd_vel

rostopic list 
/cmd_vel
/person_info
/rosout
/rosout_agg
/turtle1/color_sensor
/turtle1/pose

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值