ROS学习笔记2——launch文件

本文详细介绍了如何使用ROS中的launch文件来一次性启动多个节点,包括创建launch文件、编辑节点配置、参数传递、命名空间管理和动态传参等,以提升程序组织和管理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个程序中可能需要启动多个节点,比如ROS内置的小乌龟程序,实现这个案例需要开启roscore节点、小乌龟可视化节点、键盘控制节点,显然是一个很繁琐的方法。对于这样的情况,官方给出的策略是使用launch文件,可以一次性开启多个ros节点。

这里通过launch文件;来实现小乌龟的案例。

1、选定功能包右击 ---> 添加 launch 文件夹

2、选定 launch 文件夹右击 ---> 添加 launch 文件

3、编辑 launch 文件内容

<launch>
    <!--添加被执行的节点-->
    <!--node pkg="功能包名" type="节点名" name="命个名"/-->
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_key" />
</launch>

 a、<launch>

launch文件的根标签,每个launch文件都需要有这样一个根标签,并且文件的所有内容必须包含在这个标签内,只要i有这样一个根标签,运行launch文件时,就会开启roscore

<launch>
...
</launch>

 b、<node>

使用launch文件的目的就是要开启多个节点,所以<node>标签是一个重点。

roslaunch 命令不能保证按照 node 的声明顺序来启动节点(节点的启动是多进程的)

<node pkg="功能包名" type="节点名(与之前的可执行文件名相同)" name="给节点命个名" args="参数1 参数2 参数3" output="log|screen"/>

pkg、type、name是三个最主要的参数。

除此之外,<node>还有其他的属性:

args=“xxx xxx xxx”将参数传递给节点
machine=“机器名”在指定机器上启动节点
respawn=“true | false”如果节点退出,是否自动重启
respawn_delay=" N"如果 respawn 为 true, 那么延迟 N 秒后启动节点
required=“true | false”该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch
ns=“xxx”在指定命名空间 xxx 中启动节点
clear_params=“true | false”在启动前,删除节点的私有空间的所有参数
output=“log | screen”日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log

 c、<include>

include标签用于将另一个 xml 格式的 launch 文件导入到当前文件,实现复用

<include file="$(find 功能包名)/launch/xxx.launch" ns="xxx" />
  • file=" " -> 要包含的文件路径
  • ns=" " -> 在指定命名空间导入文件

d、<remap>

用于话题重命名,他是node的一个子级标签

<node pkg=" " type=" " name=" ">
    <remap from="原始话题名" to="目标话题名" />
</node>

e、<param>

<param>标签主要用于在参数服务器上设置参数,是node的一个子级标签,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在<node>标签中时,相当于私有命名空间,设置的参数前面会加上这个命名空间。

<!--1、在launch内,node外-->
<param name="param_A" type="int" value="100" />

<!--2、在node内-->
<node pkg=" " type=" " name=" ">
    <param name="param_B" type="double" value="1.234" />
</node>

f、<rosparam>

<rosparam>标签也是node的一个子级标签,可以从 YAML 文件导入参数,或将参数导出到 YAML 文件,也可以用来删除参数,<rosparam>标签在<node>标签中时被视为私有。

<!--1、在launch内,node外-->
<rosparam command="load | dump | delete(可选)" file="xxx.yaml" />

<!--2、在node内-->
<node pkg=" " type=" " name=" ">
    <rosparam command="load | dump | delete" file="xxx.yaml" />
</node>

g、<group>

<group>标签可以对节点分组,具有 ns 属性,可以让节点归属某个命名空间。除了launch 标签外的其他标签都是他的子级标签。在不同的组可以实现启动相同的节点。

<group ns="first_group">
    ...
</group>

<group ns="second_group">
    ...
</group>

h、<arg>

 <arg>标签是用于动态传参,类似于函数的参数。

  • 在launch文件文件中实现传参:
<arg name="car_length" default="0.5" />

<param name="car_A" value="$(arg car_length)" />
<param name="car_B" value="$(arg car_length)" />
<param name="car_C" value="$(arg car_length)" />
  • 命令行调用launch传参: 
roslaunch 功能包名 xxx.launch arg的name:=值

4、运行launch文件

//roslaunch 功能包名 ***.launch
roslaunch helloworld start_turtle.launch

此时,将光标点在终端,就可以实现用键盘上下左右控制小乌龟了。

### 关于ROS入门教程的资源 对于希望学习ROS(Robot Operating System)的人来说,可以从多个渠道获取高质量的学习资料。以下是几个推荐的方向: #### 官方文档 ROS官方提供了详尽的文档和教程,适合初学者快速了解ROS的核心概念及其操作方式[^1]。这些教程涵盖了从安装到基本编程接口的内容,并逐步深入至高级主题。 - **ROS 2设计背景与架构** design.ros2.org 是 ROS 2 的核心设计理念和技术决策的主要参考资料之一。它解释了为什么开发团队决定采用新的框架结构 (如 DDS),以及如何改进自 ROS 1以来的功能特性。 - **新手指南** 对于刚接触 ROS 或者想迁移至 ROS 2 的开发者来说,“Why ROS 2?” 和 “Changes between ROS 1 and ROS 2” 这两篇文章尤其重要,因为它们清晰地阐述了两者间的差异及升级理由。 #### 高校教育资源 通过限定搜索条件 `site:edu` ,可以找到许多大学发布的公开课程材料。这类内容通常更加理论化且注重实践应用案例分析。例如某些院校会提供基于特定机器人平台(比如 TurtleBot)的教学计划[^3]。 另外,在线也有不少个人整理出来的笔记非常实用。像这样记录下自己动手搭建环境过程的文章就很有价值——不仅讲述了怎样建立一个新的工作区目录树结构,还给出了具体路径示例以便模仿练习[^2]: ```bash ~/Code/ROS2/MyRobot_ws/src/ ├── rbt_ctrl_cpp │ └── src/ └── rbt_ui_py └── rbt_ui_py/ ``` #### 参数管理技巧 当涉及到复杂系统的调试时,则需要掌握好参数服务器的相关知识。一方面可以直接借助 YAML 文件批量导入设定值;另一方面也能够灵活运用 `<arg>` 标签实现动态传参功能[^4]。 ```xml <launch> <!-- 加载全局参数 --> <rosparam file="$(find my_package)/config/example.yaml" command="load"/> <!-- 自定义局部变量 --> <arg name="namespace_prefix" default="/test"/> </launch> ``` 以上就是一些针对不同需求层次所准备好的学习入口链接汇总表单啦! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值