转载自一米阳光jjfdfd

来源:互联网 发布:自学英语教材 知乎 编辑:程序博客网 时间:2024/04/28 21:41

.launch文件分析

  在我们的功能包中可以看到launch文件夹下有很多的.launch文件,这些文件写入了我们想要同时运行的节点,当我们需要有很多节点同时启动时,一个个启动它们会费时费力,这时我们可以写一个.launch文件把这些节点都包括进去,这样可以通过roslaunch命令来把这些节点都启动了。

       到这里假设我们都已经知道怎样使用roslaunch命令了,这次重先简单介绍一下.launch文件的结构,然后重点说一下.launch文件中的重映射(remap)。

​ 1 .launch文件的结构

            <launch>

                       <node name="talker"pkg="rospy_tutorials" type="talker" >

                        </node>​

            </launch>

      上面是.launch文件的最小例子。.launch文件开头是以<launch>为标签,让我们知道这是一个.launch文件,以</launch>为结尾。而中间就是写自己要启动的节点,是以<node> 开始,</node>结束,其中pkg="rospy_tutorials",这是自己要启动的节点所在的包;type="talker",这是自己写的节点.cpp程序通过编译生产的可执行文件的名字,你最初编译.cpp程序的时候要在CMakeLists.txt添加cpp程序编译的设置,这个可执行文件的名字在CMakeLists.txt中就可以找到;name="talker",这是节点的名字。

2.Roslaunch /XML/remap     ​

 1. 元素

<node> 启动一个节点.

<param> 设置参数服务器上的参数

<remap> 声明一个名称的映射,允许你通过名称映射参数到ROS 节点(通过更结构化的方式而不是直接设置节点参数属性来启动的节点)。

<machine> 声明启动要使用的机器.

<rosparam> 使用rosparam 文件设置启动要用的ROS 参数

<include> 包含roslaunch 文件.

<env> 制定启动节点的环境变量

<test> 启动一个测试节点see rostest).

<arg> 声明参数

<group> 共享一个命名空间或映射的封闭的元素组。

2 .launch文件的重映射(remap

       据我理解,重映射就是甲节点得到相关的信息,通过重映射使乙节点得到甲节点一样的信息,从而使得乙节点模仿甲节点做出相应的响应。

<remap>标签适用于在其范围内随后的所有声明(<launch>, <node> or<group>)

准备工作

需要用到rqttuetlesim 这两个包.如果没有安装,请执行:

$ sudo apt-get install ros-hydro-rqtros-hydro-rqt-common-plugins ros-hydro-turtlesim

我的ros版本是hydro版本,如果不是hydro,则自行替换。

例子

首先自己在turtlesim/launch文件夹下建一个.launch文件,名字自己取,如multi_node.launch的文件,粘贴如下内容:

<launch>

<group ns="turtlesim1">

      <nodepkg="turtlesim" name="sim"type="turtlesim_node"/>

</group>

<group ns="turtlesim2">

      <nodepkg="turtlesim" name="sim"type="turtlesim_node"/>

</group>

             <node pkg="turtlesim" name="turtle_mimic"type="mimic">

              <remap from="input"to="turtlesim1/turtle1"/>

              <remap from="output"to="turtlesim2/turtle1"/>

              </node>

</launch>

属性

​from="original-name" 你正映射的名称

to="new-name" 目标名称

      你可以结合着turtlesim包中的mimic.cpp程序看上面的代码。用roslaunch运行上面刚写的launch文件,会出现turtlesim2模仿turtlesim1的动作。打开终端(ctrl+alt+T),输入下面命令(如果你有多个工作空间,请先source一下turtlesim所在的工作空间):

​$source ~/ros_tutorial/devel/setup.bash

$roslaunch turtlesim multi_node.launch

新打开一个终端,输入:

$rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

再新打开一个终端,再输入:

​$rqt_graph 

出现如下结果:




如果想再映射一个小乌龟(或更多乌龟),可以在上面的.launch文件中的内容改为如下内容,通过对比,就可以知道,如何再添加一只小乌龟:

<launch>

<group ns="turtlesim1">

      <nodepkg="turtlesim" name="sim"type="turtlesim_node"/>

</group>

<group ns="turtlesim2">

      <node pkg="turtlesim"name="sim" type="turtlesim_node"/>

</group>

        <groupns="turtlesim3">

      <nodepkg="turtlesim" name="sim"type="turtlesim_node"/>

</group>     

             <node pkg="turtlesim" name="turtle_mimic"type="mimic">

              <remap from="input"to="turtlesim1/turtle1"/>

              <remap from="output"to="turtlesim2/turtle1"/>

              </node>

              <node pkg="turtlesim" name="turtle_mimic1"type="mimic">

              <remap from="input" to="turtlesim1/turtle1"/>

              <remap from="output"to="turtlesim3/turtle1"/>

             </node>   

</launch>

(改完.launch文件,如果有多个工作空间,记得source一下turtlesim所在的工作空间,再运行上面的命令)

运行结果如下


​​​​​

更多有关Roslaunch /XML/请看ros官网  http://wiki.ros.org/roslaunch/XML

0 0