admin管理员组

文章数量:1531304

2024年7月24日发(作者:)

roslaunchrelativeinfo

Roslaunch相关内容整理

tongzhuodenilove@

2

1.概述.........................................................................................................................................................................2

.3

nch/6

nch/7

nch/8

nch/9

nch/9

nch/11

nch/12

nch/12

nch/12

nch/14

nch/.15

.15

ckages元软件包.....................................................................................................................................18

18

nch/API使用............................................................................................................................................19

ingcoredumps获得核心转储.................................................................................................................20

1

页共

20

roslaunchrelativeinfo

Roslaunch

1.

概述

该roslaunch包中包含roslaunch工具,(用来读取roslaunch中.launch/XML文件格式)。也包含了各种

其他支持的工具来帮助你使用这些文件。许多ROS包都有"launchfiles",可以运行下面指令:

$roslaunchpackage_

这些启动文件通常启动提供一些聚合功能包的系列节点。了解更多有关的主要roslaunch工具和其他命令

行工具,请参阅:

roslaunchCommand-lineUsage

roslaunch使用XML文件描述应该运行的节点,参数的设置,以及其他启动一系列节点的属性。规范的

XML格式,请参见:

/XMLformat

roslaunch是为了适应ROS复杂的组合结构。了解roslaunch结构会使你更好的了解如何构建你的.launch

文件文件以及更好的调试远程和本地的启动。

roslaunchArchitecture

一个使用PythonAPI的简单例子,可以在这里找到:

roslaunch/APIUsage

roscore

roscore

是启动ROS系统核心的roslaunch的专业化工具。有关更多信息,请参见roscore文件。

Stability/Roadmap

启动文件语法本身是稳定的,并将尽一切努力来提供新功能的向后兼容性。

roslaunch代码的API很不稳定,不能直接使用。为了支持正在计划中的新功能,对可编程的API可能需

要做出大量的,不兼容的变化。

正计划的roslaunch有许多新的特点,包括在启动文件语法,用于启动文件更有效的GUI工具,互联网

API,单独或很多启动文件之间更好的协调等。

教程

1)Roslaunchtipsforlargeprojects

本教程介绍了写作的大项目roslaunch文件的一些提示。重点是如何构建启动文件以便它们可以在不同的

情况下尽可能的重用。我们将使用2dnav_pr2包作为一个案例来研究。

HowtoRoslaunchNodesinValgrindorGDB2)

调试roscppnodes时用roslaunch启动,你可能希望在调试程序如gdb或valgrind中启动那个节点,

这样就很简单。

2

页共

20

roslaunchrelativeinfo

nch/XML

1.计算次序

roslaunch与XML文件单一传递。include是按照深度优先遍历的顺序处理。标签tag进行串行处理并且最

后的设置有效。因此,若一个参数被多次设置,最后指定的值将被使用。

依靠重写覆盖的行为是不可取的。因为没有谁能保证重写是正确的(如,inckude文件中参数名改变了)。

相反,比较推荐的是使用

$(arg)

/

设置来进行重写行为

2.替代参数(substitutionargs:置换符)

Roslaunchtag属性可使用置换符,这要在启动节点之前解决。目前支持的置换参数如下:

1).$(envNVIRONMENT_VARIABLE)

替代当前的环境变量的值。如果环境变量没有设置,启动将失败。该值不能由标签重写。

2).$(optenvENVIRONMENT_VARIABLE)$(optenvENVIRONMENT_VARIABLE

default_value)

如果设置了,则替代一个环境变量值。如果默认值

default_value提供了,环境变量没有设置时将

使用

默认值。如果没有默认值,将使用空字符串。default_value可以是用空格分开的多个单词。

例子:

3).$(findpkg)

e.g.

$(findrospy)/

.

指定包的相对路径。文件系统到包目录的路径将被内联的替

换。由于硬件编码抑制了启动配置的可移植性,我们鼓励使用包相对路径。本地文件系统公约的前后削减问题

