ROS学习笔记(二) :使用roslaunch
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的更多相关文章
- ROS学习笔记二:ROS系统架构及概念
本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...
- ROS学习笔记(二)
===================================================== QT工具箱sudo apt-get install ros-kinetic-rqtsudo ...
- ROS学习笔记8-rqt_console和roslaunch
本教程来自于:http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch rqt_console 和 rqt_logger_level 是ro ...
- ROS学习笔记二(创建ROS软件包)
catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 必须包含一个catkin编译文件package.xml(manifests文件),此文件包含了描述该软件包的重要信 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- ROS学习笔记七:在ROS中使用USB摄像头
下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
随机推荐
- 毕业一年的大专生程序员工作总结(java后台)
文章导读 一.回眸过去-- 闲扯的话-- 零碎的技术 二.经验总结-- 沟通交流-- 贵在坚持-- 合理规划 三.展望未来-- 积累行业背景-- 学习清单 四.最后补充 一. 回牟过去 1.闲扯的话 ...
- coreml之通过URL加载模型
在xcode中使用mlmodel模型,之前说的最简单的方法是将模型拖进工程中即可,xcode会自动生成有关模型的前向预测接口,这种方式非常简单,但是更新模型就很不方便. 今天说下另外一种通过URL加载 ...
- 第04组 Alpha冲刺(3/6)
队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 才两天,也就是实现一些功能而已 复习 接下来的计划 实现更多的功能 为下周的比赛准备 还剩 ...
- 黑科技!两行代码完美解决:同时设置overflow-x:hidden,overflow-y:visible无效的问题
不废话,直接上代码 <!DOCTYPE html> <html> <head> <style> body { padding: 0; margin: 0 ...
- k8s集群-node节点设置不可调度或者删除node节点
在master 执行1, 不可调度 kubectl cordon k8s-node- kubectl uncordon k8s-node- #取消 2,驱逐已经运行的业务容器 kubectl drai ...
- mac解决安装提示“xxx软件已损坏,打不开,您应该将它移到废纸篓”的提示
如果没有“任何来源”选项则运行: macOS Sierra设置说明 若已安装了最新系统 macOS Sierra 则有可能出现某些安装包已损坏.显示未激活.打开崩溃等的提示!!原因是因为新系统屏蔽了任 ...
- Oracle性能调优之物化视图用法简介
目录 一.物化视图简介 二.实践:创建物化视图 一.物化视图简介 物化视图分类 物化视图分类,物化视图语法和as后面的sql分为: (1) 基于主键的物化视图(主键物化视图) (2)基于Rowid的物 ...
- windows环境中hbase源码编译遇到的问题
转载请注明出处 问题一 [ERROR] Failed to execute goal org.codehaus.mojo:findbugs-maven-plugin:3.0.0:findbugs (d ...
- [转帖]mDNS原理的简单理解
mDNS原理的简单理解 https://binkery.com/archives/318.html 发现还有avahi-daemon mdns 设置ip地址 等等事项 网络部分 自己学习的还是不够多 ...
- java中 Math和StrictMath
今天无意中看到java api中有StrictMath 这个工具类,发现它部分调用实现是用了Math中的实现.Math 这个类API 1.0版本就有了,StrictMath API是1.3版本才出来的 ...