ROS学习——通过Launch实现多节点运行

ROS

1. 通过 Launch 实现多节点运行

在 ROS 学习过程中,经常需要同时运行多个节点。如果每次都手动打开多个终端并分别启动各个节点,显得繁琐且低效。为了简化这个过程,可以使用 launch 文件 来管理多个节点的启动,使其在一个终端中同时运行,提高开发效率。

1.1 为什么使用 Launch 文件?

  • 简化启动过程:避免手动逐个启动多个节点,提高工作效率。
  • 增强可维护性:多个节点的启动配置集中在一个文件中,管理更方便。
  • 优化界面显示:通过 output="screen" 让所有输出信息集中在一个终端显示。
  • 灵活调试:可以通过 launch-prefix 让部分节点单独在新的终端窗口运行,便于调试。

2. Launch 文件的基本使用

2.1 创建 Launch 文件

为了避免 Launch 文件散落在不同的目录中,建议在 ROS 包(package)中创建 launch 文件夹,并统一存放 Launch 文件。例如:

my_ros_package/
  ├── launch/
  │    ├── multi_node.launch
  │    └── debug_node.launch
  └── src/

ROS 可以自动匹配 launch 目录中的文件,因此无论该目录位于哪个包下,系统都能正确找到 Launch 文件。

2.2 Launch 文件的 XML 语法

Launch 文件采用 XML 格式,基本结构如下:

<launch>
    <node pkg="package_name" type="node_executable" name="node_name" />
</launch>

其中:

  • pkg:指定该节点所属的 ROS 软件包名称。
  • type:指定该节点的可执行文件名(不含路径)。
  • name:指定该节点的名称(在 rosnode list 中显示的名称)。

3. 运行多个节点

3.1 启动多个 ROS 节点

下面是一个示例 Launch 文件,它会同时启动三个 ROS 节点:

<launch>
    <node pkg="ssr_pkg" type="sensor_node" name="sensor_node" />
    <node pkg="ssr_pkg" type="sensor_node_2" name="sensor_node_2" />
    <node pkg="atr_pkg" type="ma_node" name="ma_node" output="screen" />
</launch>

在终端中运行:

roslaunch my_ros_package multi_node.launch

3.2 运行效果

在运行上面的 Launch 文件后,可以看到 ma_node 仅显示 sensor_node_2 发送的信息:
在这里插入图片描述

这是因为 ROS_WARN 级别的日志信息会默认直接输出,而 ROS_INFO 级别的信息可能不会显示。为了确保所有输出信息都能正确显示,我们可以在 ma_node 运行时添加 output="screen",确保它的终端输出:

<node pkg="atr_pkg" type="ma_node" name="ma_node" output="screen" />

此时,即可在终端中正常显示所有节点的信息:
在这里插入图片描述


4. 在单独终端中运行某个节点

有时候,我们可能希望单独调试某个节点,而不是所有节点都共享同一个终端。可以使用 launch-prefix="gnome-terminal -e" 让该节点在新的终端窗口运行。例如:

<launch>
    <node pkg="ssr_pkg" type="sensor_node" name="sensor_node" />
    <node pkg="ssr_pkg" type="sensor_node_2" name="sensor_node_2" />
    
    <!-- 让 ma_node 在单独的终端中运行 -->
    <node pkg="atr_pkg" type="ma_node" name="ma_node" launch-prefix="gnome-terminal -e" />
</launch>

4.1 运行效果

此时,ma_node 会在一个新的 Ubuntu 终端窗口中运行,方便调试:
在这里插入图片描述


5. Launch 文件的完整格式

完整的 XML 结构示例如下:

<launch>
    <!-- 启动多个节点 -->
    <node pkg="package_name" type="node1_executable" name="node1" />
    <node pkg="package_name" type="node2_executable" name="node2" />

    <!-- 设置参数 -->
    <node pkg="package_name" type="node3_executable" name="node3">
        <param name="param_name" value="param_value" />
    </node>

    <!-- 让某个节点在单独的终端中运行 -->
    <node pkg="package_name" type="node4_executable" name="node4" launch-prefix="gnome-terminal -e" />

    <!-- 加载其他 Launch 文件 -->
    <include file="$(find package_name)/launch/another_launch_file.launch" />
</launch>

6. 小结

  • launch 文件可以同时启动多个 ROS 节点,简化运行流程。
  • 使用 output="screen" 确保节点输出在终端可见。
  • 通过 launch-prefix="gnome-terminal -e" 在单独终端中运行某些节点,便于调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值