得到解决(

Forwardandbackwardsslasheswillberesolvedtothelocalfilesystemconvention.)

4).$(anonname)

e.g.$(anonrviz-1)产生基于名称的匿名ID。名字本身是一个独特的标识符:不同的

$(anonfoo)

用法将创建相同的

匿名

的名字。主要用于

节点名称

属性中以创建匿名节点。

ROS

求每个节点都有唯一的名字。例如:

如果两个节点有一样的名字将会发生错误。

5).$(argfoo)

$(argfoo)计算

标签指定的值。在声明arg的同一启动文件中必须有对应的

标签。

例如:

将指定my_foo到foo参数.

另一个例子:

type="add_two_ints_server"/>

type="add_two_ints_client"args="$(arga)$(argb)"/>

将会从例子中启动server和client,作为参数值a和传递。产生的启动项目能用如下语

3

页共

20

roslaunchrelativeinfo

句调用:

roslaunchbeginner_tutorialslaunch_a:=1b:=5

置换参数目前在本地机器上已经解决。换句话说,环境变量和ROS包的路径能在当前的环境中设

置,甚至远程启动的过程也可以。

3.if和unless属性

所有标签tags都支持if和unless属性

(基于计算的值包含或者排除一个tag)。”1”和“true”是值。”0”

和“false”假值。其它值是错的。

if=value(optional)

unless=value(optional)

如果value值为true,包括标签和内容。

除非value为真,包含标签和内容.

例子:

4.相关标签

.

例子

.launchXML

配置文件

注:按照惯例,roslaunchXML文件的扩展名为.launch,如。

5.1最小例子(MinimalExample)

下面的示例是一个最小的启动配置脚本。它启动了一个节点'talker',位“rospy_tutorials”包中。这个节点在本

地机使用当前配置的ROS环境启动(如ros_root)。

5.2一个稍微复杂的例子

root="/u/user/ros/ros/"ros-package-path="/u/user/ros/ros-pkg"/>

arg2"/>

4

页共

20

roslaunchrelativeinfo

respawn="true"/>

respawn="true"/>

test"respawn="true"/>

5.3设置参数

也可以在参数服务器上设置参数。在节点启动之前,这些参数被存储在服务器上。如果值是明确的,可

以省略type类型属性。支持的类型是str,int,double,bool。也可以不使用textfile或binfile属性来

指定一个文件目录。

例如:

textfile="$(findroslaunch)/"/>

ofafileasbase64binarytotheserver-->

binfile="$(findroslaunch)/"/>

5

页共

20

roslaunchrelativeinfo

nch/XML/launch

标签

tag是所有roslaunch文件的根元素.

它的唯一目的是作为其他元素的容器。

1.属性

deprecated="deprecationmessage"

ROS1.1:警告用户roslaunch文件不宜使用.

2.元素

启动一个节点.

设置参数服务器上的参数

声明一个名称的映射

声明启动要使用的机器.

使用rosparam文件设置启动要用的ROS参数

包含roslaunch文件.

制定启动节点的环境变量

启动一个测试节点seerostest).

声明参数

共享一个命名空间或映射的封闭的元素组

6

页共

20

roslaunchrelativeinfo

nch/XML/node

1.标签

标签指定你想启动的节点。这是

roslaunch

标签中最常见的标签,支持最重要的特性:

bringingupandtakingdownnodes.

roslaunch

不提供节点开始的顺序保证

这是特意的:没有办法知道哪个节点完全初始化了,所以

启动代码必须在启动顺序上鲁棒性比较强。

roslaunch教程页包含了一些如何充分利用标签(如配置一个在GDB中启动的节点)的例

子。

1.1例子

test"respawn="true"/>

使用命令行参数

--test包rospy_tutorials生成的可执行文件

来启动

"listener1"

节点

如果节点死了,自动重新加载。.

baz_pkg)/resources/"/>

从foo_pkg包中启动bar(障碍)节点.

这个例子使用了替代参数来方便的的传递

baz_pkg/resources/.

1.2属性

