许多ROS软件包都带有“启动文件”,即launch文件,launch文件是通过roslaunch功能包运行的,命令行格式如下:
$ roslaunch package_name file.launch
这些启动文件通常会为软件包提供一组节点,这些节点聚合了一些功能,通过roslaunch命令同时启动这些节点。
launch文件采用XML格式书写。
roslaunch浏览XML文件是一行一行运行的。按深度优先遍历进行处理:标签将按顺序进行浏览,标签值取最后的设定。因此,如果一个参数有多个设置,则将使用为该参数指定为最后一个值。
例子:
使用rospy_tutorials功能包的listener.py可执行文件(带有命令行参数–test)启动 listener1节点。如果该节点死亡,它将自动重生。
①pkg =“ mypackage”。节点包。
②type =“ nodetype”。节点类型。
③name =“ nodename”。节点名称。
④args =“ arg1 arg2 arg3”(可选)。将参数传递给节点。
⑤machine =“机器名”(可选)。指定机器上启动节点。
⑥respawn =“ true”(可选,默认值:False)。如果退出,则自动重新启动该节点。
⑦respawn_delay =“ 30”(可选,默认值:0)。如果respawn为true,请在检测到节点故障之后等待respawn_delay的时间(单位s),然后再尝试重新启动。
⑧required =“ true”(可选)。如果节点死亡,则杀死整个roslaunch。
⑨ns =“ foo”(可选)。在“ foo”名称空间中启动节点。
⑩output=“log | screen”(可选)。如果为“ screen”,则来自该节点的stdout / stderr将被发送到屏幕。如果为’log’,则stdout / stderr输出将发送到$ ROS_HOME / log中的日志文件,并且stderr将继续发送到屏幕。默认值为“ log”。
https://link.zhihu.com/?target=http%3A//wiki.ros.org/roslaunch/XML/machine
属性有:
①file=“$(find pkg-name)/path/filename.xml”。被包括的文件路径。
②ns=“foo” (可选)。在’foo’命名空间下导入文件。
③clear_params=“true | false” (可选,默认值:False)。启动前,删除的命名空间中的所有参数。 此功能非常危险,应谨慎使用。
④pass_all_args=“true | false” (可选,默认值:False)。如果为true,则将当前文件中设置的所有args添加到为处理包含的文件而创建的子文件中。 你可以执行此操作,而不是显式列出要传递的每个参数。
有时,节点1发布消息1给话题1(你可能需要该特定消息),而后,消息1进入了节点2,而节点2发布了消息2到话题2,消息2中包括了消息1的内容,消息2也被另一节点3接收。 这时,你只需告诉新节点订阅话题2即可。 但是,你也可以进行重新映射,以便新节点在认为自己正在订阅话题2的时候,最终订阅了话题1。
例子:
现在,当此节点订阅话题/different_topic时,将重新映射使其实际上订阅了话题/needed_topic。 因此,发布到/needed_topic的消息最终也将发送到这个新节点。
①name=“environment-variable-name”。您正在设置的环境变量的名称。
②value=“environment-variable-value”。设置环境变量的值。
例子:
属性有:
①name=“namespace/name”。参数名称。 命名空间可以包含在参数名称中,但应避免使用全局指定的名称。
②value=“value” (可选)。定义参数的值。 如果省略此属性,则必须指定binfile,textfile或command。
③type=“str | int | double | bool | yaml” (可选)。指定参数的类型。 如果未指定类型,roslaunch将尝试自动确定类型。
④textfile=“$(find pkg-name)/path/file.txt” (可选)。文件的内容将被读取并存储为字符串。 该文件必须是本地可访问的。
⑤binfile=“$(find pkg-name)/path/file” (可选)。文件的内容将作为一个base64编码的XML-RPC二进制对象读取和存储。该文件必须在本地可访问。
⑥command=“ ( f i n d p k g − n a m e ) / e x e ′ (find pkg-name)/exe ' (findpkg−name)/exe′(find pkg-name)/arg.txt’” (可选)。命令的输出将被读取并存储为字符串。由于XML转义的要求,这里需要使用单引号对文件参数进行引用。
注意:delete和dump命令需要在load命令之前,以及其他任何参数上传到参数服务器之前运行。
①command=“load | dump | delete” (可选,默认值:load)。
②file=“$(find pkg-name)/path/foo.yaml” 。rosparam文件的名称,使用load or dump命令时指定参数文件)。
③param=“param-name”。参数名称。
④ns=“namespace” (可选)。将参数范围限定到指定的名称空间。
⑤subst_value=true | false (可选)。允许在YAML文本中使用替代参数。
:该标签有利益将设置应用到一组节点。 它具有ns属性,可让您将节点放入单独的名称空间。
:该标签在语法上与标签相似。它们都指定要运行的ROS节点,但是标签指示该节点实际上是要运行的测试节点。有关这些测试节点的更多信息,请参见rostest文档。
https://link.zhihu.com/?target=http%3A//wiki.ros.org/rostest
①。声明foo变量。foo必须作为命令行参数或通过传递参数值。
②。用默认值声明foo。可以通过命令行参数或通过传递来覆盖foo。
③。声明具有恒定值的foo。foo的值不能被覆盖。
①name=“arg_name”。参数名称。
②default=“default value” (可选)。参数的默认值。不能与value属性同时使用。
③value=“value” (可选)。设定参数值。不能与默认属性结合使用。
④doc=“description for this arg” (可选)。参数说明。
launch文件支持替代参数,roslaunch将在启动节点之前对其进行解析。当前支持的替代参数有:
$(env ENVIRONMENT_VARIABLE):用环境变量替换变量的值。如果未设置环境变量,则启动将失败。此值不能被标记覆盖。
$(optenv ENVIRONMENT_VARIABLE):如果设置了环境变量的值,则替换该值。若提供default_value,则在未设置环境变量的情况下使用default_value。若未提供default_value,则将使用空字符串。default_value可以是多个单词,并用空格分隔。
例如:
NUM_CPUS的default_value为1;VARIABLE的default_value为ros和rocks。
$(find pkg):指定相对于软件包的路径。
例如:查找rospy子目录下的manifest.xml文件。
$(find rospy)/manifest.xml
$(anon name):根据名称生成匿名id,id不能重名。
例如:
$(eval ):用于计算任意复杂的python表达式。
例如:
$(dirname):返回启动文件所在目录的绝对路径。例如:
file指向当前launch文件所在目录下的other.launch文件。
所有标签都支持if和unless属性,这些属性基于值的评估包含或不包含在标签内。 “ 1”和“ true”被视为真实值。 “ 0”和“ false”被视为错误值。 其他值将出错。
if=value (optional):如果value评估为true,则包含标记及其内容。
unless=value (optional):如果value的值为false,则包含标记及其内容。
例子:
以下案例具备最基本的启动文件配置。它启动一个单独的“talker”节点,该节点是“rospy_tutorials”软件包的一部分。 该节点将使用当前配置的ROS环境(即ROS_ROOT等)在本地计算机上启动。
你可以在参数服务器上设置参数,这些参数将在启动任何节点之前存储在参数服务器上。
如果值是明确的,则可以省略type属性。支持的类型为str,int,double,bool。 您还可以使用textfile或binfile属性来指定文件的内容。
一、launch文件的运行