ROS 学习笔记(12)—— launch 文件使用方法

1、launch文件语法

launch文件中的根元素采用<launch>标签定义。

1.1、node 标签

<node>:启动节点。

用法:

<node pkg="package-name" type="executable-name" name="node-name"/> 

如:

<node pkg="turtlesim" type="turtlesim_node" name="sim1"/>

其中:
pkg:节点功能包名称
type:节点的可执行文件名称
name:节点运行时的名称
此外还有outputrespawnrequirednsargs
output:控制节点打印信息到终端
respawn:重启节点
required:要求某个节点启动
ns:namespace,避免命名冲突
args:给节点输入参数

1.2、param & rosparam 标签

<param> / <rosparam>:设置ROS系统运行中的参数,存储在参数服务器中。

用法:

<param name="output_frame" value="odom"/>

如:
加载参数文件中的多个参数:

<rosparam file="params.yaml" command="load" ns= "params" />

其中:
name:参数名
value:参数值

1.3、arg 标签

launch文件内部的局部变量,仅限于launch文件使用。

用法:

<arg name="arg-name" default="arg-value" />

其中:
name:参数名
value:参数值
default:默认参数值

调用:

<param name="foo" value="$(arg arg-name)" />
<node name="node" pkg="package" type="type " args="$(arg arg-name)" />

1.4、remap 标签

<remap>:重映射 ROS 计算图资源的命名。

用法:

<remap from="/turtlebot/cmd_vel" to="/cmd_vel"/>

其中:
from:原命名
to:映射之后的命名

实例:
可以看后面的实例4。

1.5、include 标签

包含其他launch文件,类似C语言中的头文件包含。

用法:

<include file="$(dirname)/other.launch"/>

其中:
file:包含的其他launch文件路径

实例:
可以看后面的实例4。

更多标签可参见: http://wiki.ros.org/roslaunch/XML

2、实例1:自定义话题消息

之前学习过话题发布与订阅,现在使用 launch 文件启动两个节点来实现,前提是需要按照 话题消息的定义与使用 运行成功,才能用 launch 文件来调用它。
首先在/catkin_ws/src目录下新创建一个叫做learning_launch的功能包,因为 launch 文件主要是调用其他功能包,所以指令后面不需要跟依赖。

catkin_create_pkg learning_launch

再在learning_launch中创建一个文件夹命名为launch
在这里插入图片描述
再在launch文件夹下新建一个名为simple.launch的文件:
在这里插入图片描述把以下内容复制进去:

<launch>
    <node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
    <node pkg="learning_topic" type="person_publisher" name="listener" output="screen" /> 
</launch>

PS:在菜单 > 查看 > 高亮模式 设置为XML可以高亮文本这里是引用

然后编译工作空间:

cd ~/catkin_ws
catkin_make

启动launch文件:

source ~/catkin_ws/devel/setup.bash
roslaunch learning_launch simple.launch

成功运行:
在这里插入图片描述

3、实例2:参数的使用

之前学习过 参数的使用与编程方法,现在使用 launch 文件来实现。

与实例1一样,新建turtlesim_parameter_config.launch文件。
在这里插入图片描述把以下内容复制进去:

<launch>

	<param name="/turtle_number"   value="2"/>

    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
		<param name="turtle_name1"   value="Tom"/>
		<param name="turtle_name2"   value="Jerry"/>

		<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
	</node>

    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>

</launch>

代码中写到,参数文件在learning_launch/config/param.yaml路径下,所以我们要在这个路径下新建一个config/param.yaml文件,如下图:
在这里插入图片描述内容为:

A: 123
B: "hello"

group:
  C: 456
  D: "hello"

PS:这里的 A、B、C、D 的冒号后面要有一个空格,C、D前面要有两个空格。不然会报错

然后运行launch文件:

roslaunch learning_launch turtlesim_parameter_config.launch

在这里插入图片描述
这个时候可以通过键盘控制海龟移动,但这并不是这个实例的重点。

通过rosparam get命令,我们可以看到刚刚launch中指定的turtle_number被添加进了参数列表并赋值为2
在这里插入图片描述
同样,也可以得到turtle_name1的值为Tom,但是这里不太一样,因为在launch文件中,我们把turtle_name1参数放在了以turtlesim_nodenamenode中,目的是为了防止与节点外的同样的参数名(如果有)起冲突,起到了命名空间的作用。
在这里插入图片描述
同样,在launch文件中我们通过rosparam标签引入了param.yaml文件,同样也可以得到ABCD四个参数的值。
在这里插入图片描述

