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

image

从上图可以看出,虽然我们只向turtlesim1发送了控制的msg,但是turtlesim2中的小乌龟也会跟着运动,但是要慢一步,这是为什么呢?

我们启动rqt看看究竟发生了什么

rqt

image

如此恍然大悟:原来mimic将turtlesim1输出的pose 信息转换成了command_vel再传送到turtlesim2,而我们在之前的文章中也可以看出,turtlesim的pose信息更新频率大概为60hz,这就解释了为什么turtlesim2也可以被控制

mimic

mimic是一个简单的接口可以使得一个turtlesim模仿另一个
它的结构如下:
– input(turtlesim/Pose)
– output (geometry_msgs/Twist)

0 回复

发表评论

Want to join the discussion?
Feel free to contribute!

发表评论

邮箱地址不会被公开。 必填项已用*标注