ROS2学习之launch文件 文章目录简介编写Launch文件修改启动文件简介在实际的机器人项目中一个系统可能包含几十个节点雷达驱动、底盘控制、SLAM、导航等如果全靠手动开终端启动不仅效率极低而且无法统一管理节点的参数和命名空间。为了协调这些功能ROS2的标准方案是采用Launch文件。采用Launch文件可以通过一条命令同时启动多个节点而且支持条件执行想启动哪个节点就启动哪个节点。另一方面也支持在文件中统一配置节点参数、重映射话题、设置命名空间等。下面基于之前的话题通信教程编写Launch一键启动发布者和订阅者节点。编写Launch文件在外层【restaurant_robot】中创建launch目录在launch目录中新建一个Python文件命名为pub_sub_launch.py。mkdir launch vim launch/pub_sub_launch.py文件内容如下# 导入 Launch 核心库fromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodedefgenerate_launch_description():# 这是 Launch 文件的入口函数必须返回一个 LaunchDescription 对象# 1. 定义 Publisher 节点pubNode(packagerestaurant_robot,# 功能包名executablerun_publisher,# setup.py 中注册的可执行文件名namemy_custom_pub,# 【可选】为节点重命名如果不写默认使用代码里的名字outputscreen# 将节点的日志输出到当前终端屏幕)# 2. 定义 Subscriber 节点subNode(packagerestaurant_robot,executablerun_subscriber,namemy_custom_sub,outputscreen)# 3. 将所有需要启动的节点放入 LaunchDescription 列表中并返回returnLaunchDescription([pub,sub])修改启动文件像之前所有示例一样Launch文件也需要指明入口即需要修改外层restaurant文件夹中的setup.py文件。vim setup.py首先确保文件顶部导入了 os 和 glob 模块如果没有就手动添加importosfromglobimportglob然后找到data_files列表在现有列表中追加一行配置用于包含launch目录data_files[# 现有内容不用动# 添加下面这一行将 launch 目录下所有匹配的文件安装到 share 目录中(os.path.join(share,package_name,launch),glob(os.path.join(launch,*launch.[pxy][yma]*))),],这行代码用glob匹配launch目录下所有以launch.py或launch.xml结尾的文件并将它们复制到安装目录的 share/restaurant_robot/launch 路径下。至此就可以编译、激活环境并运行了回到ros2_ws路径colcon build source install/setup.bash ros2 launch restaurant_robot pub_sub_launch.py运行后输出内容如下[INFO] [launch]: All log files can be found below /home/vboxuser/.ros/log/2026-07-28-01-01-05-589710-Ubuntu-3898 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [run_publisher-1]: process started with pid [3906] [INFO] [run_subscriber-2]: process started with pid [3907] [run_subscriber-2] [INFO] [1785200467.613633520] [my_sub]: received data:Hello ROS2: 0 [run_publisher-1] [INFO] [1785200467.613682214] [my_pub]: publishHello ROS2: 0 [run_publisher-1] [INFO] [1785200468.275424669] [my_pub]: publishHello ROS2: 1 [run_subscriber-2] [INFO] [1785200468.275892154] [my_sub]: received data:Hello ROS2: 1 [run_publisher-1] [INFO] [1785200469.274379359] [my_pub]: publishHello ROS2: 2 [run_subscriber-2] [INFO] [1785200469.274828949] [my_sub]: received data:Hello ROS2: 2