roslaunch

roslaunch是ros自带的一个库,使用roslaunch可以同时运行多个节点,通过编写launch文件来配置各个节点

roslaunch的使用

以turtlesim为例

首先保证环境变量中是否有catkin_ws工作空间的路径

echo $ROS_PACKAGE_PATH

若无,则进入该工作空间的根目录,执行

source devel/setup.bash

之后在任意目录下都可以进入之前创建的程序包

roscd beginner_tutorials

新建launch文件夹,在里面创建launch文件

mkdir launch
gedit turtlemimic.launch

拷贝以下launch文件的内容:

http://wiki.ros.org/cn/ROS/Tutorials/UsingRqtconsoleRoslaunch

<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>

launch文件的格式是XML

下面先简单说一下各个标签、属性的意思:

多个组的节点

  • group 标签, 里面包含的是一个组内的定义,其属性

    • ns(namespace)定义了组名,用于区分不同组
  • node 标签,里面包含的是一个节点的定义,属性:

    • pkg说明该node所在pkg的名字
    • type说明该node的名字
    • name相当于为当前的node起一个别名(可以不起别名,默认值与type属性一致,但有时会造成歧义,比如在组内定义两个同类型的节点时会用同一个名字(因为都是同一个'type')
    • output指定输出的位置
    • args指定一些具体的参数,比如rosbag的play node需要指定文件路径,也可以为node里面的一些topic改名字(应该说是连接到新名字)
  • node 标签里面的子标签 remap,为该node里面订阅(或发布的topic) 重定向

上面文件在做什么?

首先分别在两个组中各自建立了一个turtlesim_node,然后只控制组1的节点,让组2的节点跟着组1的节点一起运动

以组1为例,group标签定义了一个组,组的名字在ns属性中给出 为"turtlesim1",该组内定义了一个node标签,说明组内只有一个节点,该节点是ros包(pkg属性)"turtlesim"里面的(type属性)"turtlesim_node"节点(的一个实例) ,该节点的名字(name属性)为"sim"

定义了两个组之后,又定义了一个mimic(模仿)节点,用于使组2的节点模仿组1的节点运动,通过remap将input(输入)话题重新映射到turtlesim1的turtle1话题,将output(输出)话题映射到turtlesim2,意味着将turtlesim1/turtle1 topic作为mimic节点的input topic,而turtlesim2/turtle1 topic作为mimic节点的output topic

关于remap标签的另一个例子

比如想同时用多张图片跑一套算法,可以为每张img定义一个组:

以组1为例,每个组定义两个节点:

  • 一个节点专门发布数据(play rosbag)到某个话题上,另一个节点作为订阅者,订阅该话题来接收输入数据
<node pkg="rosbag" type="play" name="img_1" output="screen" args="--clock path_to_data /topic_a:=/group_1/topic_a  /topic_b:=/group_1/topic_b ..... ">
</node>
<node pkg="algorithm_pkg" type="algorithm_node" name="algorithm_1" output="screen">
<remap from="/topic_a" to="/group_1/topic_a" >
</remap>
</node>

节点1:在args属性将原来topic名字映射成包含组名的新名字,意味着rosbag发布的topic名字变成 /group_1/topic_a 等等...

节点2:remap标签,将该节点订阅的话题重定向为新的名字,使其与在该组内发布数据的rosbag play节点所发布的话题名对应

为什么需要把原本的topic改为包含组名的?原本在算法节点中定义的订阅者,订阅的topic名字只是topic_a,由于输入图像不同,如果所有的输入图像都发布到topic_a这一个topic上,会造成混乱,因此应该一个输入图像对应一个话题名,同样地接收该输入图像(即运行算法的节点)所订阅的话题名也要随之更改。

launch文件的更多内容:

在roslaunch文件中使用变量

//TODO

ROS学习笔记(二) :使用roslaunch的更多相关文章

  1. ROS学习笔记二:ROS系统架构及概念

    本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...

  2. ROS学习笔记(二)

    ===================================================== QT工具箱sudo apt-get install ros-kinetic-rqtsudo ...

  3. ROS学习笔记8-rqt_console和roslaunch

    本教程来自于:http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch rqt_console 和 rqt_logger_level 是ro ...

  4. ROS学习笔记二(创建ROS软件包)

    catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 必须包含一个catkin编译文件package.xml(manifests文件),此文件包含了描述该软件包的重要信 ...

  5. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  6. ROS学习笔记七:在ROS中使用USB摄像头

    下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...

  7. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  8. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  9. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

随机推荐

  1. Function.prototype.call.bind

    在JavaScript中借用方法 在JavaScript中,有时候需要在一个不同的对象上重用一个函数,而不是在定义它的对象或者原型中.通过使用call(),applay()和bind(),我们可以很方 ...

  2. [LeetCode] 694. Number of Distinct Islands 不同岛屿的个数

    Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...

  3. 一张思维导图辅助你深入了解 Vue | Vue-Router | Vuex 源码架构

    1.前言 本文内容讲解的内容:一张思维导图辅助你深入了解 Vue | Vue-Router | Vuex 源码架构. 项目地址:https://github.com/biaochenxuying/vu ...

  4. 初探Java设计模式5:一文了解Spring涉及到的9种设计模式

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  5. long 在不同操作系统下所占用的字节数

    不同平台下C\C++数值数据类型长度如下: 类型 win32 win64 linux32 linux64 其中long类型和指针类型需要特别注意,编写跨平台的软件时尽量不要使用long类型,或者需要对 ...

  6. RBAC类在ThinkPHP中的四种使用方法

    第一类:放在登陆控制器的登陆操作中 1.RBAC::authenticate(); 用于在用户表中查找表单提交的用户名的数据,实质上就是一条用户表查寻语句,=====> return M(mod ...

  7. 用cp命令拷贝文件,源目录后带不带斜杠的区别

    当我还是Linux超级傻白的时候,需要拷贝一个很大的数据集,然后再拷贝源文件夹的后面跟了一个前倾斜杠,然后就发现居然拷贝的是整个文件夹里的东西,而不是文件夹本身.事儿倒是不大,我重新建一个文件夹,把这 ...

  8. python 属性描述符

    import numbers class IntField: # 一个类只要实现了这个魔法函数,那么它就是属性描述符 #数据描述符 def __get__(self, instance, owner) ...

  9. Web应急:门罗币恶意挖矿

    门罗币(Monero 或 XMR),它是一个非常注重于隐私.匿名性和不可跟踪的加密数字货币.只需在网页中配置好js脚本,打开网页就可以挖矿,是一种非常简单的挖矿方式,而通过这种恶意挖矿获取数字货币是黑 ...

  10. sprintboot动态静态资源转发

    背景|     要做一个功能,根据规则服务器上创建文件后,返回可下载的链接           因为sprintboot中地址需要先在用@RequestMapping定义好,否则解析不了,这时动态生成 ...