启动文件(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
作为 true
或 1
传递,则参数 launch-prefix
将 NOT set.
否则,如果 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
如果将 c++ 调试工具 gdb 传递给节点,这一行 gdb -ex run --args
将启动它。在我看来,这是一个单独的话题,但在下文中 link 您将获得一个很好的起点:
这行是什么意思?并能解释一下吗?谢谢!
<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
,
否则它会在 " "
.
我将分解这两行并解释它的每一部分。
在哪里可以找到我的答案来源?
启动文件通常会启动其中定义的节点。它包括其他启动文件以启动系统的特定部分。如果您需要更多信息,可以查看此来源: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
作为 true
或 1
传递,则参数 launch-prefix
将 NOT set.
否则,如果 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
如果将 c++ 调试工具 gdb 传递给节点,这一行 gdb -ex run --args
将启动它。在我看来,这是一个单独的话题,但在下文中 link 您将获得一个很好的起点: