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);在运行仿真器节点;然后将话题名重命名)

运行结果如下:

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

相关推荐
diemeng11193 分钟前
AI前端开发技能变革时代:效率与创新的新范式
前端·人工智能
有Li7 分钟前
跨中心模型自适应牙齿分割|文献速递-医学影像人工智能进展
人工智能
Nerd Nirvana1 小时前
软考—系统架构设计(案例 | 论文)
linux·系统架构·软件工程·软考·计算机基础
StickToForever1 小时前
第4章 信息系统架构(五)
经验分享·笔记·学习·职场和发展
勤奋的凯尔森同学2 小时前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
Hylan_J3 小时前
【VSCode】MicroPython环境配置
ide·vscode·python·编辑器
莫忘初心丶3 小时前
在 Ubuntu 22 上使用 Gunicorn 启动 Flask 应用程序
python·ubuntu·flask·gunicorn
leegong231115 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
牧歌悠悠5 小时前
【深度学习】Unet的基础介绍
人工智能·深度学习·u-net
敲敲敲-敲代码5 小时前
【SQL实验】触发器
数据库·笔记·sql