roslaunch 中某些选项意义

控制台输出INFO:
在控制台中输出信息 对于某个单独的节点,只需在节点元素中配置 output 属性就可以达到该目的:

     output=”screen”

配置了该属性的节点会将标准输出显示在屏幕上而不是记录到之前讨论的日志文档。示例程序对 subpose 节点配置了该属性,这就是为什么该节点的 INFO 信息会出现在控制台中,同时也说明了为什么该节点没有出现在之前提到的日志文件列表中。
除了影响单个节点输出信息的 output 属性之外,我们还可以使用–screen 命令行选项来令 roslaunch 在控制台中显示所有节点的输出:

roslaunch –screen package-name launch-file-name

请求复位
在启动了启动文件中所有的请求节点之后,roslaunch会监视每一个节点,记录哪一个节点是活跃的。对于每个节点,我们可以设置 respawn 属性为真,这样当节点停止的时候,roslaunch 会重新启动该节点。

   respawn=”true

这个功能是有意义的,比如在某个节点因为软件崩溃或硬件故障以及其他原因导致过早退出系统的时候会起到作用。

为节点维护独立的窗口:
使用 roslaunch 的一个缺点是所有的节点共享一个终端,而使用 rosrun 的时候,每个节点都有一个独立的终端。这对于不接收控制台输入,只生成日志消息的节点是可行的(通常也是有帮助的),但是对于依赖控制台输入的节点来说,例如 turtle_teleop_key,更倾向于为节点保留独立的终端。

幸运的是,roslaunch 提供了一个实现该目的的简洁方法—对节点元素使用启动前缀(launch-prefix)属性:Launch-prefix=“command-prefix”事实上,roslaunch 在启动节点时的内部工作原理是调用相应的命令行工具,即 rosrun。启动前缀的主要思想是在其命令行前面添加给出的命令行前缀。在我们的例子中,遥操作节点使用了这个功能:launch-prefix=”xetrm-e”

在命名空间内启动节点


 "turtlesim_node" pkg="turtlesim " type="turtlesim_node" ns="sim1" />
 "turtlesim " type="turtle_teleop_key" name="teleop_key" required="true " launch −prefix="xterm −e" ns="sim1" />
 "turtlesim_node" pkg="turtlesim " type="turtlesim_node" ns="sim2" />
 "agitr" type="pubvel" name="velocity_publisher" ns="sim2" />

名称重映射(Remapping names)

除了相对名称和私有名称 , ROS节点还支持重映 射(remapping),它可以从更精细的层面控制对所用节点名称的修改。重映射是基于替换的思想:每个重映射包含一个原始名称和一个新名称。每当节点使用重映射中的原始名称时,ROS客户端库就会将它默默地替换成其对应的新名称。

创建重映射
1. 当启动一个节点的时候,有两种方法来创建重映射。
当使用命令行启动节点时,分别给出原始名称和新名称,中间由一个:=分开,如下所示:

original-name := new-name

例如,运行一个 turtlesime 的实例,如果想要把海龟的姿态数据发布到话题/tim 而不是/turtle1/pose,就可以使用如下命令:

rosrun turtlesim turtlesim_node turtle1/pose:=tim
  1. 通过启动文件的方式,只需在启动文件内使用重映射(remap)元素即可 :
from=”original-nameto ”new-name”/>

如果该属性在顶层,即作为 launch 元素的子元素出现,重映射将会应用到所有的后续节点。这些重映射元素也可以作为一个节点元素的子元素,如:

<node node-attributes>
   <remap from=”original-nametonew-name/>
</node>

在这种情况下,给出的重映射只应用于其所在的节点。例如,上面的命令行本质上等价于如下结构的启动文件:

<node pkg=”turtlesim” type=”turtlesim_node” name=”turtlesim_node”>
   <remap from=”turtle1/posetotim”/>
node>

启动参数

尽 管 在 计 算 机 领 域 术 语 中 很 多 情 况 下 prarmeter 和argument 都是可以互换的,但是在 ROS 中,二者的含义是非常不同的(译者注:在中文中一般都称为参数,更没有明显的区分,因此后面还是使用它们的英文原文说明问题)。parameter 是运行中的 ROS 系统使用的数值,存储在参数服务器(parameter server)中,每个活跃的节点都可以通过 ros::param::get 函数来获取 parameter 的值,用户也可以通过 rosparam 来获得 parameter的值。而 argument 只在启动文件内才有意义;他们的值是不能被节点直接获取的。

你可能感兴趣的:(ROS学习)