pkg="mypackage"

type="nodetype"

name="nodename"

节点的包.

节点类型。必须有相应的同名的可执行文件

节点名称.注:名字不能包含命名空间,使用ns属性代替.

传递到节点的参数.

启动节点的指定机器.

如果节点退出,自动重启

ROSindigo的新特性

args="arg1arg2arg3"(optional)

machine="machine-name"(optional)

respawn="true"(optional)

respawn_delay="30"(optional,default0)

如果重启是true,在检测到节点失败之后,试图重启之前,等待respawn_delay秒。

required="true"(optional)

ROS0.10:如果节点死掉了,杀死掉全部的roslaunch.

ns="foo"(optional)

clear_params="true|false"(optional)

output="log|screen"(optional)

如果是'screen',节点中的stdout/stderr发送到屏幕;如果是'log',将发送stdout/stderr到

$ROS_HOME/log中的log文件。默认的是'log。.

cwd="ROS_HOME|node"(optional)

如果是'node',节点的工作目录将发送到和可执行的节点相同的目录。在CTurtle中,默认的是

'ROS_HOME'。在BoxTurtle(ROS1.0.x),默认的是'ros-root'。'ros-root'在CTurtle中不能使用。

launch-prefix="prefixarguments"(optional)

在'foo'命名空间开启节点。

在启动之前,删除节点私有命名空间的所有参数

7

页共

20

roslaunchrelativeinfo

Command/arguments

预先放在节点的

launch

参数的前端。这是一个强大的功能,使您能

够使能gdb,valgrind,xterm,nice,或其他方便的工具。请看HowtoRoslaunchNodesin

ValgrindorGDB的例子。

1.3元素

你可以在

标签中,看到下列XML标签:

nch/XML/param

1.标签

标签定义了在参数服务器上设置的参数。您可以指定一个textfile,binfile或者

command属性去设置一个参数的值。标签可以放在标签中,在这种情况下,参数被当

成了私有参数。

你也可以在标签中使用~param语法(seeROSnames)设置一组节点的私有参数。声明的参数

会被设置为在同一范围内之后的标签中的局部参数。

1.1属性

name="namespace/name"

参数名。参数名中可以包含命名空间,但指定的全局名称应该避免。

定义了参数的值。如果

uble|bool"(optional)value="value"(optional)

指定参数的类型。如果你不指定类型,roslaunch会自动确定类型。基本的规则如下:

带省略该属性,则必须指定binfile,textfile或command。

type="str|int|do

有'.'的数值是浮点数,否则是整数

"true"和"false"bool值(不区分大小写).

其他值是字符串

textfile="$(findpkg-name)/path/"(optional)

该文件的内容以字符串形式读取和存储。该文件必须是本地可访问的,尽管强烈建议使用相对包

$(find)/

指定位置。

binfile="$(findpkg-name)/path/file"(optional)

该文件的内容以base64编码的XML-RPC二进制对象读取和存储。。该文件必须是本地可访问的,

尽管强烈建议使用相对包

$(find)/

指定位置。

command="$(findpkg-name)/exe'$(findpkg-name)/'"(optional)

命令的输出以字符串形式读取存储。强烈建议使用相对包

$(find)/

指定文件的参数。把

文件参数用单引号括起来(由于XML疏散要求)。

1.2例子

8

页共

20

roslaunchrelativeinfo

nch/XML/remap

标签

<

remap

>

标签允许你通过名称映射参数到

ROS

节点(通过更结构化的方式而不是直

接设置节点参数属性来启动的节点)。

标签适用于在其范围内随后的所有声明

(,or)

了解如何映射解析了的名字,请看

RemappingArguments和Names.

属性

from="original-name"

to="new-name"

例子

给定一个订阅"chatter"话题的node,但是你仅仅有一个发布"hello"话题的节点。他们的类型是

一样的,你想把hello"话题的节点传送到想要"chatter"话题的新节点,只需如下:

你正映射的名称

目标名称

nch/XML/machine

标签

