roslaunch 命令和配置文件

参考:

配置文件

格式

XML格式

加载顺序

包括各节点、子节点以及include内容在内,以深度有限遍历顺序加载,同一个配置项最后出现的生效。

命令替换

形式:$(cmd args),可用于launch文件中的各tag的属性赋值中
支持以下命令替换:

  • $(env ENVIRONMENT_VARIABLE): 取环境变量值,如果环境变量不存在,launch失败
  • $(optenv ENVIRONMENT_VARIABLE default_value): 如果设置了环境变量,取环境变量值,如果没有,取缺省值,如果没有指定缺省值,取空字符串
  • $(find pkg): 查找包路径,通常用于通过包路径指定文件的相对路径
  • $(anon name): 生成基于name的匿名node名
  • $(arg foo): 去arg值,foo必须通过<arg>定义过
  • $(eval ): 执行python表达式
    Note: As a limitation, $(eval) expressions need to span the whole attribute string. A mixture of other substitution args with eval within a single string is not possible:
    <param name="foo" value="$(arg foo)$(eval 6*7)bar"/>
    
    为了补救这种限制,其他替换命令可以作为eval的一个函数使用,例如:
    "$(eval arg('foo') + env('PATH') + 'bar' + find('pkg')"
    
    其中,arg可以隐私使用,即以下两种方式是等价的:
    "$(eval arg('foo'))"
    "$(eval foo)"
    
  • $(dirname): 当前luanch文件所在的目录

if和unless属性

所有 tag 都支持 if 和 unless 属性
如果包含 if 属性,当 if 属性的值为 1 或 true 时,该 tag 生效
如果包含 unless 属性,当 unless 属性的值不为 1 或 true 时,该 tag 生效

Tag说明:

<launch>: 顶层标签

可以包含其他Tag,仅支持一个属性:

  • deprecated=“deprecation message”

可包含Tag:

  • <node>
  • <param>
  • <remap>
  • <machine>
  • <rosparam>
  • <include>
  • <env>
  • <test>
  • <arg>
  • <group>

<node>: 节点

支持以下属性:

  • pkg=“mypackage”: 指定节点可执行文件所属的ROS包名
  • type=“nodetype”: 指定节点的可执行文件名
  • args=“arg1 arg2 arg3”(optional): 节点的命令行参数
  • machine=“machine-name”(optional): 在远程主机上运行节点
  • respawn=“true”(optional, default: False): 节点退出后自动重启
  • respawn_delay=“30” (optional, default 0) : 节点重启的时间间隔,单位s
  • required=“true”(optional): 如果node标记为required,这个node结束时,会结束整个launch启动的所有node
  • ns=“foo”(optional): 节点所属的名字空间
  • clear_params=“true”(optional): 启动时清除之前设置的所有参数,这在想删除之前设置过的某个参数,使其恢复默认值时很有用。
  • output=“log|screen”(optional): 默认值:‘log’。即使指定了log,输出到stderr的内容也会输出到屏幕。
  • cwd=“ROS_HOME|node”(optional): 节点的工作目录,默认值:‘ROS_HOME’,node表示节点可执行文件所在目录
  • launch-prefix=“prefix arguments”(optional): 执行node命令的前缀,主要用于调试,例如:gdb或者valgrind
  • if/unlsess

node节点可以包含以下节点:

  • <env>
  • <remap>
  • <rosparam>
  • <param>

<machine>: 配置远程主机

支持以下属性:

  • name=“machine-name”:
  • address=“blah.willowgarage.com”
  • env-loader=“/opt/ros/fuerte/env.sh”: 指定初始化远程主机环境变量的脚本
  • default=“true|false|never” (optional): 如果指定为true,则后续定义的node默认使用此主机,没有指定为default的machine时,node默认在本地执行,如果指定为never,需要在node中使用machine属性明确指出使用此主机,如果指定为false,此主机不是默认主机,但可参与自动选择机制?
  • user=“username” (optional): ssh user
  • password=“passwhat”: ssh password,为了安全,不建议使用,建议使用ssh免密登录机制
  • timeout=“10.0” (optional): 登录运行超时,单位s,默认值为10

可包含Tag:

  • : 为该主机运行的所有node设置环境变量

<include>: 包含其他文件

支持的属性:

  • file=“$(find pkg-name)/path/filename.xml”
  • ns=“foo” (optional),包含文件中的所有内容相对于此名字空间
  • clear_params=“true|false” (optional Default: false): 删除名字空间下的所有参数(必须指定ns)
  • pass_all_args=“true|false” (optional Default: false): 向include文件中传递所有参数

可包含Tag:

  • <env>:
  • <arg>:

<remap>: 名字映射

