1.需求

一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?

官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。

2.实现

  1. 选定功能包右击 —> 添加 launch 文件夹

  2. 选定 launch 文件夹右击 —> 添加 launch 文件

  3. 编辑 launch 文件内容

<launch>
    <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
    <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>

node —> 包含的某个节点

pkg -----> 功能包

type ----> 被运行的节点文件

name --> 为节点命名

output-> 设置日志的输出目标

  1. 运行 launch 文件

    roslaunch 包名 launch文件名

  2. 运行结果: 一次性启动了多个节点

实例

  1. 在src下的hello_vscode下创建launch文件夹,launch文件夹下是start_turtle.launch文件
  2. 这两个节点是ros自带的负责控制乌龟和显示的功能包和节点文件名
<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="turtle_GUI" />
    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_key" />
</launch>

里面的节点可以自行添加

  1. 执行`roslaunch hello_vscode start_turtle.launch

  1. 若是节点中有输出文本,则需要在标签里添加output=“screen”
    如下图

参考资料

https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p=32&spm_id_from=pageDriver&vd_source=b914a8de9ea8b12ba5cb6d8edd1b346c