转载自一米阳光jjfdfd
来源:互联网 发布:自学英语教材 知乎 编辑:程序博客网 时间:2024/04/28 21:41
.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>)。
准备工作
需要用到rqt和tuetlesim 这两个包.如果没有安装,请执行:
$ 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
- 转载自一米阳光jjfdfd
- 一米阳光
- "一米阳光"的由来
- 一米阳光看世界
- sizeof--转载自网络
- YCbCr-转载自百度
- 爱情故事[转载自:学狼网]
- 转载自博客园
- 转载自博客园
- 转载自老罗
- 转载自matlab中文论坛
- 转载自伯乐在线
- 转载自罗博士
- sql触发器(转载自)
- 转载自博客园
- 转载自ycjnx
- MapReduce 转载自fumin
- 转载自X265
- Ubunt16.04下编译Linux遇到的问题
- C++中基本的数据类型和所占的内存大小
- Ubuntu16.04下安装jdk和Android Studio
- 深入理解指针函数
- js设置html节点属性
- 转载自一米阳光jjfdfd
- 【Android Meditation】从客户端和服务端看APP版本兼容问题
- PHP跳转的三种方法
- java 不定参数
- jquery事件
- 测试设计中需要考虑的22种测试类型
- 对 set 的遍历
- Spring常见面试题二
- 新兴市场:墨西哥股票逆势的观点