admin管理员组文章数量:1567751
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)计算
由
例如:
将指定my_foo到foo参数.
另一个例子:
type="add_two_ints_server"/> type="add_two_ints_client"args="$(arga)$(argb)"/> 将会从 第 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.相关标签 5 . 例子 .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 它的唯一目的是作为其他元素的容器。 1.属性 deprecated="deprecationmessage" ROS1.1:警告用户roslaunch文件不宜使用. 2.元素 启动一个节点. 设置参数服务器上的参数 声明一个名称的映射 声明启动要使用的机器. 使用rosparam文件设置启动要用的ROS参数 包含roslaunch文件. 制定启动节点的环境变量 启动一个测试节点seerostest). 声明参数 共享一个命名空间或映射的封闭的元素组 。 第 6 页共 20 roslaunchrelativeinfo nch/XML/node 1. 标签指定你想启动的节点。这是 roslaunch 标签中最常见的标签,支持最重要的特性: bringingupandtakingdownnodes. roslaunch 不提供节点开始的顺序保证 。 这是特意的:没有办法知道哪个节点完全初始化了,所以 启动代码必须在启动顺序上鲁棒性比较强。 roslaunch教程页包含了一些如何充分利用 子。 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 节点(通过更结构化的方式而不是直 接设置节点参数属性来启动的节点)。 标签适用于在其范围内随后的所有声明 ( 。 了解如何映射解析了的名字,请看 RemappingArguments和Names. 。 属性 from="original-name" to="new-name" 例子 给定一个订阅"chatter"话题的node,但是你仅仅有一个发布"hello"话题的节点。他们的类型是 一样的,你想把hello"话题的节点传送到想要"chatter"话题的新节点,只需如下: 你正映射的名称 目标名称 nch/XML/machine 标签声明了运行ROS节点的机器。如果所有节点都在本地启动,则不需此参数。它主要用 于声明SSH和远程机器的ROS环境变量的设置,但你也可以用它来声明本地机器的信息。 属性 name="machine-name" 指定机器的名称。对应于 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和早期版本:可以在 例子 标签的语法在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 参数。 删除(delete)和转储(dump)命令在命令以及(在其他任何上传到参数服务器的)参数加载之前运行。删除和 转储命令按照声明的顺序运行。 加载命令被认为是”附加物(additive)”:如果声明一个字典或命名空间的参数,这些参数将被添加到命名 空间声明的其他参数上。同样,加载命令可以覆盖之前声明的参数。 以省略参数属性。 属性 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)。 例子 a:1 b:2 置换使得roslaunch参数能够代表全部或者部分的YAML字符串来使用。例如: 也可以用在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) 在启动之前删除 定。默认的是:false。 元素 nch/XML/env 标签设置启动节点的环境变量,只能在 使用。在 标签内使用时, 标签只能在其后声明的节点中应用 。 注:标签设定的值通过 $() 不可见,所以 标签不能用于参数化(parametrize)的启动文 件。 属性 name="environment-variable-name" 你设置的环境变量。 value="environment-variable-value" nch/XML/test 上是一个测试节点(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" 可选 元素 你可以使用下列 节点名称。注:不能包含命名空间,使用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="namespace"(optional) 分配该组的节点到指定的命名空间。命名空间可以是全局的或相对的,虽然全局命名空间不鼓励。 clear_params="true|false"(optional) 启动前删除该组的命名空间中的所有参数。此功能是非常危险的,应谨慎使用。 ns 必须指定。 元素 标签相对于顶级 标签,只是简单的作为其中的标签的一个容器。这意味着可以使用在 标签中正常的任何标签。 nch/CommandlineTools 该roslaunch 包带有 roslaunch工具以及一些辅助启动ROS节点进程的工具。 roslaunch Roslaunch是开始与停止ROS节点的重要工具。能有一个或者更多的.launch文件作为参数。 Launch语法 大多数 roslaunch 命令需要一个启动文件的名称 。 你可以指定启动文件的路径,也可以指定包名称以 及包中的 launch 文件 。 例如: $ 或者 $roscdroslaunch $ roslaunch 在 $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 打印 第 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. 行期间使用哪个机器。这样可以重新使用不同机器人的相同节点的定义。例如,一个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实例的。 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
版权声明:本文标题:launch文件整理 内容由热心网友自发贡献,该文观点仅代表作者本人,
转载请联系作者并注明出处:https://www.elefans.com/xitong/1721786039a897213.html,
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论