标签声明了运行ROS节点的机器。如果所有节点都在本地启动,则不需此参数。它主要用

于声明SSH和远程机器的ROS环境变量的设置,但你也可以用它来声明本地机器的信息。

属性

name="machine-name"

指定机器的名称。对应于标签的machine属性

address=""

网络/主机地址

env-loader="/opt/ros/fuerte/"NewinFuerte

指定远程计算机上的环境文件。环境文件必须是一个设置了所有需要的环境变量的shell脚本,然后在所

提供的参数执行exec。看一个文件例子,ROSFuerte.版本的。对于env-loader的例子请看下面:

default="true|false|never"(optional)

将本机设为指定节点的默认机器。默认设置仅适用于在同一范围内后面定义的节点。注意:如果没有默

认的机器,将使用本地机器。可以设置

default="never"

阻止对机器的选择

,在这种情况下,机器只能

显式分配。

user="username"(optional)

登陆机器SSH用户名.如果不要求,可省略。

password="passwhat"(stronglydiscouraged)

SSH密码.

强烈建议配置SSH关键字和SSH代理代替,这样可以使用证书登陆。

timeout="10.0"(optional)

在机器roslaunch之前的秒数(时间),认为机器启动失败。默认是10秒。当使用这个设置来允许速度

较慢的连接时,需要改变这个参数通常是一种(你整体的ROS图会有通讯上的问题)征兆。

9

页共

20

roslaunchrelativeinfo

下面的属性在ROSElectric和早期版本可用:

ros-root="/path/to/ros/root/"(optional)

机器的

ROS_ROOT

.

ROS_ROOT

默认设置在本地环境中

ros-package-path="/path1:/path2"(optional)

机器的

ROS_PACKAGE_PATH

.默认设置是在本地环境中。

元素

只适用于Electric和早期版本:可以在标签中使用下列的XML标签:

在本机器上启动的所有进程中设置一个环境变量

例子

标签的语法在ROSElectric,很不相同,请注意下面例子的版本提示s

基本原则(ROSElectricandPreviousOnly)

下面的例子主要是配置“节点“footalker”在另一个机器运行。除了重写将用到机器的

ROS_ROOT和

ROS_PACKAGE_PATH

,在远程机器上还设置了一个

LUCKY_NUMBER

环境变量

ros-package-path="/u/user/ros/ros-pkg"user="someone">

使用env-loader基本原则(ROSFuerteandlater)

NewinFuerte

下面的例子主要是配置“节点“footalker”在另一个机器运行。使用默认env-loader文件(Fuerte.版

本)。

loader="/opt/ros/fuerte/"user="someone"/>

这是一个env-loader脚本的例子。如果你想使用不同的环境配置,使用一个不同的setup文件替代

/opt/ros/fuerte/:

#!/bin/sh

./opt/ros/fuerte/

exec"$@"

或者,如果你喜欢从rosws工作空间的源:

#!/usr/bin/envbash

source/home/username/path/to/workspace/

exec"$@

10

页共

20

roslaunchrelativeinfo

nch/XML/rosparam

标签

标签使得(从参数服务器中装载/卸载参数的)rosparamYAML文件能够使用。可以用来去除

参数。能放在标签中,这种情况下,参数被当做私有参数。

删除(delete)和转储(dump)命令在命令以及(在其他任何上传到参数服务器的)参数加载之前运行。删除和

转储命令按照声明的顺序运行。

加载命令被认为是”附加物(additive)”:如果声明一个字典或命名空间的参数,这些参数将被添加到命名

空间声明的其他参数上。同样,加载命令可以覆盖之前声明的参数。

标签可以涉及YAML文件或包含原始YAML文本。如果这个YAML文本定义了一个字典,可

以省略参数属性。

属性

command="load|dump|delete"(optional,default=load)

rosparam命令.

file="$(findpkg-name)/path/"(loadordumpcommands)

rosparam文件名.

param="param-name"

ns="namespace"(optional)

namespace.

Nameofparameter.

Scopetheparameterstothespecified

