roslaunch的用法以及文件结构
launch文件可以看作是给roslaunch指令的一个输入,用于告诉这个指令应该启动哪些模块,模块之间如何连接。本文讲解如何使用ROS launch文件管理ROS启动。
roslaunch的用法
launch文件的作用
launch文件可以看作是给roslaunch指令的一个输入,用于告诉这个指令应该启动哪些模块,模块之间如何连接
用法
roslaunch [package] [filename.launch]
首先在教程的workspace中,转到beginner_tutorials文件夹中
roscd beginner_tutorials
==注意==
如果roscd提示 roscd: No such package/stack ‘beginner_tutorials’
说明环境变量没有成功设置,需要重新source
cd ~/catkin_ws
source devel/setup.bash
roscd beginner_tutorials
然后创建一个launch文件夹
$ mkdir launch
$ cd launch
==注意==
launch文件夹并不是必须的,也不是必须把roslaunch文件放在某一个目录下,roslaunch会自动搜索整个package中所有的launch文件
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>
<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>
这段代码启动turtlesim1/turtlesim2两个组“group”,这样可以分别启动turtlesim而不会因为名字冲突而无法启动
<node pkg="turtlesim" name="mimic" type="mimic">
<remap from="input" to="turtlesim1/turtle1"/>
<remap from="output" to="turtlesim2/turtle1"/>
</node>
这段代码启动一个mimic节点,有两个topics:input和output;
- input连接到turtlesim1/turtle1
- output连接到turtlesim2/turtle1
试验
使用roslaunch
roslaunch beginner_tutorials turtlemimic.launch
开一个新的终端,使用rostopic指令发控制指令
rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
从上图可以看出,虽然我们只向turtlesim1发送了控制的msg,但是turtlesim2中的小乌龟也会跟着运动,但是要慢一步,这是为什么呢?
我们启动rqt看看究竟发生了什么
rqt
如此恍然大悟:原来mimic将turtlesim1输出的pose 信息转换成了command_vel再传送到turtlesim2,而我们在之前的文章中也可以看出,turtlesim的pose信息更新频率大概为60hz,这就解释了为什么turtlesim2也可以被控制
mimic
mimic是一个简单的接口可以使得一个turtlesim模仿另一个
它的结构如下:
– input(turtlesim/Pose)
– output (geometry_msgs/Twist)
发表评论
Want to join the discussion?Feel free to contribute!