Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114501
  • 博文数量: 61
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 261
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-08 11:29
文章分类

全部博文(61)

文章存档

2016年(9)

2015年(36)

2014年(16)

我的朋友

分类: 嵌入式

2015-04-15 18:05:00

PS:终于决定发一篇轻水的文,参见百科自己翻译的,因为是意译的,所以可能会有不准确。共同讨论吧

 tag

标签是所有ROS控制文件(roslaunch)的根元素。它的根本目的是扮演一个其他元素的容器。

1.属性

deprecated="弃用的消息"

警告用户ROS控制文件已经弃用

2.元素

控制一个节点

给参数服务器设置一个参数

声明一个名字重映射

向用户声明一个控制机

用一个ROS参数文件给控制台设置ROS参数

包括的其他ROS控制文件

给控制节点指明环境变量

控制一个测试节点

声明一个变量

封闭组元素来共享命名空间或重映射

原文自:http://wiki.ros.org/roslaunch/XML/launch

 

ROSlaunch/XML

Tips:XML可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

 

本教程介绍在roslaunch.launch files中使用XML的格式。本教程和roslaunch有大大的关联,所以,如果你没有看上文的roslaunch教程,请先看上面的*^_^*

1.求值次序(What the heck!这个词真不知道怎么翻更加准确了,原文是Evaluation order  :p)

roslaunch的求值XML文件是单次执行的。包含进程的深度优先算法。标签被连续求值然后然后使用最后的设置。因此,如果参数有复杂的设置,将只使用最后一次的参数设置值。

依赖于覆盖行为是非常不稳定的方法。因此无法保证最后一次覆盖值是正确的(栗子:如果一个头文件中的参数字改变了)。因此推荐执行覆盖行为时使用$(arg)/来设置。

2.替换参数substitution args

Roslaunch标签属性可以用来替代参数,以便于roslaunch能够优先解决控制中的节点。当前支持替换的参数是:

$(env ENVIRONMENT_VARIABLE)

· 从当前环境替换一个变量的值。如果环境变量未设值set,launch就失败了。值将不能通过标签覆盖。

$(optenv ENVIRONMENT_VARIABLE) $(optenv ENVIRONMENT_VARIABLE default_value)

· 替换一个已设值的环境变量。如果环境变量未设置而有默认值设置,将使用默认值。如果没有默认值,将使用一个空串。默认值可以用空格分割多个单词。

· 栗子:

   

点击(此处)折叠或打开

  1. <param name="foo" value="$(optenv NUM_CPUS 1)" />

  2.   <param name="foo" value="$(optenv CONFIG_PATH /home/marvin/ros_workspace)" />

  3.   <param name="foo" value="$(optenv VARIABLE ros rocks)" />


$(find pkg)

· e.g. $(find rospy)/manifest.xml. 指定一个包依赖路径,文件系统的包路径将被内联取代。使用的相对路径来指定包便于不同平台的系统移植。方便本地系统文件的解析。

$(anon name)

· e.g. $(anon rviz-1). 据名生成匿名ID,命名本身是唯一标识符(念biao zhi fu):重复使用$(anon foo)会生成同样的匿名名称。这是使用命名属性去创建匿名节点,因为ROS要求节点命名的唯一性。

· 栗子:

点击(此处)折叠或打开

  1. <node name="$(anon foo)" pkg="rospy_tutorials" type="talker.py" />

  2.   <node name="$(anon foo)" pkg="rospy_tutorials" type="talker.py" />


这样会报错,因为有两个节点重名啦~_~

$(arg foo)

· $(arg foo) 会计算制定的标签值。所以在launch file中必须有对应的声明标签

· 栗子:

 

点击(此处)折叠或打开

  1. <param name="foo" value="$(arg my_foo)" />


· 将给分配foo 参数my_foo 变量。

· 另个栗子:

点击(此处)折叠或打开

  1. <node name="add_two_ints_server" pkg="beginner_tutorials" type="add_two_ints_server" />

  2. <node name="add_two_ints_client" pkg="beginner_tutorials" type="add_two_ints_client" args="$(arg a) $(arg b)" />


                                将用 同时控制服务器和客户端栗子,作为传参值a和b,工程控制结果可这样调用:

点击(此处)折叠或打开

  1. roslaunch beginner_tutorials launch_file.launch a:=1 b:=5



当前替换变量在本地机上处理。就是说,环境变量和ROS包会在你的当前环境中被设值set,即便是远程控制的进程。