subst_value=true|false(optional)

在YAML文本中允许使用置换参数(substitutionargs)。

例子

[1,2,3,4]

a:1

b:2

置换使得roslaunch参数能够代表全部或者部分的YAML字符串来使用。例如:

$(argwhitelist)

也可以用在yaml字符串中嵌入($)以及嵌入到较小程度上替换模式。

roscpp代码中访问列表的例子:

XmlRpc::XmlRpcValuev;

nh_.param("subscribed_to_nodes",v,v);

for(inti=0;i<();i++)

{

node_names_.push_back(v[i]);

std::cerr<<"node_names:"<

}

11

页共

20

roslaunchrelativeinfo

nch/XML/include

标签

标签允许将另一个roslaunchXML文件导入到当前文件。文档的当前范围被导入,包括

标签。除了

标签外所有内容将被导入(

标签只在顶层文件服从)。

属性

file="$(findpkg-name)/path/"

要包含的文件名.

ns="foo"(optional)

导入相对于'foo'命名空间的文件。

clear_params="true|false"(optionalDefault:false)

在启动之前删除的命名空间的所有参数。这个特性很危险,使用时必须注意ns必须指

定。默认的是:false。

元素

nch/XML/env

标签

标签设置启动节点的环境变量,只能在,,or标签范围内

使用。在

标签内使用时,

标签只能在其后声明的节点中应用

注:标签设定的值通过

$()

不可见,所以

标签不能用于参数化(parametrize)的启动文

件。

属性

name="environment-variable-name"

你设置的环境变量。

value="environment-variable-value"

nch/XML/test

标签

标签在语法上类似tag。他们都指定要运行的ROS节点,但是tag表明节点实际

上是一个测试节点(testnode

)。测试节点的更多信息,请看

rostest

文档。

例子

args="--test1--test2"/>

使用--test1--test2命令行参数在在mypkgpackage

生成的可执行文件test_1_来启动

"test_1_2"节点。如果比10s测试时间长,测试将被当做失败而终止。

12

页共

20

roslaunchrelativeinfo

属性

标签分享

的大部分正常属性,除了::

没有重新加载(

respawn

)属性(测试节点必须终止,所以他们不能被重新加载)

没有输出(output)属性,因为tests使用他们自己的输出日志记录机制。

机器(machine)属性被忽略

还增加了一些如下,下面文档所示:

必要属性

name="nodename"

Required

pkg="mypackage"

Required

test-name="test_name"

Required

type="nodetype"

Required

可选属性

args="arg1arg2arg3"

可选

clear_params="true|false"

可选

cwd="ROS_HOME|node"

可选

launch-

prefix="prefixarguments"

可选

ns="foo"

可选

retry="0"

可选

time-limit="60.0"

可选

元素

你可以使用下列中的XML标签:

节点名称。注:不能包含命名空间,使用ns属性代替

节点包.

记录测试结果的测试名

节点类型、必须与对应可执行文件有相同的名字。

传递参数到节点

在launch之前删除节点私有命名空间中所有参数

如果'node',节点的工作目录可可执行文件的目录一样。在

TurtleC中,默认的是'ROS_HOME'.在boxturtle(ROS

1.0.x),默认的是'ros-root'.cturtle中不赞同使用'ros-root'。

.命令/参数预先考虑到节点的启动参数。这是一个强大的

功能,可以使能gdb,valgrind,xterm,nice,和其他手动工

具。看例子:RoslaunchNodesinValgrindorGDB

在'foo'命名空间开始节点

在认为失败之前重复测试的次数,默认是0。主要针对有

时候预计失败的随机进程中。

在测试被认为失败之前的秒数,默认60s。

13

页共

20

roslaunchrelativeinfo

nch/XML/arg

标签

NewinCTurtle

标签可以通过指定(通过命令行和传递或者为更高级别文件声明的)值来创建更多能重复

使用和配置的文件。Args

不是全局的。

arg声明针对单一启动文件,就像是一种方法中的局部参数一样。必须

