实例介绍
ROS launch文件编写说明
oslaunch relative info 2. Roslaunch/XML 1.计算次序 relaunch与XML文件单一传递。 include是按照深度优先遍历的顺序处理。标答tag进行串行处理并且最 后的设置有效。因此,若一个参数被多次设置,最后指定的值将被使用 依靠重写覆盖的行为是不可取的。因为没有谁能保证重写是正确的(如, include文件中参数名改变了)。 相反,比较推荐的是使用s(arg)/<arg>设置来进行重写行为 2.替代参数( substitution args:置换符) Roslaunch tag属性可使用置换符,这要在启动节点之前解决。日前支持的置换参数如下 1). S(env NVIRONMENT VARIABLE 替代当前的环境变量的值。如果环境变量没有设置,启动将失败。该值不能由<εnv>标签重写 2).$(optenv ENVIRONMENT VARIABLE)$(optenv ENVIRONMENT VARIABLE default value) 如果设置了,则替代一个环境变量值。如果默认值彐c£ ault valu提供了,环境变量没有设置时将 便用默认值。如果没有默认值,将使用空字符串。 default value可以是用空格分廾的多个单词。例子 <param name=foo" value=s(optenv NUM CLUS 1)"/> param name="foo value="f(optenv CONFIG PATH /home /wsh/ros workspace)"/> <param name=fco" value=f(optenv VARIABLE ros rocks!"/> 3).5(find pkg) eg$( find ropy)/ manifest,xm1.指定包约框对路径。文件系统到包目录的路径将被内联的替 换。由于硬件编码抑勹了启动配置的可移植性,我们鼓励使用包相对路径。本地文件系统公约的前后削减问题 得到解决( Forward and backwards slashes will be resolved to the local filesystem convention.) 4). $(anon name e.g.s( anon viz-1)产牛基于名称的匿名工D。名字本身是一个独特约标识符:不同的 { anon foo)用法将创建相同的"匿名〃的名宇。主要用于"节点名称〃属性中以创建匿名节点。ROS要 求每个节点都有唯的名宇。例如: <node name="s(anon foo)" pkg="rospy tutorials" type="talker. py"/> <node name="s(anon foo) pkg=ropy tutorials" type="talker. py /> 如果两个节点有一样的名字将会发生错误。 5).s(arg fco) s( arg ICo)计算山<arg标签指定的值。在声明arg的同一启动文件中必须有对应的<arg标签。 例如 param rame=foo" value="s(arg my foo)"/> 将指定m和0到0参数 另一个例子: <nodle nare-adld tvro iats server pkg-beginner tutorials Lype="add Lwo ir Ls server"/> Knode narre=add two ints client" pkg=beginner tutorials type="add two irts client args=s(arg a) s(arg b)"/> 将会从< add two ints>例子中启动 server和 client,作为参数值a和传递。产生的启动项目能用如下语 第3页共 oslaunch relative info 句调用: roslaunch beginner tutorials launch file, launch a:=1 b:=5 置换参数目前在本地札器上已经解决。换句话说,坏境变量和ROS包的路径能在当前的环境中设 置,甚至远程启动的过程也可以 3.if和 unless属性 所有标签tag都支持if和 unless属性(基于计算的值包含或者排除一个tag)。””和“me”是值。"0” 和“alse”假值。其亡值是错的 if=value (optional) 如果va1ue值为true,包括标签和内容 unless=value (optional) 除非va1ue为真,包含标签和内容 例子: <group if="s(arg foo)"> <!-- stuff that will only be evaLuated if foo is true </group> <param name=foc value="bar" unless="siarg foo)"/> 4.相关标签 <launch <node <machine nclude <remap param <rosparam> <group><tests 5.例子 launch XML配置文件 注:按照惯例, roslaunch XmL文件的扩晨名为 aunch,如 example. launch 5.1最小例子( Minimal Example) 下面的示例是一个最小的启动配置脚本。它启动了一个节息 talker,位" raspy tutorial”包中。这个节点在本 地机使用当前配置的RS环境启动(如 ros root)ε <launch> <ncde name="talker" pkg=rospy tutorials" type="talker"/> </launch> 52一个稍微复杂的例子 <launch> <!-- local machine already has a definition by default This tag overrides the default definition with specific Ros ROCt and RoS PACKAGE PATH values -- <machine name=local alt address=localhost default=true ros root=/u/user/ros/ros/ ros-package-path="//user/ros/ros-pkg"/> <I-- a basic listener node -> <nade name=l isterer-1 pkg=raspy tutorials" type=listener/> <! -- pass args to the listener node -- <node name-listerer-2 pkg-Wrospy tutorials" type-listener args--foo arg2/> <!-- a respawn-ablc listener nodc -- 第4页共20 oslaunch relative info Y <node name=wlistener-3pkq=ropy tutorials"type="listener spawn="true"/> <!--start listener ncde in the wgl namespace .nLode n1s=wgl"name=lis" pky=rosy LuLorials Lype=lisTener respawn=true"/> < - start a group of nodes in the wg2 namespace -- sgroup ns=wg2"> <I-- reman applies to all future statements in this scope.--> <remap from="chatter" tc=hello/> <node pkc-rospy tutorials type-listener name-listener args--- tes- respawn <node pkgrospy tutorials typetalker name"talker> <!- set a private parameter for the node -- <param name=talker 1 param" value=a value"/> nodes can have their own remap arcs <remap from=chatter to=whello-1/> <<!- you call seL environment variables Lor d node--3> <env name=FNV F.XAMP F value=some value"/> </node> </group> </launch> 53设置参数 也可以在参数服务器上设置参数。在节点启动之前,这些参数被存储在服务器上。如果值是明确的,可 以省略type类型性。支持的类型是str;int, double bco1。也可以不使用 textfi1e或 binfile属性来 指定一个文件日录。 例如: <launch> "param name="somestring 1" value="bar"/> :- force to string instead of integer <param name="sonestring2 value="10 type=str/> <param name="someitegerl" value=l type=int"/> <param name="somei tager2. valle=2. / <param namc-sommcfloatl" valuc=3.14159" typc="doublc"/> param name="somcfloat2" valuc="3.0"/> you can set parameters in child namespaces--> <param name="wg/childparam" value="a child namespace parameter/> !-- upload the contents of a file to the server -- <param name"configfile" textfile="s(find roslaunch)/example. xml"/> <!--apload the contents of a file as hase64 binary to the server--> <param name="hinaryfile" hinfile="s(fi nd roslaunch)/example xm1/> </launch> 第5页共20 oslaunch relative info 3. Roslaunch/XMlflaunch < aunch>标签 <1anch>tag是所有 relaunch文件的根元素.它的唯一目的是作为其他元素的容器 1.属性 deprecated=deprecation message' ROS11:警告用户 relaunch文件不宜使用 2.元素 <node> 启动一个节点 param. 设置参数服务器上的参数 -Remap 声明一个名称的映射 < machine>声明启动要使用的机器 <rosparam 使用 rosparam文件设置启动要用的RoS参数 <include> 包含 relaunch文件 制定启动节点的环境变量 <test 启动一个测试节点 see mostest) 声明参数 group 共享一个命名空间或映射的封闭的素组 第6页共20 oslaunch relative info 4. Roslaunch/XMl/ node 1.<node>标签 <nde>枟签指定你想启动的节点。这是r。 launch标签中最常见的标签,支持最重要的特性: bringing up and taking down nodes rcs1 aunch不提供节点开始的顺序保证。这是特意的:没有办法知道哪个节点完全初始化了,所以 启动代码必须在启动顺序上鲁棒性比较强。 roslaunch教程页包含了一些如何充分利用<node>标签(如配置一个在GDB中启动的节点)的例 子 1.1例子 <node narre-listenerl pkg-rospy tutorials" type=listener. py args= test respawn-"true"/> 使用命令行参数--test包 rosy tutoria-s生成的可执行文件1 listener,Py来启动 1 listener1n芍点。如果节点死了,自动重新加载 <node nare=barl" pkg=too pkg" type=bar" args="s(tind baz pkg)/resources/map pgm"/> 从「opkg包中启动bar(障碍)节点这个例子使用了替代参数来方便的的传递 baz pkg/resources/map pgm 1.2属性 Pkg=" mypackage"节点的包 ype=nodet ype 节点类型。必须有相应的同名的可执行文件 name-"nodename 节点名称.注:名字不能包含命名空间,使用ns属性代替 args="arg1drg2arg3w{ OpIOLd丿传递到节点的参数 machine=" machine-name"( optiona1)启动节点的指定机器 respawn=true(optional) 如果节点退出,自动重启 respawn delay=30(optional, default 0) Ros indigo 的新特性 如果重启是true,在检测到节点失败之后,试图重启之前,等待 respawn_delay秒。 required="true"(optional) ROS0.10:如果节点死掉了,杀死掉仝部的 relaunch. ns="foo"(optional) 在Yo命夕空间开启节点。 clear params="tr1e|alse"( ortona1)在启动之前,删除节点私有命名空间的所有参数 output=loc screen"(optional) 如果是 screen,节点中的 stdout/stderr发送到屏幕:如果是log',将发送 stdout/stderr到 PROS HOME/og中的log文件。默认的是log。 cwd="ROS HOME node(optional) 如果是node,节点的工作目录将发送到和可扶行的节点相同的目录。在 C Turtle中,默认的是 ROS HOME。在 Box Turtle(ROS10.x),默认的是 rOS-root ros-root'在 C Turtle中不能使用 launch-prefix-prefix arguments"(optional) 第7页共20 oslaunch relative info Command/arguments预先放在节点的 launch参数的前端。这是一个强大的功能,使您能 够使能gdb, valgrind, xterm,nice,或其他方便的工具。请看 How to roslaunch nodes in Valgrind or GDB的例子。 13元素 你可以在<node>标签中,看到下列ⅪML标签: 打v remap- rosparam← paran 5. Roslaunch/XML/param 1.< paran>标签 parain>标签定义了在参数服务器上设置的参数。您可以指定一个 textfi1e, infi1e或者 command属性去设置一个参数的值。< param>标答可以放在<node>标答中,在这种情况下,参数被当 成了私有参数。 你也可以在< parain>标签中使用~ parain语法( (see ROS names)设置一组节点的私有参数。声明的参数 会被设置为在同一范围内之后的<node>标签中的局部参数 1.1属性 name="namespace/name 参数名。参数名中可以包含命名空间,但指定的全局名称应该避免。 value=value(optiona 1) 定义了参数的值。如果ub1 e booI"( opti ona7) 指定参数的类型。如果你不指定类型, roslaunch会自动确定类型。基本的规则如下: 带省略该属性,则必须指定 binfile, text.fi1e或c: Amman typa-" strict|do有!的数值是浮点数,否则是整数 令"tmue"和"alse"bool值(不区分大小写) ◇其他值是字符串 七cxfi1c-"与( find pIg-amcj/path/fi1c,txt"(opt⊥n=1) 该文件的内容以字符串形式读取和存储。该文件必须是本地可访问的,尽管强烈建议使用相对包 (ind)/ri1,Lx指定位置。 binfile="s(find okg-name)/path/ file"(optional) 该文件的内容以base64编码的XML-RPC二进制对象读取和存储。。该文件必须是本地可访问的, 尽管强烈建议使用相对包$(三ind)/fi19,txt指定位置。 command="s(find okg-name)/exe 's(find pkg-name)/arg txti(optional) 命令的输出以字符形式读取存储。强烈建议使用相对包5(find)/fi1c,txt指定文件的参数。把 文件参数用单引号括起来(由于XML疏数要求)。 1.2例子 param name=publish frequency type=double value=10.0/> 第8页共20 oslaunch relative info 6. Roslaunch /XML/ remap < remap>标签 < remap>标签允许你通过名称映射参数到ROs节点(通过更结构化的方式而不是直 接设置节点参数属性来启动的节点)。 < remap>标签适用于在其范围内随后的所有声明(< launch>,<node>o< group>) 了解如何映射解析了的名字,请看 Remapping Arguments和 Names.。 属性 from=" origina-name"你正映射的名称 tofnew-name 目标名称 例子 给定一个订阅" chatter"话题的node,但是你仅仅有一个发布" hello话题的节点。他们的类型是 一样的,你想把helo"话题的节点传送到想要" chatter话题的新节点,只需如下: <remap from=chatter to="hello/> 7. Roslaunch/XMl/machine < machine>标签 < machine>标签声明了运行ROS节点的机器。如果所有节点都在本地启动,则不需此参数。它主要用 于声明SSH和远程机器的RoS环境变量的设置,但你也以用它来声明本地机器的信息。 属性 name=machine-name 指定机器的名称。对应于<node>标签的 machine属性 address="ball, willowyaraye,CCIl 网络/主机地址 env-lcader="/opt/ ros/fuerte/env. sh" New in Fuerte 指定远程计算机上的环境文件。环境文件必须是一个设置了所有需要的环境变量的shl]脚本,然后在所 提供的参数执行exec。看一个文件例子, ROS Fuerte.版本的env,sh。对于env- loader的例子请看下面: detau1t-"txue|fa⊥se| never"(ρ tiana工) 将本机设为指定节点的默认机器。默认设冒仅适用于在同一范围内后面定义的节点。注意:如果没有默 认的机器,将使用本地机器。可以设置ce丘ault-" nEVEr"阻止对机器的选择,在这种情况下,机秦只能 显式分配 user=username"(optional) 登陆机器SSH用户名.如果不要求,可省咯。 password=passwhat"(strongly discouraged) SSH密码.强烈建议配置SSI关键字和SSH代理代替,这样可以使用证书登陆 timeout=10.0"(optionaly 在机器 relaunch之前的秒数(时问),认为机器启动矢败。默认是10秒。当使用这个设置来允许速度 较慢凶连接时,需要改变这个参数通常是一种(你整体的ROs图会有通讯上的问题)征兆 第9页共 oslaunch relative info 下面的属性在 ROS Electric和早期版本可用 ros-root=h/path/to/ros/root/(optional) 机器的 ROS ROC. ROS ROOT默认设置在本地坏境中 ros-package-path="/patr1: /path2.m (optiona I y 机器的 ROS PACKAGE PATH.默认设置是在本地环境中。 元素 只适用于 Elcctric和早期版本:可以在< machine>标签中使用下列的XML标签: <cnv> 在本机器上启动的所有进程中设置一个环境变量 例子 < machine>标签的语法在 ROS Electric,很不相同,请注意下面例子的版本提示s 基本原则( ROS Electric and Previous Only) 下面的例子主要是配置“节虑“ footalker”在另一个机器运行。除了重写将用到机器的R○SRoT和 ROS PACKAGE PATH,在远程机器上还设置了一个工 UCKY NUMBER环境变量 <Launch> <machine name="foo" address=nfoo-address ros-root="/u/user/ros/ros/ ros-package-path=/u/user/ros/ros-pkg user="someone <eny name=UCKY NUMBER value=13/> </lachine <node machine=foo" name=nfootalker pkg=test ros" type=talker. py/> </launch>> 便用 eny-loader基本原则( ROS Fuerte and later) New in fuerte 下面的例子主要是配置“节点“ footalker'在另一个机器运行。使用默认 env-loader文件( Fuerte版 本)。 LAunch> <machine name="foo address=hfoo-addressenv- loadcr-"/opt/ros/fuerte/cnv. sh" uscr-somcone"/> <node machine=foo name=hfootalker pkg=test ros" type=talker. py/> </launch> 这是一个cnv- loader脚本的例子。如果你想使用不同的环境配置,使用一个不同的setp文件替代 /=/ros/fuerte/setup. sh: #!/bin/sh /opt/rcs/ fuerte/setup. sh exeC"与@" 或者,如果你喜欢从 ross工作空间的源: #! /usr/bin/env bash source/lone/usernan e/path/Lo/workspace/seTup. basil exec se 第10页共20 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论