• ros中launch启动文件的使用方法


    launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master)

    launch文件中包含很多标签和属性

    *launch文件语法

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

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

            启动节点

            <node pkg="package-name"type="executable-name"name="node-name"/>

                                       * pkg: 节点所在的功能包名称

     <node>              * type:节点的可执行文件名称

            * name: 节点运行时的名称

            * output 、respawn、required 、ns 、args

    参数设置

    <paran>/

    <rosparam>

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

    <param name="output_frame"value="odom"/>

    *name:参数名

    *value:参数值

    加载参数文件中的多个参数

    <rosparam file="params.yaml" command="load" ns=  "params"/>

    <arg>
    launch文件内部的局部变量,仅限于launch文件使用
    <arg name="arg-name" default="arg-value"/>
    * name: 参数名
    * value: 参数值
    
    调用如下
    <param name="foo" value="$(arg arg-value"/>
    <node name="node" pkg="package"type="type" args="$(arg arg-name)"/>
    

     

    重映射

    标签<remap>
    重映射RoS计算图资源的命名
    <remap from="/turtlebot/cmd_vel"to="/cmd_vel"/>
    *from :原命名
    * to : 映射之后的命名
    

    嵌套

    <include>
    包含其他launch文件,类似C语言中的头文件包含
    <include file="$(dirname)/other.launch"/>
    *file :包含的其他launch文件路径
    

    我习惯的在src目录下创建对应的功能包,为了更好的管理代码空间

    $ cd ~/catkin_ws/src

    $ catkin_create_pkg  learning_launch

    下面介绍一些launch文件的应用例子

    例1:simple.launch

     1 <launch>
     2     <node pkg="learning_topic" type="person_subscriber" name="talk   er" output="screen" />
     3     <node pkg="learning_topic" type="person_publisher" name="liste   ner" output="screen" /> 
     4 </launch>
    

     这个launch文件比较简单,用一个根标签包含两个node标签,启动两个node节点,启动launch文件如下,观察到两个节点并行运行。而且不需要再去启动roscore,已经自动启动了。

     qqtsj � ~ � roslaunch learning_launch simple.launch 
    ... logging to /home/qqtsj/.ros/log/a8e85210-44bd-11ea-aa0f-9822efa1466f/roslaunch-qqtsj-Nitro-AN515-51-21388.log
    Checking log directory for disk usage. This may take awhile.
    Press Ctrl-C to interrupt
    Done checking log file disk usage. Usage is <1GB.
    
    started roslaunch server http://qqtsj-Nitro-AN515-51:35961/
    
    SUMMARY
    ========
    
    PARAMETERS
     * /rosdistro: melodic
     * /rosversion: 1.14.3
    
    NODES
      /
        listener (learning_topic/person_publisher)
        talker (learning_topic/person_subscriber)
    
    auto-starting new master
    process[master]: started with pid [21398]
    ROS_MASTER_URI=http://localhost:11311
    
    setting /run_id to a8e85210-44bd-11ea-aa0f-9822efa1466f
    process[rosout-1]: started with pid [21409]
    started core service [/rosout]
    process[talker-2]: started with pid [21412]
    process[listener-3]: started with pid [21414]
    [ INFO] [1580539196.883750317]: Publish Person Info: name:Tom  age:18  sex:1
    [ INFO] [1580539197.883984881]: Publish Person Info: name:Tom  age:18  sex:1
    [ INFO] [1580539197.884465911]: Subcribe Person Info: name:Tom  age:18  sex:1
    [ INFO] [1580539198.883864113]: Publish Person Info: name:Tom  age:18  sex:1
    [ INFO] [1580539198.884350887]: Subcribe Person Info: name:Tom  age:18  sex:1
    

     例2: turtlesim_parameter_config.launch

     1 <launch>                                                          
     2 
     3     <param name="/turtle_number"   value="2"/>
     4 
     5     <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_no   de">
     6         <param name="turtle_name1"   value="Tom"/>
     7         <param name="turtle_name2"   value="Jerry"/>
     8 
     9         <rosparam file="$(find learning_launch)/config/param.yaml"    command="load"/>
    10     </node>
    11 
    12     <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_te   leop_key" output="screen"/>
    13 
    14 </launch>
    15 
    16 
    

     这个launch文件用于参数设置

     qqtsj � ~ � roslaunch learning_launch turtlesim_parameter_config.launch 
    ... logging to /home/qqtsj/.ros/log/fffc0146-44c2-11ea-aa0f-9822efa1466f/roslaunch-qqtsj-Nitro-AN515-51-23633.log
    Checking log directory for disk usage. This may take awhile.
    Press Ctrl-C to interrupt
    Done checking log file disk usage. Usage is <1GB.
    
    started roslaunch server http://qqtsj-Nitro-AN515-51:36955/
    
    SUMMARY
    ========
    
    PARAMETERS
     * /rosdistro: melodic
     * /rosversion: 1.14.3
     * /turtle_number: 2
     * /turtlesim_node/A: 123
     * /turtlesim_node/B: hello
     * /turtlesim_node/group/C: 456
     * /turtlesim_node/group/D: hello
     * /turtlesim_node/turtle_name1: Tom                                 
     * /turtlesim_node/turtle_name2: Jerry                               
                                                                         
    NODES                                                                
      /                                                                  
        turtle_teleop_key (turtlesim/turtle_teleop_key)                  
        turtlesim_node (turtlesim/turtlesim_node)                        
    
    auto-starting new master
    process[master]: started with pid [23643]
    ROS_MASTER_URI=http://localhost:11311
    
    setting /run_id to fffc0146-44c2-11ea-aa0f-9822efa1466f
    process[rosout-1]: started with pid [23654]
    started core service [/rosout]
    process[turtlesim_node-2]: started with pid [23661]
    process[turtle_teleop_key-3]: started with pid [23662]
    Reading from keyboard
    ---------------------------
    Use arrow keys to move the turtle.
    
     qqtsj � ~ � rosparam list 
    /background_b
    /background_g
    /background_r
    /rosdistro
    /roslaunch/uris/host_qqtsj_nitro_an515_51__36955
    /rosversion
    /run_id
    /turtle_number
    /turtlesim_node/A
    /turtlesim_node/B
    /turtlesim_node/group/C
    /turtlesim_node/group/D
    /turtlesim_node/turtle_name1
    /turtlesim_node/turtle_name2
    

    例3:start_tf_demo_c++.launch

     1  <launch>                                                         
     2 
     3     <!-- Turtlesim Node-->
     4     <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
     5     <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" o   utput="screen"/>
     6 
     7     <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/tu   rtle1" name="turtle1_tf_broadcaster" />
     8     <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/tu   rtle2" name="turtle2_tf_broadcaster" />
     9 
    10     <node pkg="learning_tf" type="turtle_tf_listener" name="listen   er" />
    11 
    12   </launch>
    

     这个launch文件是上讲说的小海龟跟随实例,这里不需要开启5个终端,只需要运行对应的launch文件就可以了

     qqtsj � ~ � roslaunch learning_launch start_tf_demo_c++.launch 
    ... logging to /home/qqtsj/.ros/log/bb367d92-44cd-11ea-aa0f-9822efa1466f/roslaunch-qqtsj-Nitro-AN515-51-25949.log
    Checking log directory for disk usage. This may take awhile.
    Press Ctrl-C to interrupt
    Done checking log file disk usage. Usage is <1GB.
    
    started roslaunch server http://qqtsj-Nitro-AN515-51:39467/
    
    SUMMARY
    ========
    
    PARAMETERS
     * /rosdistro: melodic
     * /rosversion: 1.14.3
    
    NODES
      /
        listener (learning_tf/turtle_tf_listener)
        sim (turtlesim/turtlesim_node)
        teleop (turtlesim/turtle_teleop_key)
        turtle1_tf_broadcaster (learning_tf/turtle_tf_broadcaster)
        turtle2_tf_broadcaster (learning_tf/turtle_tf_broadcaster)
    
    auto-starting new master
    process[master]: started with pid [25959]
    ROS_MASTER_URI=http://localhost:11311
    
    setting /run_id to bb367d92-44cd-11ea-aa0f-9822efa1466f
    process[rosout-1]: started with pid [25970]
    started core service [/rosout]
    process[sim-2]: started with pid [25973]
    process[teleop-3]: started with pid [25977]
    process[turtle1_tf_broadcaster-4]: started with pid [25979]
    Reading from keyboard
    ---------------------------
    Use arrow keys to move the turtle.
    process[turtle2_tf_broadcaster-5]: started with pid [25981]
    process[listener-6]: started with pid [25987]
    

     

  • 相关阅读:
    javaScript 闭包
    Netty入门1之----认识Netty
    浅谈 @RequestParam 和@PathVariable
    分布式事务的解决方案
    java实现哈弗曼树和哈夫曼树压缩
    深入理解mysql的底层实现
    深入理解http协议的特点
    char和varchar的区别
    详解聚簇索引
    解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/12248966.html
Copyright © 2020-2023  润新知