明确传递arg值到被包含的文件中,就像在方法调用中一样。

能用以下三种方法之一调用::

声明foo的存在。Foo既可以作为命令行参数传递(顶层),也可以通过传递(如果被包含)

声明有默认值的foo。Foo能被覆盖(通过命令行参数传递(顶层),也可以通过传递

(如果被包含))

声明有常值的foo

Foo不能被重写

这种用法保证了启动文件内部的参数化(而不暴露在更高层次的

参数化)

例子

传递参数到被包含的文件

:

通过命令行传递参数

Roslaunch使用和ROS重映射参数相同的语法来指定参数值。

roslaunchmy_my_arg:=my_value

属性

name="arg_name"

参数名

default="defaultvalue"(optional)

参数默认值。不能和值属性组合。

value="value"(optional)

参数值。不能和默认属性组合。

14

页共

20

roslaunchrelativeinfo

nch/XML/group

标签

标签很容易将设置应用到一组节点上。有一个ns属性让人能够把一组节点推到一个单独的

命名空间。也可以使用

标签通过组重新映射设置。

属性

ns="namespace"(optional)

分配该组的节点到指定的命名空间。命名空间可以是全局的或相对的,虽然全局命名空间不鼓励。

clear_params="true|false"(optional)

启动前删除该组的命名空间中的所有参数。此功能是非常危险的,应谨慎使用。

ns

必须指定。

元素

标签相对于顶级

标签,只是简单的作为其中的标签的一个容器。这意味着可以使用在

标签中正常的任何标签。

nch/CommandlineTools

该roslaunch

包带有

roslaunch工具以及一些辅助启动ROS节点进程的工具。

roslaunch

Roslaunch是开始与停止ROS节点的重要工具。能有一个或者更多的.launch文件作为参数。

Launch语法

大多数

roslaunch

命令需要一个启动文件的名称

你可以指定启动文件的路径,也可以指定包名称以

及包中的

launch

文件

例如:

$

或者

$roscdroslaunch

$

roslaunch[args]

中启动,例如:

$roslaunchrospy_tutorialstalker_

roslaunch

查找文件(匹配指定包中的文件名)并运行

>[args]

通过指定相对或者绝对路径启动文件,例如:

$roslaunchpr2_robot/pr2_bringup/

roslaunch-[args]

NewinIndigo

作为标准输入启动roslaunchXML,例如:

15

页共

20

roslaunchrelativeinfo

$rosrunpackagegenerate_launch|roslaunch--pport

如果使用-p选项启动了不同端口的roscore,则同时需要传递一个-p标志到roslaunch中,例如:

$

将会自动覆盖

ROS_MASTER_URI

中的端口设置

--wait

延迟启动,直到roscore检测到

--local

只启动本地节点。远程节点不运行。

--screen

强制所有节点输出到屏幕。对于节点调试很有用。

-v

启用详细打印。可用于跟踪roslaunch文件解析。

--dump-params

打印在YAML格式文件的启动参数。

通过args传递

如果正在启动要求设置的指定参数。你可以这样做:使用相同的语法重新映射参数:

roslaunchmy_arg:=value

无启动(Non-launch)选项

下列选项在没有实际启动的情况下提供了启动信息。这些选项使用相同的启动文件分辨率作为通常

的roslaunch命令。您可以指定启动文件的文件路径,也可以指定数据包名称,在包中启动文件,如:

文件在roslaunch包中,可以使用:

roslaunch--nodesroslaunch$ROS_ROOT/tools/roslaunch/

--nodes

--nodes

列出launch文件中的。对于找出传递到--args的节点名很有用

--args

--args

显示用

roslaunch启动

文件中的节点时使用的命令行参

数。在调试时,需要启动某个特定节点时是很方便的。例如:

$roslaunch--argsmy_|bash

也可以使用带有置换参数的此选项(对于bash,注意使用单引号代替双引号):

$roslaunch--args'$(anonmy_node)'

--find

--find