4、实例3:tf 坐标系广播与监听

之前学习过 tf 坐标系广播与监听,现在使用 launch 文件来实现,而不再需要启动5个终端分别通过五次rosrun命令来实现了,前提是需要按照 tf 坐标系广播与监听的编程实现 运行成功,才能用 launch 文件来调用它。

与实例1一样,新建start_tf_demo_c++.launch文件。
在这里插入图片描述
把以下内容复制进去:

 <launch>

    <!-- Turtlesim Node-->
    <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>

    <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
    <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />

    <node pkg="learning_tf" type="turtle_tf_listener" name="listener" />

  </launch>

这里把上次用到的命令行指令拷贝过来,方便XML语法与命令行指令对比学习:

roscore
rosrun turtlesim turtlesim_node
rosrun learning_tf turtle_tf_broadcaster __name:=turtle1_tf_broadcaster /turtle1
rosrun learning_tf turtle_tf_broadcaster __name:=turtle2_tf_broadcaster /turtle2
rosrun learning_tf turtle_tf_listener
rosrun turtlesim turtle_teleop_key

然后运行launch文件:

roslaunch learning_launch start_tf_demo_c++.launch

在这里插入图片描述
如果出现海龟乱划线或者根本没有反应的情况,请查看是不是之前打开过海龟节点,如果是,关掉后重新运行launch文件。

5、实例4:remap 标签与 include 标签

这个实例是为了介绍remap标签和include标签。前提是已经完成了实例1。

与实例1一样,新建turtlesim_remap.launch文件。
在这里插入图片描述
把以下内容复制进去:

<launch>

	<include file="$(find learning_launch)/launch/simple.launch" />

    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
		<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
	</node>

</launch>

代码中通过include标签包含了simple.launch文件,也就是实例1中的那个文件。

然后通过remap标签,把turtlesim_node节点下的/turtle1/cmd_vel重映射为/cmd_vel

运行launch文件看看效果:

roslaunch learning_launch turtlesim_remap.launch

可以看到,命令行中一直打印着实例1的效果。
在这里插入图片描述
然后输入rostopic list查看一下话题列表,可以看到之前的/turtle1/cmd_vel消失了,多了一个/cmd_vel
在这里插入图片描述
然后我们试一下给重映射后的话题发布一个指令,看看重映射是否成功,这里我们发布的是让海龟运动的指令:

rostopic pub /cmd_vel geometry_msgs/Twist "linear:
  x: 1.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0" 

发现海龟正常运动,重映射成功。
在这里插入图片描述
现在/turtle1/cmd_vel那个话题名已经不存在了,取而代之的是/cmd_vel话题,所以这就是重映射的含义,它会把原来存在的资源重新命名。

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要创建一个ROSlaunch文件,你可以按照以下步骤进行操作: 1. 首先,在你的ROS工作空间找到你想要创建launch文件的功能包。可以使用命令`cd <workspace>/src/<package_name>`进入该功能包的目录。 2. 在功能包的目录下创建一个名为`launch`的文件夹。你可以使用命令`mkdir launch`来创建。 3. 进入`launch`文件夹,使用文本编辑器创建一个新的launch文件。你可以使用命令`touch <launch_file_name>.launch`来创建一个空的launch文件。 4. 打开这个新创建的launch文件,并按照你的需求编写launch文件的内容。你可以参考ROSlaunch文件语法和示例来编写你的launch文件。在launch文件,你可以指定要启动的节点、节点的参数配置以及节点之间的关系等。 5. 保存并关闭launch文件。 6. 现在,你可以使用`ros2 launch`命令来启动你的launch文件使用命令`ros2 launch <package_name> <launch_file_name>`,将会启动整个系统,包括所有在launch文件指定的节点和它们的配置。 总结起来,要创建一个ROSlaunch文件,你需要在功能包创建一个名为`launch`的文件夹,并在其创建一个launch文件。然后,按照你的需求编写launch文件的内容,并使用`ros2 launch`命令来启动该launch文件。 #### 引用[.reference_title] - *1* *3* [ROS2入门教程—创建一个launch文件](https://blog.csdn.net/qq_29923461/article/details/120404577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ROS学习(4)——launch文件的编写](https://blog.csdn.net/bulletstart/article/details/130794565)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值