ROS1快速入门学习笔记 - 014launch启动文件的使用方法

一、定义

Launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROSMaster

二、常用语法

1. 根标签

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

<launch>表示开始;<launch>表示结束;

2. 启动节点

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

  • pkg:节点所在的功能包名称
  • type:节点的可执行文件名称
  • name:节点运行时的名称
  • output、respwan、required、args

output 用来控制某个节点是不是要把他的日志信息打印到当前终端。

respawn用来控制节点,如果启动运行突然挂掉,需不需要重启。

required代表该节点是否必须要求启动。

ns代表命名空间

3. 参数设置

  1. <param>/<rosparam> (设置ROS系统运行中的参数,存储到参数服务器中;存储一个参数)

    <param name = "output_frame" value="odom"/>
  • name: 参数名
  • value: 参数值
  1. 加载参数文件中的多个参数

    <rosparam file="params.yaml" command="load" ns="params"/>
  2. <arg> (launch文件内部的局部变量,仅限于launch文件使用)

    <arg name="arg-name" default="arg-value"/>
  • name: 参数名
  • value: 参数值

调用

复制代码
<param name="foo" value="$(arg arg-name)"/>

这里通过$(arg arg-name)直接调用arg参数对应的value

复制代码
<node name="node" pkg="package" type="type" args="$(arg arg-name)"/>

通过$(arg arg-name)调用arg参数的name

4. 重映射(<remap>)

重映射ROS计算图资源的命名

复制代码
<remap from="/turtlebot/cmd_vel"to="/cmd_vel"/>
  • from: 原命名
  • to:映射之后的命名

(把/turtlebot/cmd_vel重命名为/cmd_vel)(原来的名字就没有了!)

5. 嵌套(<include>)

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

复制代码
<include file="$(dirname)/other.launch"/>
  • file:包含的其他launch文件路径

三、例子

在工作空间下创建一个learning_launch的功能包,再在里面创建一个以launch命名的文件夹,用来存放launch文件。

1. simple.launch

接下来我们看一个见到那的simple.launch文件

(可以将显示由文本改为XML格式,这样会有高亮显示)

这个launch包含两个节点,类型分别为我们之前在learning_topic创建的文件

接下来我们进行编译并运行

复制代码
catkin_make

运行luanch文件

复制代码
roslaunch learning_launch simple.launch

运行结果如下:

可以发现,一个launch文件可以运行多个节点。

2. 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>

这个launch文件包含了小乌龟和键盘控制节点。

这个文件需要导入参数文件,因此我们再导入参数文件。

接下来我们运行该launch文件

复制代码
roslaunch learning_launch turtlesim_parameter_config.launch

运行结果如下:

我们再查看一下我们加载的参数:

复制代码
rosparam list

我们可以发现,参数写在外面和里面的区别:

  • 写在外面的参数命令直接就是自己本身的名字;写在里面的参数的命名需要加上前面的节点名 。
  • A和B,C和D的区别在于,因为C和D前面加了group,因此命名也需要加上group

3. start_tf_demo_c++.launch

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>

第一个启动我们的海龟仿真器;第二个启动键盘控制;再运行之前我们写的广播器;最后启动我们之前写的监听文件。

运行结果如下:

此时我们可以发现,一个launch文件即可全部运行我们之间写的文件;且launch文件不需要运行roscore。

4. 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包含另外一个launch文件(simple.launch);在运行仿真器节点;然后将话题名重命名)

运行结果如下:

此时我们可以发现,话题名已经被重命名(原来的话题名已不存在)。

相关推荐
_Kayo_1 小时前
node.js 学习笔记3 HTTP
笔记·学习
一只栖枝1 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
Moshow郑锴2 小时前
人工智能中的(特征选择)数据过滤方法和包裹方法
人工智能
TY-20252 小时前
【CV 目标检测】Fast RCNN模型①——与R-CNN区别
人工智能·目标检测·目标跟踪·cnn
wuicer3 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
CareyWYR3 小时前
苹果芯片Mac使用Docker部署MinerU api服务
人工智能
失散134 小时前
自然语言处理——02 文本预处理(下)
人工智能·自然语言处理
wyiyiyi4 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
CCCC13101634 小时前
嵌入式学习(day 28)线程
jvm·学习
mit6.8244 小时前
[1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
人工智能·python