青海快三下载 » ROS探索总结 » ROS探索总结-54.launch文件

快三口诀逢3下15:ROS探索总结-54.launch文件

青海快三下载 www.41pi3.cn ROS探索总结-54.launch文件

概要:

  • 每当我们需要运行一个ROS节点或工具时,都需要打开一个新的终端运行一个命令。当系统中的节点数量不断增加时,每个节点一个终端的模式会变得非常麻烦。那么有没有一种方式可以一次性启动所有节点呢?答案当然是肯定的。

  • 启动文件(Launch File)便是ROS中一种同时启动多个节点的途径,还可以自动启动ROSMaster节点管理器,而且可以实现每个节点的各种配置,为多个节点的操作提供了很大便利。

一、基本元素

  • 首先来看一个简单的launch文件:
<launch>
   <nodepkg="turtlesim"name="sim1" type="turtlesim_node"/>
   <nodepkg="turtlesim"name="sim2" type="turtlesim_node"/>
</launch>
  • 这是一个简单而完整的launch文件,采用XML的形式进行描述,包含一个根元素<launch>和两个节点元素<node>。

  • 1.<launch>

  • XML文件必须要包含一个根元素,launch文件中的根元素采用<launch>标签定义,文件中的其他内容都必须包含在这个标签之中:

<launch>
    ......
</launch>
  • 2. <node>
  • 启动文件的核心是启动ROS节点,采用<node>标签定义,语法如下:
<node pkg="package-name"type="executable-name" name="node-name" />
  • 从上边的定义规则可以看出,在启动文件中启动一个节点需要三个属性:pkg、type和name。其中pkg定义节点所在的功能包名称,type定义节点的可执行文件名称,这两个属性等同于在终端中使用rosrun命令执行节点时的输入参数。name属性用来定义节点运行的名称,将覆盖节点中init()赋予节点的名称。这是三个最常用的属性,在某些情况下,我们还有可能用到以下属性:
·  output = "screen":将节点的标准输出打印到终端屏幕,默认输出为日志文档;

·  respawn = "true":复位属性,该节点停止时,会自动重启,默认为false;

·  required = "true":必要节点,当该节点终止时,launch文件中的其他节点也被终止;

·  ns = "namespace":命名空间,为节点内的相对名称添加命名空间前缀;

·  args = "arguments":节点需要的输入参数。
  • 实际应用中的launch文件往往会更加复杂,使用的标签也会更多,例如一个启动机器人的launch文件如下:
    <launch>
 
   <node pkg="mrobot_bringup" type="mrobot_bringup" name="mrobot_bringup" output="screen" />
 
   <arg name="urdf_file" default="$(find xacro)/xacro --inorder '$(find mrobot_description)/urdf/mrobot_with_rplidar.urdf.xacro'" />
   <param name="robot_description" command="$(arg urdf_file)" />
 
   <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />  
 
   <node pkg="robot_state_publisher" type="robot_state_publisher" name="state_publisher">
       <param name="publish_frequency" type="double" value="5.0" />
   </node>
   <node name="base2laser" pkg="tf" type="static_transform_publisher" args="0 0 0 0 0 0 1 /base_link /laser 50"/>
 
   <node pkg="robot_pose_ekf" type="robot_pose_ekf" name="robot_pose_ekf">
       <remap from="robot_pose_ekf/odom_combined" to="odom_combined"/>
       <param name="freq" value="10.0"/>
       <param name="sensor_timeout" value="1.0"/>
       <param name="publish_tf" value="true"/>
       <param name="odom_used" value="true"/>
       <param name="imu_used" value="false"/>
       <param name="vo_used" value="false"/>
       <param name="output_frame" value="odom"/>
   </node>
 
   <include file="$(find mrobot_bringup)/launch/rplidar.launch" />
 
</launch>
  • 目前,我们只关注其中的标签元素,除了上边介绍的<launch><node>,这里还出现了<arg>、<param>、<remap>,这些都是常用的标签元素。

二、参数设置

  • 为了方便设置和修改,launch文件支持参数设置的功能,类似于编程语言中的变量声明。关于参数设置的标签元素有两个:<param>、<arg>,一个代表parameter,另一个代表argument。这两个标签元素翻译成中文都是“参数”的意思,但是这两个“参数”的意义是完全不同的。

  • 1. <param>

  • parameter是ROS系统运行中的参数,存储在参数服务器中。在launch文件中通过元素加载parameter;launch文件执行后,parameter就加载到ROS的参数服务器上了。每个活跃的节点都可以通过 ros::param::get()接口来获取parameter的值,用户也可以在终端中通过rosparam命令获得parameter的值。

  • <param>的使用方法如下:

