zoukankan      html  css  js  c++  java
  • launch文件

    https://www.jianshu.com/p/63a959bfbb96

    1、简介

    机器人是一个系统工程, 通常一个机器人运行操作时要开启很多个nodeROS为我们
    提供了一个命令能一次性启动master和多个node。 该命令是:

    $ roslaunch pkg_name file_name.launch

    roslaunch命令首先会自动进行检测系统的roscore有没有运行, 也即是确认节点管理器是否在
    运行状态中, 如果master没有启动, 那么roslaunch就会首先启动master, 然后再按照launch
    的规则执行。 launch文件里已经配置好了启动的规则。 所以 roslaunch 就像是一个启动工
    具, 能够一次性把多个节点按照我们预先的配置启动起来, 减少我们在终端中一条条输入指
    令的麻烦。

    2、写法与格式

    参考链接:http://wiki.ros.org/roslaunch/XML

    3、最基本格式

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

    <launch>
    <node name="talker" pkg="rospy_tutorials" type="talker" />
    </launch>

     也可以写成<node pkg=”..” type=”...” name=”...”></node>,如果该node中有其他tags,则必须使用这种形式。

    4、其他参数

    (1) 使用匿名(anonymous name)    name=”$(anon base_name)”    即用另一个名字代替原来的文件名

    (2) node 日志文件(log file)

    运行roslaunch和用rosrun运行单个节点的区别之一是,默认情况下,roslaunch运行的nodes的标准输出会重定向到log file,不显示在控制台。

    该日志文件的位置和名称如下:~/.ros/log/run_id/node_name-number-stdout.log

    其中,run_id是master启动后生成的特殊标识符,number是表示nodes数量的整数。如: teleop_key-3-stdout.log.

    (3) 输出到控制台

    用output属性: output=”screen”;用于控制该节点的信息是否输出到控制台

    (4) 要求重生(request respawning)

        开启所有nodes后,roslaunch会监视每个node,记录那些仍然活动的nodes。对于每个node,当其终止后,我们可以要求roslaunch重启该node,通过使用respawn属性。  respawn=”true”

    (5) 终止nodes

    required属性与respawn相反,不能同时对同一个node使用。 

    带有required=”true”  的节点 终止后,所有其他的nodes都会终止,并退出。这种命令有时很有用。比如,当一个很重要的node失败后,整个会话都会被扔掉,那些加上了respawn属性的nodes也会停止。

    (6) 在独立的窗口运行各nodes

    我们在各自的termin运行rosrun node_name;但是运行roslaunch时,所有的nodes共用一个相同的terminal,这对于那些需要从控制台输入的nodes很不方便。可以使用launch-prefix属性。

    launch-prefix=”command-prefix”    Eg:launch-prefix=”xterm -e”

    等价于 xterm -e rosrun turtlesim turtle_teleop_key

    xterm 命令表示新建一个terminal; -e参数告诉xterm执行剩下的命令行。

    当然,launch-prefix属性不仅仅限于xterm。它可用于调试(通过gdb或valgrind),或用于降低进程的执行顺序(通过nice).

     在namespace中执行nodes

    为node设置默认的namespace的常用方法——被称为“pushing down into a namespace”的进程,用于launch文件,并在其node element中指定ns属性。ns=”namespace”

    aunch文件中的node names是relative names。同一个launch文件中,允许不同namespace中出现相同的node names。Roslaunch要求node names必须是base names——不指定任何namespaces的relative names;如果node element中出现node name为global name,则会报错。

    重映射names(remapping names)

    重映射相当于换名,每次重映射需提供一个original name和一个new name。每次node使用它的original name, 

    ROS client library都会将其替换为remapping name。

    创建remapping name两种方法:

    1. 对于单个node,在命令行进行remapping(remap对象可以是node,topic等)。

       original-name:=new-name

    Eg: $ rosrun turtlesim turtlesim_node turtle1/pose:=tim

    2. 在launch文件内remap names,使用remap element

      <remap from=”original_name” to “new_name”>

    如果remap出现在launch文件开头,作为launch文件的子元素,则该remapping将被用于随后所有的nodes。如果remap作为某个node的子元素,则只用于该节点。

    Eg:<node pkg=”turtlesim” type=”turtlesim_node” name=”turtle1”>

         <remap from =”turtle1/pose” to “tim”>

        </node>

    注意:在ROS进行remapping之前,remaping的所有name,包括original和new names,都将被解析为global names。所以,remapping之后所有的名字通常都是relative names。

    5 其他的launch elements

    5.1 including其他文件

    为包含其他launch文件,包括这些launch文件的所有nodes和parameters,用include element。

    <include file=”path-to-launch-file”>

    这种情况下,file属性必须写出该launch文件的全部路径名称,显得很繁琐。因此,常用

    <include file=”$(find package_name)/launch_file_name”/>

    注意,执行该launch文件时,roslaunch会搜索该package下的所有子目录;因此,必须给出package_name。此外,include也支持ns属性,将它的内容放进指定的namespace。

    <include file=”...” ns=”namespace_name”/>

    5.2 Launch arguments

    为便于launch文件重构,roslaunch支持launch arguments,也成为arguments或者args,类似于局部变量。

    注意:尽管argument和parameter有时可互换,但他们在ROS中的意义完全不同。Parameters是ROS系统使用的数值,存在parameter server上,nodes可通过ros::param::get函数编程得到,用户可通过rosparam获取。与之不同,arguments仅在launch文件内部有意义,nodes不能直接获取它们的值。

    (1)声明argument

    <arg name=”arg_name”>

    (2)指定argument的值

    Launch文件中的每个argument都必须有指定值。赋值方法有好几种。

    第一种,在命令行赋值   $ roslaunch package_name launch_file_name arg-name:=arg_value

    第二种,在声明argument时赋值

    <arg name=”arg_name” default=”arg_name”/>

    <arg name=”arg_name” value=”arg_name”/>

    上面两行的区别在于,命令行参数可以覆盖default,但是不能重写value的值。

    (3)获取变量值

    一旦声明某个argument并赋值后,我们可以通过arg使用该argument.

    $(arg arg-name)

    如果该行出现,roslaunch将会用给定arg-name的值替换其左边的值。

    (4)将argument值传给included launch文件

    <include file=”path-to-file”>

    <arg name=”arg_name” value=”arg_value”/>

    ......

    </include>

    若在launch文件中,launch文件及其包含的launch文件出现出现相同的arguments,则需在launch文件及included launch文件中同时写:

    <arg name=”arg_name” value=”$(arg arg_name)”/>

    第一个arg_name表示indluded launch文件中的argument,第二个arg_name表示launch文件中的argument.其结果是指定的argument在launch文件及included launch文件中都有相同的值。

    5.3 创建groups

    Group element可以再大型的launch文件中将指定的nodes组织起来。它有两个用处:

    其一,group可以将几个nodes放进同一个namespace

    <group ns=”namespace”>

    <node pkg=”..” .../>

    <node pkg=”..” .../>

    ......

    </group>

    注意,如果grouped node已经有它自己的namespace,并且是relative name,那么该node的namespace是其relative name,并以group namespace为后缀。

    其二,group可以同时启动或者终止一组nodes。

    <group if=”0 or 1”>

    ......

    </group>

    如果该属性的值是1,一切正常;如果该属性的值为0,那么group内所有的nodes都不会运行。

    同理,除了if,还有unless。

    <group unless=”0 or 1”>

    ......

    </group>

    注意,这些属性的合法值只有0和1.

    另外,group element中只能使用ns,if,unless这三个属性。

  • 相关阅读:
    Windows Server 2003 DHCP迁移到2008R2的方法
    在Linux上安装Zabbix agent的方法
    在Windows上安装Zabbix agent的方法
    利用pscp程序实现Windows和Linux互传文件
    CentOS 7 LNMP环境搭建 Zabbix3.4
    2019-2020-2 20175105王鑫浩《网络对抗技术》Exp9 Web安全基础
    2019-2020-2 20175105王鑫浩《网络对抗技术》Exp8 Web基础
    2019-2020-2 20175105王鑫浩《网络对抗技术》Exp7 网络欺诈防范
    2019-2020-2 20175105王鑫浩《网络对抗技术》Exp6 MSF基础应用
    2019-2020-2 20175105王鑫浩《网络对抗技术》Exp5 信息搜集与漏洞扫描
  • 原文地址:https://www.cnblogs.com/long5683/p/9941548.html
Copyright © 2011-2022 走看看