首页 > 解决方案 > 启动文件(ROS)中这一行是什么意思

问题描述

这条线是什么意思?并能解释一下吗?谢谢!

<arg unless="$(arg debug)" name="launch-prefix" value=" "/>
<arg if="$(arg debug)" name="launch-prefix" value="gdb -ex run --args"/>

标签: roslaunch

解决方案


如果你将参数 debug 传递给你的启动文件roslaunch test.launch debug:=true,你的启动文件$(launch-prefix)将评估为gdb -ex run --args,否则它会得到一个内部有一个空格的字符串" "

我将分解这两行并解释它的每一部分。

在哪里可以找到我的答案的来源?

启动文件通常会启动其中定义的节点。它包括用于启动系统特定部分的其他启动文件。如果您需要更多信息,可以查看以下来源:http ://wiki.ros.org/roslaunch/XML在这里您可以找到有关启动文件中所有可能性的正确解释。


<arg />ROS 启动文件中的标签是干什么用的?

为了更好地重用启动文件,您可以对命令行参数做出反应,这些参数在运行时从命令行传递roslaunch

例如:

example_launch_file.launch

<launch>
  <arg name="test" />

  <node name="[NODE_NAME]" pkg="[PACKAGE_NAME]" type="[EXECUTABLE_NAME]">
    <param name="test_arg_in_node" value="$(arg test)" />
  </node>
</launch>

此示例启动文件将接受一个test参数并将此参数传递给示例节点的参数。

如果您在上面创建了启动文件,则可以运行 roslaunch 并传递参数。运行以下命令:

roslaunch example_launch_file.launch test:=TestArgumentValue

因此,在节点内,一个名为的参数test_arg_in_node被赋值为TestArgumentValue


第一行

<arg unless="$(arg debug)" name="launch-prefix" value=" "/>

unless是上面没有提到的唯一属性。此属性将参数声明为有条件的。因此,如果您传递debugastrue1参数launch-prefix将不会被设置

否则,如果debugfalse0,则launch-prefix计算结果为" "

我这部分答案的来源是这个页面http://wiki.ros.org/roslaunch/XML再次,尤其是第3 章。如果和除非属性


第二行

<arg if="$(arg debug)" name="launch-prefix" value="gdb -ex run --args"/>

if与这相反unless意味着如果$(arg debug)true1,参数launch-prefix设置为"gdb -ex run --args"


附加信息

两者ifunless期望该集合的一个值[true, 1, false, 0]所有其他值都将导致错误。此页面上也提到了这一点:http ://wiki.ros.org/roslaunch/XML

gdb -ex run --args如果你将它传递给节点,这一行将调出 c++ 调试工具 gdb。在我看来,这是一个独立的主题,但在以下链接中,您将获得一个很好的起点:


推荐阅读