<param name="output_frame" value="odom"/>
  • 运行launch文件后,output_frame这个parameter的值就设置为odom,并且加载到ROS参数服务器上了。但是在很多复杂的系统中,参数的数量很多,如果这样一个一个的设置会非常麻烦,ROS也为我们提供了另外一种类似的参数加载方式——<rosparam>
<rosparamfile="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
  • <rosparam>可以帮助我们将一个yaml格式文件中的参数全部加载到ROS参数服务器中,需要设置command属性为“load”,还可以选择设置命名空间“ns”。

  • 2. <arg>

  • argument是另外一个概念,类似于launch文件内部的局部变量,仅限于launch文件使用,便于launch文件的重构,和ROS节点内部的实现没有关系。

  • 设置argument使用标签元素,语法如下:

<arg name=”arg-name” default=”arg-value”/>
  • launch文件中需要使用到argument时,可以使用如下方式调用:
<paramname="foo" value="$(argarg-name)" />
<node name="node" pkg="package" type="type "args="$(arg arg-name)" />

三、重映射机制

  • ROS的设计目标是提高代码的复用率,所以ROS社区中的很多功能包我们都可以拿来直接使用,而不需要关注功能包的内部实现。那么问题就来了,别人功能包的接口不一定和我们的系统兼容呀?

  • ROS提供一种重映射的机制,简单来说就是取别名,类似于C++中的别名机制,我们不需要修改别人功能包的接口,只需要将接口名称重映射一下,取个别名,我们的系统就认识了(接口的数据类型必须相同)。launch文件中的<remap>标签可以帮我们实现这个重映射的功能。

  • 比如turtlebot的键盘控制节点,发布的速度控制指令话题可能是/turtlebot/cmd_vel,但是我们自己的机器人订阅的速度控制话题是/cmd_vel,这个时候使用<remap>就可以轻松解决问题,将/turtlebot /cmd_vel重映射为/cmd_vel,我们的机器人就可以接收到速度控制指令了:

<remap from="/turtlebot/cmd_vel"to="/cmd_vel"/>
  • 重映射机制在ROS中的使用非常广泛,也非常重要,方法不止这一种,也可以在终端rosrun命令中实现重映射,大家一定要理解好这种机制。

四、嵌套复用

  • 在复杂的系统当中,launch文件往往有很多,这些launch文件之间也会存在依赖关系。如果需要直接复用一个已有launch文件中的内容,可以使用标签包含其他launch文件,这和C语言中的include几乎是一样的。
 <include file="$(dirname)/other.launch" />
  • 总而言之,launch是ROS框架中非常实用、灵活的功能,它类似于一种高级编程语言,可以帮助我们管理启动系统时的方方面面。在使用ROS的过程中,很多情况下我们并不需要编写大量代码,仅需要使用已有的功能包,编辑一下launch文件,就可以完成很多机器人功能。

这里仅介绍了launch中最为常用的一些标签元素,还有更多高级的标签元素可以访问wiki学习://wiki.ros.org/roslaunch/XML

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros探索总结

  • 大豆自己种,芯片自己造 2019-03-20
  • 胡峰:25年的光荣与梦想 2019-03-20
  • 邯郸峰峰集团总医院建筑垃圾不清理 2019-03-19
  • 北新建材荣登“中国500最具价值品牌”100强 2018-11-24
  • 杨梅:谣言太多伤不起 2018-11-24
  • 13岁少年杀3幼童被收容教养 下调入刑年龄可控犯罪 2018-09-04
  • 银保监会:6月22日前上报保险消费风险提示落实情况 2018-07-25
  • 刘杰的专栏作者中国国家地理网 2018-07-25
  • 漫游宝澄清“无证”传闻 2018-07-24
  • 罗青林的专栏作者中国国家地理网 2018-07-24
  • 2018世界杯 竞彩游戏的投注方式 2018-07-23
  • 足球,从工人阶级平民运动到资本主义商业游戏 2018-07-23
  • 奚梦瑶穿牛仔套装帅气十足 双手接护照礼仪满分 2018-07-22
  • 看了看某同事放长线的账户,居然赔掉了三分之二的本金[可怜] 2018-07-22
  • 克罗地亚VS尼日利亚前瞻:克罗地亚或是最大黑马 2018-07-21
  • 463| 820| 948| 480| 237| 907| 224| 721| 581| 538|