3.ifunless属性

所有标签都可以用if和unless,包括根据求值的得到结果的标签。1为真,0为假,其他返回值错误。

· if=value (optional)

· if是计算值是否为真,包括标签和它的内容。

unless=value (optional)

· Unless 是计算值是否为真,包括标签和它的内容。

栗子:

  

4.Tag Reference

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

5.Example .launch XML 配置文件

NOTE: 依例, roslaunch XML files 会被命名为 extension .launch。栗子: example.launch.

5.1的小栗子^_^

下面这个栗子show了一个最小的控制配置脚本。 它控制了'rospy_tutorials' 包中的单一的talker”节点部分。这个节点会控制本地机使用ROS当前环境变量的配置。(尤其是. ROS_ROOT, 等...)。


点击(此处)折叠或打开

  1. <launch>

  2.   <node name="talker" pkg="rospy_tutorials" type="talker" />

  3. </launch>

5.2复杂些的栗子


点击(此处)折叠或打开

  1. <launch>

  2.   <!-- local machine already has a definition by default.

  3.        This tag overrides the default definition with

  4.        specific ROS_ROOT and ROS_PACKAGE_PATH values -->

  5.   <machine name="local_alt" address="localhost" default="true" ros-root="/u/user/ros/ros/" ros-package-path="/u/user/ros/ros-pkg" />

  6.   <!-- a basic listener node -->

  7.   <node name="listener-1" pkg="rospy_tutorials" type="listener" />

  8.   <!-- pass args to the listener node -->

  9.   <node name="listener-2" pkg="rospy_tutorials" type="listener" args="-foo arg2" />

  10.   <!-- a respawn-able listener node -->

  11.   <node name="listener-3" pkg="rospy_tutorials" type="listener" respawn="true" />

  12.   <!-- start listener node in the 'wg1' namespace -->

  13.   <node ns="wg1" name="listener-wg1" pkg="rospy_tutorials" type="listener" respawn="true" />

  14.   <!-- start a group of nodes in the 'wg2' namespace -->

  15.   <group ns="wg2">

  16.     <!-- remap applies to all future statements in this scope. -->

  17.     <remap from="chatter" to="hello"/>

  18.     <node pkg="rospy_tutorials" type="listener" name="listener" args="--test" respawn="true" />

  19.     <node pkg="rospy_tutorials" type="talker" name="talker">

  20.       <!-- set a private parameter for the node -->

  21.       <param name="talker_1_param" value="a value" />

  22.       <!-- nodes can have their own remap args -->

  23.       <remap from="chatter" to="hello-1"/>

  24.       <!-- you can set environment variables for a node -->

  25.       <env name="ENV_EXAMPLE" value="some value" />

  26.     </node>

  27.   </group>

  28. </launch>

5.3设置参数

也可以在参数服务器上设置参数啊。这些参数会在节点控制使用之前被存储在参数服务器上。

如果值是明确的,你可以忽略它的属性类型。支持的类型包括str,int,double,bool。你也可以指明文件内容来替代用文本文件的二进制文件属性。

栗子: 

 

点击(此处)折叠或打开

  1. <launch>

  2.   <param name="somestring1" value="bar" />

  3.   <!-- force to string instead of integer -->

  4.   <param name="somestring2" value="10" type="str" />

  5.  

  6.   <param name="someinteger1" value="1" type="int" />

  7.   <param name="someinteger2" value="2" />

  8.  

  9.   <param name="somefloat1" value="3.14159" type="double" />

  10.   <param name="somefloat2" value="3.0" />

  11.  

  12.   <!-- you can set parameters in child namespaces -->

  13.   <param name="wg/childparam" value="a child namespace parameter" />


  14.  

  15.   <!-- upload the contents of a file to the server -->

  16.   <param name="configfile" textfile="$(find roslaunch)/example.xml" />

  17.   <!-- upload the contents of a file as base64 binary to the server -->

  18.   <param name="binaryfile" binfile="$(find roslaunch)/example.xml" />




  19. </launch>


 

字幕君立志一个人就是一只字幕组

 

原文自:http://wiki.ros.org/roslaunch/XML

以上。
因为现在没有自己写工程,手头也之有少量可供参考的工程。根据这些,的总结规律是

参考类似HTML。
首先,
所有以为开始结束符。
Then,用Tag描述名字分组类型等基本信息。

后面看了程序有感悟了再加

阅读(4437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~