☰
ROS2入门:命令行启动节点与Launch程序
2026/10/9 5:41:26 网站建设 项目流程

目录

一、前置必备:环境初始化(必做)

1. 系统ROS2基础环境

2. 自定义工作空间环境

二、核心一:ros2 run 启动单个节点

1. 标准语法

2. 实操示例(官方海龟模拟器)

3. 辅助查询命令(解决找不到文件问题)

三、核心二:ros2 launch 启动多节点程序

1. 标准语法

2. 实操示例

四、自定义功能包启动完整流程

1. 编译自定义功能包

2. 加载编译后的环境

3. 命令行启动程序

五、ROS2 CMake 工具核心使用(编译底层核心)

1. CMake 在 ROS2 中的作用

2. 原生 CMake 手动编译流程(理解底层)

3. ROS2 标准 CMakeLists.txt 核心配置解析

4. CMake 高频使用场景与技巧

5. CMake 常见编译报错避坑

六、配套调试命令(开发必备)

七、核心区别总结(新手必记)

八、常见报错避坑

结语


对于刚入门 ROS 2 的开发者来说,通过命令行启动程序是最基础、最核心的操作。不同于 ROS 1,ROS 2 优化了命令行语法,将单节点启动、多节点批量启动做了明确拆分,逻辑更清晰,但也容易让新手混淆ros2 run和ros2 launch的使用场景。

本文将从零讲解 ROS 2 命令行启动程序的两种核心方式,搭配通用实操命令、场景区分、配套调试工具和自定义包启动流程,适配 Humble、Iron、Jazzy 全版本 ROS 2,新手看完即可上手实操。

一、前置必备:环境初始化(必做)

ROS 2 所有命令行操作的前提是加载环境变量,否则终端会提示「找不到命令、找不到功能包」等报错,这是新手最高频的踩坑点。

1. 系统ROS2基础环境

每次新开终端,执行对应版本的环境加载命令,以最常用的 Humble 为例:

source /opt/ros/humble/setup.bash

2. 自定义工作空间环境

如果是自己创建的工作空间(如 ros2_ws),编译程序后需要额外加载工作空间环境:

source ~/ros2_ws/install/setup.bash

小技巧:可以将上述命令写入~/.bashrc,实现开机自动加载,无需每次手动执行。

二、核心一:ros2 run 启动单个节点

ros2 run是 ROS 2 启动单个独立节点的专属命令,适用于只需要运行某一个功能模块的简单场景,是最基础的启动方式。

1. 标准语法

ros2 run <功能包名> <可执行文件名>
  • 功能包名:ROS 2 项目的最小单元文件夹名称

  • 可执行文件名:功能包编译后生成的可执行程序名称(非文件夹名)

2. 实操示例(官方海龟模拟器)

# 启动海龟仿真节点 ros2 run turtlesim turtlesim_node

执行命令后,会弹出海龟仿真窗口,代表单个节点启动成功。新开终端输入下方命令,可单独启动键盘控制节点:

ros2 run turtlesim turtle_teleop_key

3. 辅助查询命令(解决找不到文件问题)

新手常不知道功能包的可执行文件名称,可通过以下命令查询:

# 列出指定包内所有可执行程序 ros2 pkg executables turtlesim # 查看功能包的安装路径 ros2 pkg prefix turtlesim

三、核心二:ros2 launch 启动多节点程序

实际开发中,一个机器人功能往往需要多个节点协同工作(如雷达节点+定位节点+导航节点),逐个用ros2 run启动效率极低,此时就需要ros2 launch。

ros2 launch通过读取 launch 启动文件,可一次性批量启动多个节点、配置参数、设置设备别名,是项目开发的主流启动方式。

1. 标准语法

ros2 launch <功能包名> <launch启动文件>

ROS 2 主流启动文件为.py格式(Python),兼容少量老旧.xml格式文件。

2. 实操示例

# 一键启动海龟仿真全套程序 ros2 launch turtlesim turtlesim.launch.py

单条命令即可完成多模块初始化,无需逐个启动节点,大幅提升开发效率。

四、自定义功能包启动完整流程

除了官方示例,我们自己编写的 ROS 2 程序,可按照「编译-加载环境-启动」三步完成启动,流程固定通用:

1. 编译自定义功能包

# 进入工作空间 cd ~/ros2_ws # 编译指定功能包 colcon build --packages-select 你的包名

2. 加载编译后的环境

source install/setup.bash

3. 命令行启动程序

