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

运行结果如下:

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

相关推荐
云泽野2 小时前
【Java|集合类】list遍历的6种方式
java·python·list
物联网老王2 小时前
Ubuntu Linux Cursor 安装与使用一
linux·运维·ubuntu
麻雀无能为力2 小时前
CAU数据挖掘实验 表分析数据插件
人工智能·数据挖掘·中国农业大学
时序之心2 小时前
时空数据挖掘五大革新方向详解篇!
人工智能·数据挖掘·论文·时间序列
IMPYLH3 小时前
Python 的内置函数 reversed
笔记·python
.30-06Springfield3 小时前
人工智能概念之七:集成学习思想(Bagging、Boosting、Stacking)
人工智能·算法·机器学习·集成学习
说私域4 小时前
基于开源AI智能名片链动2+1模式S2B2C商城小程序的超级文化符号构建路径研究
人工智能·小程序·开源
永洪科技4 小时前
永洪科技荣获商业智能品牌影响力奖,全力打造”AI+决策”引擎
大数据·人工智能·科技·数据分析·数据可视化·bi
一位摩羯座DBA4 小时前
Redhat&Centos挂载镜像
linux·运维·centos
学习3人组4 小时前
CentOS配置网络
linux·网络·centos