打印定义所处的launch文件名。启动文件经常有许多包含文件(include),这使

16

页共

20

roslaunchrelativeinfo

得查找到真正的节点定义位置有点困难。例如:

$roslaunch--find/included/

--files

打印在包含的所有文件,包含文件自身。对于转到其他命令行工具来说是很有用的。例

如:

$|xargsgrepstuff

仅供内部使用的选项

roslaunch

使用的几个仅供内部使用的选项,包含

-c

,

-u

,和

--core

.

环境变量(高级用户)

注:这部分是为高级用户使用

ROSLAUNCH_SSH_UNKNOWN

当在远程机器上的启动时,SSH请求存储在本地

known_hosts文件中的

远程机器上的秘钥。你可以设

置roslaunch忽略这个约束并允许在没有秘钥的情况下连接到机器。这是一个很危险的选项,因为它引入了一

个安全漏洞,只有在你了解后果的情况下才能使用。

roslaunch-deps依赖

roslaunch-deps报告了.launch文件依赖的ROS包。

它也可以追踪命令编译问题,如包的

manifests

中缺少的依赖。编译一个启动文件的所有必须的包的运行的一个命令如下:

rosmake``

用法

为了得到manifest文件中丢失的依赖,运行带有-w警告选项的命令:

$

为了得到更详细的输出来跟踪依赖的来源,运行有-v选项的命令:

$

roslaunch-logs日志

roslaunch存储在ROS日志目录

($ROS_ROOT/log或$ROS_LOG_DIR)下的子目录一个特定飞运行的

日志文件

。在一般情况下,日志文件存储在ros_log_dir/run_id中,其中run_id唯一的ID(与roscore中特定

的运行有关)。

用法

roslaunch-logs

要与'cd'命令一起使用例如:

cd`roslaunch-logs`

你可以输入这个命令,快速进入节点的日志文件的目录。

17

页共

20

roslaunchrelativeinfo

ckages元软件包

Metapackages是

ROS中的专用包

(和catkin)

。他们没有安装文件(除了

manifest)

,不包含任何

测试,代码,文件,或在包中经常看见的其他项。

元软件包的使用和虚包在

debian包领域中

使用的方式一样。一个元包只是一个或多个相关的包装松散组

合在一起的引用。

ROS中大部分的元包对于rosbuild栈都是向后兼容的。

关于元软件包的内部结构和如何创建一个元软件包的

更多的信息,请看:catkin/#Metapackages

nch/Architecture

roslaunch通过组合来适应复杂的ROS架构:先写一个简单的系统,并将其与其他简单的系统结合,使系统

更复杂。在roslaunch中,通过以下几种机制表达:

1.

:可以容易的包括其他.launch文件并指定他们的命名空间使得他们的名字与你的名字

不冲突。

2.:可以组合节点集合,给他们相同的映射名称。

3.别名:可以在不同的.launch文件中将将机器和节点的定义分开,使用别名定义在运

行期间使用哪个机器。这样可以重新使用不同机器人的相同节点的定义。例如,一个aser_assembler运

行在'',可以说它运行在tilt-laser'机器上。这个机器的定义将会关注哪个主机是

'tilt-laser'机器。

roslaunch也包含了帮助写.launch文件的各种工具。标签指定某个机器或者节点需要设置的

环境变量。$(findpkg)指定相对于ROS包的文件路径,而不是在某个特定机器上的位置。也可以

在包含标签中使用$(envENVIRONMENT_VARIABLE)语法去加载基于环境变量(e.g.

MACHINE_NAME)的.launch文件。

本地进程Localprocesses

roslaunch

使用popen启动本地进程,使用POSIX信号杀死他们。

roslaunch

不保证节点启动的

顺序(由于ROS结构原因,没有办法知道节点什么时候初始化完成,所以不能保证按照特定顺序启

动)。

远程处理Remoteprocesses

远程进程与本地进程不同之处在于

roslaunch

是如何处理他们的。写启动文件时理解差异是很重要的。一

些高级的差异包括:

1.