# 启动单个自定义节点 ros2 run 你的包名 可执行文件名 # 启动自定义launch多节点程序 ros2 launch 你的包名 启动文件.py

五、ROS2 CMake 工具核心使用(编译底层核心)

前文使用的colcon build是 ROS2 封装的批量构建工具,其底层完全依赖 CMake实现源码编译、依赖配置、可执行文件生成。对于自定义 C++ 功能包,必须掌握基础 CMake 用法,才能解决编译报错、自定义编译规则、配置第三方依赖等问题,是进阶开发的核心技能。

1. CMake 在 ROS2 中的作用

ROS2 功能包通过根目录的CMakeLists.txt文件定义编译规则,CMake 的核心作用:扫描源码、解析依赖、生成编译配置文件、编译生成可执行节点/库文件,最终供ros2 run调用运行。Python 包无需 CMake,仅 C++ 功能包必备。

2. 原生 CMake 手动编译流程(理解底层)

日常开发用 colcon 批量编译,但排查编译报错、自定义编译参数时,需要掌握原生 CMake 编译三步流程,适配所有 ROS2 C++ 包:

# 1. 进入功能包编译目录(ROS2 固定编译目录 build) cd ~/ros2_ws/build/你的包名 # 2. CMake 生成编译配置(加载ROS2环境、解析CMakeLists规则) cmake .. # 3. 执行编译,生成可执行文件 make -j8

参数说明:-j8代表8线程编译,可根据电脑CPU核心数调整,加速编译速度。编译完成后,可执行文件会自动生成在install/你的包名/bin/目录下。

3. ROS2 标准 CMakeLists.txt 核心配置解析

新手无需手写完整配置,只需掌握核心固定字段,看懂、会修改即可,适配所有自定义C++节点:

# 1. 指定CMake最低版本(ROS2 Humble及以上推荐3.8+) cmake_minimum_required(VERSION 3.8) # 2. 定义功能包名称(必须和package.xml包名一致) project(your_package_name) # 3. 查找ROS2核心依赖(必配) find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) # C++节点核心依赖 # 4. 编译可执行节点(源码文件 + 生成的节点名) add_executable(your_node src/your_node.cpp) # 5. 绑定节点依赖库 ament_target_dependencies(your_node rclcpp) # 6. 安装节点到系统目录(关键!否则ros2 run找不到节点) install(TARGETS your_node DESTINATION lib/${PROJECT_NAME} ) ament_package()

4. CMake 高频使用场景与技巧

  • 清理旧编译缓存:修改CMakeLists.txt后必须清理缓存,否则配置不生效,执行rm -rf ~/ros2_ws/build ~/ros2_ws/install后重新编译

  • 指定C++编译标准:添加set(CMAKE_CXX_STANDARD 17),适配ROS2新版本语法特性

  • 添加第三方库:通过find_package(XXX REQUIRED)引入OpenCV、PCL等第三方依赖

5. CMake 常见编译报错避坑

  • 报错:No CMAKE_CXX_COMPILER:未安装编译工具,执行sudo apt install build-essential cmake安装依赖

  • 报错:ament_cmake not found:未source ROS2环境,编译前必须加载系统环境变量

  • 编译成功但找不到节点:CMakeLists中未配置install安装规则,节点未部署到运行目录

六、配套调试命令(开发必备)

启动程序后,可通过以下命令查看节点状态、排查异常,适配日常调试场景:

# 查看当前所有运行的节点 ros2 node list # 查看指定节点的详细信息(话题、服务、参数) ros2 node info /节点名

七、核心区别总结(新手必记)

启动命令

适用场景

核心特点

ros2 run

单个节点启动、单点调试

简单直接,仅启动一个可执行程序,无批量配置能力

ros2 launch

多节点联动、项目整体启动

支持批量启动、参数配置、节点管理,适合正式开发

八、常见报错避坑

  • 报错:Package not found:未加载环境变量,重新执行source环境命令即可

  • 报错:Executable not found:功能包未编译、可执行文件名输入错误

  • 节点启动无反应:终端未加载工作空间环境,编译后必须重新 source

结语

命令行启动是 ROS 2 开发的入门基石,熟练区分ros2 run和ros2 launch的使用场景,能快速适配单点调试和项目部署场景。后续复杂的机器人导航、建图、视觉项目,均基于这两种启动方式延伸。

建议新手多实操练习,结合节点查询、状态调试命令,彻底吃透基础用法,为后续进阶开发打好基础。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询