• (八) .launch文件 ---编写简单的启动脚本文件


    下面我们将介绍,如何编写一个启动脚本程序:(.launch文件)

    还记得我们在 创建ROS软件包教程 中创建的第一个程序包(beginner_tutorials)吗,现在我们要使用它。

    beginner_tutorials 软件包里新建一个名为 launch 的文件夹,(用来保存 launch 启动脚本的):

    $ roscd  beginner_tutorials
    $ mkdir launch
    $ cd launch
    $ gedit turtlemimic.launch    #对其进行编辑

    添加下面的代码:

    <launch>
            <group ns="turtlesim1">
                    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
            </group>
    
            <group ns="turtlesim2">
                    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
            </group>
    </launch>

    解释程序:

    上面的代码,创建了2个 ros 节点, 并以不同命名空间标签区分,所以两个节点的名字都是一样的也没关系。

    • <launch> : 这个标签是其他标签的根标签,简单的说,它就是其他标签的容器
    • <group> : 它可以做成一个组, 简单的比喻, 就像是 C++里面的namespace一样,并且这个标签里的”ns” 指的就是:namespace(命名空间)。
    • <node> : 这个标签的效果:就是在终端中使用 rosrun 命令来启动一个节点。 “pkg”参数:软件(或程序)包名。

    如何运行这个 launch 文件: (运行脚本文件,不像运行rosrun命令,不需要提前在一个终端中运行 roscore 命令。如果你没有启动roscore命令,这个roslaunch 会自动启动 /rosout 节点;如果你先前启动了roscore,这个roslaunch就不会再启动/rosout节点了。)

    运行启动文件:

    $ roslaunch beginner_tutorials turtlemimic.launch

    执行完这个语句后,你会看到弹出了两个一样的窗口,如下图所示。这就是这个启动文件的效果:创建了 2个 小海龟节点。

    这里写图片描述


    现在,我们让:turtlesim2命名空间中的 turtle1 海龟的所有动作都模仿 turtlesim1命名空间 中的 turtle1 海龟。
    所有我们需要再在 turtlemimic.launch 文件中启动一个 模仿节点

    什么叫 模仿 : 就是如果我们控制 /turtlesim1/turtle1 小海龟,那么 /turtlesim2/turtle1 就跟着动。

    重新打开 turtlemimic.launch 文件中,我们再在这个文件中的<launch></launch> 标签里面,添加下面的代码:

            <node pkg="turtlesim" name="mimic" type="mimic">
                    <remap from="input"  to="turtlesim1/turtle1" />
                    <remap from="output" to="turtlesim2/turtle1" />
            </node>

    完整的程序是下面这个样子的:

    <launch>
            <group ns="turtlesim1">
                    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
            </group>
    
            <group ns="turtlesim2">
                    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
            </group>
    
            <node pkg="turtlesim" name="mimic" type="mimic">
                    <remap from="input"  to="turtlesim1/turtle1" />
                    <remap from="output" to="turtlesim2/turtle1" />
            </node>
    </launch>

    我们一样,运行 turtlemimic.launch 启动脚本文件:   $ roslaunch beginner_tutorials turtlemimic.launch

    查看现在有哪些话题正在发布:

    $ rostopic list

    输出:

    /rosout
    /rosout_agg
    /turtlesim1/turtle1/cmd_vel
    /turtlesim1/turtle1/color_sensor
    /turtlesim1/turtle1/pose
    /turtlesim2/turtle1/cmd_vel
    /turtlesim2/turtle1/color_sensor
    /turtlesim2/turtle1/pose

    如果你想得到详细的信息,请执行 rostopic list -v 命令。

    你看,这里面没有 /turtle1/cmd_vel 这个话题,有的是:/turtlesim1/turtle1/cmd_vel
    所以,我们新开一个终端,执行下面的命令,就可以让 /turtlesim1/turtle1 小海龟动起来:

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

    执行完上面的命令后,小海龟/turtlesim1/turtle1 就按照一定的线速度和角速度进行运动,因为 模仿节点 的原因,所以小海龟/turtlesim2/turtle1 模仿 小海龟/turtlesim1/turtle1 做同样的运动。

    我们运行一下 rqt_graph ,来看看当前节点之间的关系:

    $ rqt_graph

    这里写图片描述


    小练习

    现在我们已经学会了,如何编写一个简单的 launch文件,并且我们也知道了如何使用 roslaunch 命令来启动一个启动脚本文件。
    下面我们来做一个小练习: 我们就将下面这一堆命令打包成一个启动文件:

    $ roscore
    $ rosrun turtlesim turtlesim_node
    $ rosrun turtlesim turtle_teleop_key

    beginner_tutorials 程序包中的launch 路径里新建一个 turlte_key_control.launch 文件:

    $ roscd  beginner_tutorials/launch
    $ gedit turlte_key_control.launch    #打开turlte_key_control.launch,对其进行编辑

    填写下面的代码:

    <launch>
        <node pkg="turtlesim" name="turtle1" type="turtlesim_node"/>
        <node pkg="turtlesim" name="turtle1_key" type="turtle_teleop_key"/>
    </launch>

    现在我们来运行一下这个启动脚本:

    $ roslaunch beginner_tutorials turtle_key_control.launch

    你可以在这个终端中,通过方向键来控制小海龟了。

    这里写图片描述

     
  • 相关阅读:
    什么是Azkaban?
    设计模式 应用场景
    初识Nginx
    C++著名程序库的比较和学习经验(STL.Boost.GUI.XML.网络等等)
    C++对象模型笔记之程序设计模型
    深度探索C++对象模型之C++对象模型笔记
    对于数据库设计者而言,在设计表属性类型时应该考虑哪些问题?
    Thread 多线程 同步
    Thread sleep()休眠
    Java 多线程(Thread)学习
  • 原文地址:https://www.cnblogs.com/Jessica-jie/p/8520812.html
Copyright © 2020-2023  润新知