启动文件(ROS)中这一行的含义是什么

What is the meaning of this line in the launch file (ROS)

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

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

如果您在启动文件 roslaunch test.launch debug:=true 中将参数 debug 传递给启动文件 roslaunch test.launch debug:=true,则计算结果为 gdb -ex run --args, 否则它会在 " ".

中得到一个带有 space 的字符串

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

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

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


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

为了更好地重用启动文件,您可以对命令行参数做出反应,这些参数是在 运行ning 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 是唯一没有在上面提到的属性。此属性将参数声明为有条件的。因此,如果您将 debug 作为 true1 传递,则参数 launch-prefixNOT set.

否则,如果 debugfalse0launch-prefix 计算为 " "

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


第二行

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

ifunless 相反,这意味着如果 $(arg debug)true1,参数 launch-prefixBE 设置为 "gdb -ex run --args".


附加信息

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

如果将 c++ 调试工具 gdb 传递给节点,这一行 gdb -ex run --args 将启动它。在我看来,这是一个单独的话题,但在下文中 link 您将获得一个很好的起点: