.launch文件分析

    xiaoxiao2021-03-26  22

     .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

    转载请注明原文地址: https://ju.6miu.com/read-350291.html

    最新回复(0)