第119篇 ROS2 Launch系统入门——一键启动你的机器人

发布时间:2026/10/27 21:36:32
第119篇 ROS2 Launch系统入门——一键启动你的机器人 面试被问ROS2的Launch系统你用过吗launch文件里能做哪些事我说就是启动多个节点。面试官说launch文件里能传参数吗能做条件判断吗能包含其他launch文件吗我只能回答应该可以吧。面试结束后赶紧补了这块知识。为什么需要Launch一个机器人系统通常有十几个甚至几十个节点。每次启动都要一个个敲ros2 run命令你能想象有多崩溃。Launch文件就是用来解决这个问题的。一个launch文件可以一次性启动多个节点设置参数配置命名空间建立组件。一条命令搞定整个系统的启动。ros2 launch my_robot bringup.launch.pyLaunch文件的结构ROS2的launch文件是Python脚本不是XML了ROS1用的是XML。这意味着你可以用Python的所有能力变量、条件、循环、函数调用。最基本的launch文件from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( packagemy_robot, executablelidar_driver, namelidar, outputscreen ), Node( packagemy_robot, executablecontroller, namecontroller, outputscreen ) ])generate_launch_description()是入口函数必须返回一个LaunchDescription对象。里面放的就是要执行的Action最常见的是Node。package是包名executable是可执行文件名name是节点在ROS系统中的名字可以和executable不同outputscreen表示把日志输出到终端。传参数在launch文件中给节点传参数Node( packagemy_robot, executablecontroller, namecontroller, parameters[{ kp: 1.5, ki: 0.01, kd: 0.2, control_rate: 100.0 }], outputscreen )也可以从YAML文件加载参数import os from ament_index_python.packages import get_package_share_directory config os.path.join( get_package_share_directory(my_robot), config, controller.yaml ) Node( packagemy_robot, executablecontroller, parameters[config], outputscreen )get_package_share_directory会自动找到包的安装路径这样你不需要写死绝对路径。Launch参数launch文件本身也可以接受参数这样同一个launch文件可以有不同的启动配置from launch.actions import DeclareLaunchArgument from launch.substitutions import LaunchConfiguration def generate_launch_description(): # 声明参数 use_sim_arg DeclareLaunchArgument( use_sim, default_valuefalse, description是否使用仿真环境) namespace_arg DeclareLaunchArgument( namespace, default_value, description机器人命名空间) # 使用参数 controller_node Node( packagemy_robot, executablecontroller, namespaceLaunchConfiguration(namespace), parameters[{ use_sim: LaunchConfiguration(use_sim) }] ) return LaunchDescription([ use_sim_arg, namespace_arg, controller_node ])启动时可以传参ros2 launch my_robot bringup.launch.py use_sim:true namespace:robot1这样同一个launch文件就能适配不同的场景仿真或实机单机或多机。包含其他Launch文件复杂系统通常有多层launch文件。比如bringup.launch.py是总入口它包含sensor.launch.py、navigation.launch.py等子文件。用IncludeLaunchDescription来包含其他launch文件还可以通过launch_arguments传递参数覆盖默认值。这种分层结构让launch文件更易维护。每个子系统有自己的launch文件总launch文件只负责组合。条件启动有时候你只想在特定条件下启动某个节点。比如只在仿真环境下启动Gazebofrom launch.conditions import IfCondition, UnlessCondition gazebo Node( packagegazebo_ros, executablegzserver, conditionIfCondition(LaunchConfiguration(use_sim)) )IfCondition在参数为true时启动节点UnlessCondition在参数为false时启动。面试中怎么聊面试官问Launch你可以说ROS2的launch文件是Python脚本支持参数声明、条件判断、包含子launch文件。可以一次性启动多个节点设置参数和命名空间。通过LaunchArgument实现参数化启动同一个launch文件适配仿真和实机不同场景。分层结构让复杂系统的启动更易管理。给你的建议把你项目里的启动命令整理成launch文件。先从一个节点开始然后逐步加入更多节点和参数。把常用的launch参数use_sim、namespace、debug标准化团队统一使用。这样每个人启动系统的方式都一样减少沟通成本。Launch文件的组织策略随着项目规模增长Launch文件会变得越来越复杂。一个良好的组织策略是把Launch文件按功能模块拆分比如robot_bringup负责启动硬件驱动navigation负责导航栈perception负责感知模块。然后用一个顶层Launch文件include这些子文件。参数也用类似的方式组织放在config目录下按模块分文件。补充一点Python版的Launch文件和C版的Launch文件可以混用但建议团队统一选择一种减少维护成本。Python版更灵活C版启动更快。Launch调试技巧launch文件出问题时可以加--debug参数查看详细日志ros2 launch my_package my_launch.py --debug。这会打印所有节点的启动过程、参数加载、事件触发等信息排查启动失败的原因特别有用。另外ros2 launch --show-args my_package my_launch.py可以查看launch文件接受的所有参数及其默认值不用翻源码。上一篇第118篇 ROS2动态重配置——运行时改变系统行为下一篇预告第120篇 ROS2 Launch进阶——参数传递、条件启动和节点编排

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询