问题描述
这行是什么意思?并且能解释一下吗?谢谢!
<arg unless="$(arg debug)" name="launch-prefix" value=" "/>
<arg if="$(arg debug)" name="launch-prefix" value="gdb -ex run --args"/>
解决方法
如果您将参数 debug 传递到您的启动文件 roslaunch test.launch debug:=true
中的启动文件 $(launch-prefix)
将评估为 gdb -ex run --args
,
否则它会得到一个在 " "
内有一个空格的字符串。
我将分解这两行并解释其中的每一部分。
在哪里可以找到我的答案来源?
启动文件通常会启动其中定义的节点。它包括用于启动系统特定部分的其他启动文件。如果您需要更多信息,可以查看此来源:http://wiki.ros.org/roslaunch/XML 在这里您可以找到有关启动文件中所有可能性的正确解释。
ROS 启动文件中的 <arg />
标签是做什么用的?
为了更好地重用启动文件,您可以对命令行参数做出反应,这些参数是在运行 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
作为 true
或 1
传递,则参数 launch-prefix
将 NOT 设置。
否则,如果 debug
是 false
或 0
,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)
是 true
或 1
,则参数 launch-prefix
将 BE 设置为 "gdb -ex run --args"
。
其他信息
if
和 unless
都期望此集合的一个值 [true,1,false,0]
所有其他值都将导致错误。此页面上也提到了这一点:http://wiki.ros.org/roslaunch/XML
如果你把它传递给一个节点,这行 gdb -ex run --args
将调出 c++ 调试工具 gdb。在我看来,这是一个独立的主题,但在以下链接中,您将获得一个很好的起点: