下面我们将介绍,如何编写一个启动脚本程序:(.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  -- '[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

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

 

(八) .launch文件 ---编写简单的启动脚本文件的更多相关文章

  1. ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)

    ROS Indigo beginner_Tutorials-09 编写简单的启动脚本文件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...

  2. linux文件系统启动流程、启动脚本

    linux文件系统启动流程.启动脚本 下面是一张Linux启动流程图: 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1. /sbin/init 2. /etc/ ...

  3. 小鸟初学Shell编程(二)编写简单的Shell脚本

    Shell脚本 编写Python.PHP脚本通常需要掌握语言的函数,那么Shell脚本则不需要,只需要掌握Linux命令就可以编写Shell脚本,因为Shell脚本就是由多个Linux命令组成,通过将 ...

  4. 编写简单的辅助脚本来在 Google 表格上记账

    我的第二份工作入职在即,而这一次则真的是完全跑到了一个陌生的城市了.租房,购置相关用品,还尚未工作钱就花掉一堆.尽管我个人之前一直都没有过记账的习惯,但为了让自己能够搞清楚自己的钱都花在哪里了,于是还 ...

  5. 利用 Powershell 编写简单的浏览器脚本

    生活中有很多事情是低效益,重复性.比如每天上某些网站,先登录再签到打卡,比如每隔一段时间清理回收站的文件等等.一个成熟的软件工程师应该想到用软件解决他. 对于这些简单的小任务,一般用脚本实现.比如Py ...

  6. Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容

    我们知道在UWP里面有Resources文件xxx.resx,在Android里面有String.Xml文件等.那跨平台如何统一这些类别不一的资源文件以及Xaml设计文件如何绑定这些资源?应用支持多国 ...

  7. Spark配置&启动脚本分析

    本文档基于Spark2.0,对spark启动脚本进行分析. date:2016/8/3 author:wangxl Spark配置&启动脚本分析 我们主要关注3类文件,配置文件,启动脚本文件以 ...

  8. Ubuntu操作系统编写zabbix的启动管理脚本

    Ubuntu操作系统编写zabbix的启动管理脚本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.修改zabbix的pid存放路径 1>.创建存放zabbix的pid目录 ...

  9. 基于Swt、ffmpeg、jacob、vlc、SApi、h2技术编写简单的旁白生成器

    一.简介: 前一段时间尝试录制了几集3D编程方面的视频教程,我发现录制时最大的障碍是让脑中的思考.手上的操作和嘴里的解说保持同步,一旦三个"线程"中有一个出错,就必须停下来重新录制 ...

随机推荐

  1. 关于nginx多层uptstream转发获取客户端真实IP的问题

    因为公司有个需求需要获取客户端的真实IP,前端是haproxy,后面是nginx,本来这个需求不难完成,但是难就难在是https请求也就是ssl 由于个人水平有限,在网上爬了很多资料,刚开始的ha是通 ...

  2. 自定义标签在IE6-8的困境

    或许未来前端组件化之路都是自定义标签,但这东西早在20年前,JSTL已在搞了.现在Web Component还只有webkit支持.但一个组件库,还需要一个特殊的标识它们是一块的.不过这个XML已经帮 ...

  3. Java复习 之多线程

    线程是一个程序中的不同路径 例子1 只有一条路径 每一个分支都是一个线程 实际上在一个时刻内 电脑只能运行一个进程 但是因为cpu运算速度很快 将时间分出来了 所以我们感觉是同时运行 创建线程的两种方 ...

  4. Visual studio 2019 preview & C# 8 initial experience

    Visual studio 2019 preview & C# 8 initial experience       using System; using static System.Con ...

  5. linux 设备驱动分类

    1. 字符设备 :在I/O传输过程中以字符为单位. 2. 块设备: 在传输过程中以块为单位,相关概念有 缓冲,I/O调度,请求队列.主要体现出与字符设备在操作硬件的接口实现方式上是不一样的. 3. 网 ...

  6. mysql攻防之写入漏洞

    因为被别人利用mysql攻击,所以想在这里帮助大家提高一下自身mysql的安全.避免成为别人的肉鸡. show global variables like '%secure%'; 如果是这样则黑客可以 ...

  7. sudo su到root或到其它用户报这种错

    一般不会出现这种情况,除非你进入的这个目录已经被删了.然后切换用户就找不到这个目录,所以报错. 这种情况下我们只要去到一个正常的目录就好了,比如:cd ~ 然后再切换,ok.

  8. Spring 手动 提交事务

    1.配置文件 applicationContext.xml: <bean id="txManager"class="org.springframework.jdbc ...

  9. 2.5、CDH 搭建Hadoop在安装(设置Cloudera Manager数据库)

    步骤5:设置Cloudera Manager数据库 Cloudera Manager Server包含一个可以为自己创建和配置数据库的脚本.该脚本可以: 创建Cloudera Manager Serv ...

  10. 1.5.7、CDH 搭建Hadoop在安装之前(定制安装解决方案---配置单用户模式)

    配置单用户模式 在传统的Cloudera Manager部署中,管理每台主机上的Hadoop进程的Cloudera Manager Agent以root用户身份运行.但是,某些环境会限制对root帐户 ...