支持的属性:

  • from=“original-name”
  • to=“new-name”

<env>: 定义环境变量

支持的属性:

  • name=“environment-variable-name”
  • value=“environment-variable-value”

<param>: 单个参数配置

即可以在luanch下定义全局的参数,也可以在node中定义node的私有参数,还可以在group中使用~param方式定义一组node共用的私有参数

支持的属性:

  • name=“namespace/name”
  • value=“value”(optional): If this attribute is omitted, binfile, textfile or command must be specified.
  • type=“str|int|double|bool|yaml”(optional)
  • textfile=“$(find pkg-name)/path/file.txt”(optional): 用文本文件内容作为参数值,注意回车换行符
  • binfile=“$(find pkg-name)/path/file”(optional): 用二进制文件内容作为参数值
  • command=“ ( f i n d p k g − n a m e ) / e x e ′ (find pkg-name)/exe ' (findpkgname)/exe(find pkg-name)/arg.txt’”(optional): 用命令的输出做为参数值

<rosparam>: 多个参数批量配置

支持的属性:

  • command=“load|dump|delete” (optional, default=load):
    注意:所有的dump/delele命令的rosparam会在load命令的rosparam和param之前执行;dump/delele命令按照定义的顺序执行
  • file=“$(find pkg-name)/path/foo.yaml” (load or dump commands)
  • param=“param-name”
  • ns=“namespace” (optional)
  • subst_value=true|false (optional)

说明:除了使用yaml文件外,还可以使用Tag的Element的Text部分直接写出:

<rosparam param="a_list">[1, 2, 3, 4]</rosparam>
<rosparam>
  a: 1
  b: 2
</rosparam>
<arg name="whitelist" default="[3, 2]"/>
<rosparam param="whitelist" subst_value="True">$(arg whitelist)</rosparam>

<group>: 分组与名字空间

group常与if或ns属性联合使用,为一组node设置独立的环境,包括env,remap,machine等

支持的属性:

  • ns=“namespace” (optional)
  • clear_params=“true|false” (optional): 危险,必须与ns属性配合使用

可包含Tag:

  • <node>
  • <param>
  • <remap>
  • <machine>
  • <rosparam>
  • <include>
  • <env>
  • <test>
  • <arg>

<arg>: roslaunch 命令行参数

三种用法:

  1. <arg name=“foo” />: 必须通过命令行或include的指定参数值
  2. <arg name=“foo” default=“1” />: 带默认值,可以不通过命令行或include的指定参数值
  3. <arg name=“foo” value=“bar” />: 固定值,不能通过命令行或include的指定值,只能在launch文件内部使用,方便统一定义参数值,后面用$(arg xxx)替换使用。

支持的属性:

  • name=“arg_name”
  • default=“default value” (optional)
  • value=“value” (optional)
    doc=“description for this arg” (optional)

注意:default和value只能出现一个

<test>: 配置test node

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`roslaunch`是ROS的一个命令行工具,用于启动一个或多个ROS节点。它提供了一个方便的方式来启动多个ROS节点和它们之间的关系,以及一些运行时参数。 通过一个XML文件来定义节点的启动配置,`roslaunch`可以启动多个ROS节点,包括ROS核心节点、自定义节点和第三方节点。这个XML文件被称为“launch文件”,它可以定义ROS节点的参数、运行时选项、节点之间的关系,以及其他启动配置。 使用`roslaunch`可以方便地启动一个或多个ROS节点,并且可以在启动时指定一些参数,例如运行时参数、命名空间等等。由于它可以同时启动多个节点,因此可以用来启动复杂的ROS系统,而不必手动一个一个启动节点。 例如,假设你有一个名为`my_robot`的ROS包,其中包含一个`robot_control`节点和一个`sensor_data`节点。你可以使用`roslaunch`来启动这两个节点,并且指定它们之间的关系,如下所示: ``` <launch> <node pkg="my_robot" type="robot_control" name="robot_control_node" /> <node pkg="my_robot" type="sensor_data" name="sensor_data_node" /> <node pkg="my_robot" type="data_processing" name="data_processing_node" output="screen"> <remap from="sensor_data" to="sensor_data_node/data" /> <remap from="robot_control" to="robot_control_node/control" /> </node> </launch> ``` 在这个launch文件中,我们定义了三个节点:`robot_control_node`、`sensor_data_node`和`data_processing_node`。`data_processing_node`是一个数据处理节点,它订阅`sensor_data_node`节点发布的传感器数据,并发布处理后的控制命令到`robot_control_node`节点。 使用`roslaunch`命令启动这个launch文件,如下所示: ``` roslaunch my_robot my_system.launch ``` 这将启动三个节点,并且它们之间的关系将按照launch文件中定义的方式建立。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值