你的

shell

初始化脚本

(.bashrc/.)

被忽略。启动文件为了能在用户和系统之间的更加

方便,launch文件中的配置需要完全指定。这些设置包括环境变量设置,这往往是隐藏在shell的初始

化脚本中。

2.

远程处理不能发送stderr/stdout到本地控制台。一般情况下,节点应该(使用ROS的内置的日志记录

机制

(soleforroscpp,logout/)

)报告重要信息。可通过rosout工具查看

这个重要的信息。

否则,远程启动和本地启动非常相似。事实上,为了远程启动,roslaunch创建一个包含在远程机器上想启

动的节点的新的

.launch

文件

。然后通过SSH远程登陆机器并使用新的

.launch

文件

启动roslaunch子进

程。

推荐使用SSH秘钥,这样roslaunch可以在没有提供明确的用户名和密码的情况下远程登陆到机器。

如果远程启动有问题,需要确认在启动文件中指定的远程机器名能不能SSH登陆进去。还应该确定每个

远程机器能使用他们的主机名ping原机。

18

页共

20

roslaunchrelativeinfo

nch/API使用

该roslaunch包带有一个PythonAPI协助ROS节点启动。

1.简单用例

简单用法例子

importroslaunch

package='rqt_gui'

executable='rqt_gui'

node=(package,executable)

launch=nch()

()

process=(node)

_alive()

()

这个例子是从rqt_gui包中启动和停止rqt_gui实例的。

标签的launch-prefix属性使得调试ROS节点进程简单些,下面是可能会有用的launch-

prefixes例子:

launch-prefix="xterm-egdb--args":在一个单独的xterm窗口gdb中运行节点,手

动键入run来开始

launch-prefix="gdb-exrun--args"

:在同一个xterm窗口gdb中运行节点,无需键入

run来开始

launch-prefix="valgrind"

:在valgrind中运行节点

launch-prefix="xterm-e"

:在单独的xterm窗口运行节点

launch-prefix="nice":nice进程降低CPU使用

launch-prefix="screen-d-mgdb--args":

如果节点正在另一台机器上运行很有用;你

可以SSH到那台机器上,

screen-D-R来看

GDB会话(

session

launch-prefix="xterm-epython-mpdb":在一个单独的xterm窗口pdb运行python

节点,手动键入

run

来开始

launch-prefix="/path/to/run_tmux"

:在一个新的tmux窗口运行节点;需要用如下内容

创建

/path/to/run_tmux

#!/bin/sh

tmuxnew-window"gdb--args$*"

ingcoredumps获得核心转储

当进程崩溃时要获得核心转储,首先设置内核文件大小限制。为了检查限制,运行:

19

页共

20

roslaunchrelativeinfo

$ulimit-a

corefilesize(blocks,-c)0#

datasegsize(kbytes,-d)unlimited

schedulingpriority(-e)20

filesize(blocks,-f)unlimited

pendingsignals(-i)16382

maxlockedmemory(kbytes,-l)64

maxmemorysize(kbytes,-m)unlimited

openfiles(-n)1024

pipesize(512bytes,-p)8

POSIXmessagequeues(bytes,-q)819200

real-timepriority(-r)0

stacksize(kbytes,-s)8192

cputime(seconds,-t)unlimited

maxuserprocesses(-u)unlimited

virtualmemory(kbytes,-v)unlimited

filelocks(-x)unlimited

设置内核大小为无限制:

ulimit-cunlimited

现在,粉碎进程时将尝试创建核心文件。目前(2010-07-02)他们将无法创建文件,因为默认的roslaunch

工作目录

$ROS_HOME

,

包含了一个名为“核心”的目录。这个目录,阻止核心转储被创建。

为了允许核心转储被创建,使用进程默认的PID设置内核文件名。以超级用户运行下面命令

:

<--Preventscoredumps

echo1>/proc/sys/kernel/core_uses_pid

现在核心转储显示$ROS_HOME/

20

页共

20

本文标签: 节点启动文件使用参数