ROS2入门:命令行启动节点与Launch程序

目录

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

[1. 系统ROS2基础环境](#1. 系统ROS2基础环境)

[2. 自定义工作空间环境](#2. 自定义工作空间环境)

[二、核心一:ros2 run 启动单个节点](#二、核心一:ros2 run 启动单个节点)

[1. 标准语法](#1. 标准语法)

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

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

[三、核心二:ros2 launch 启动多节点程序](#三、核心二:ros2 launch 启动多节点程序)

[1. 标准语法](#1. 标准语法)

[2. 实操示例](#2. 实操示例)

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

[1. 编译自定义功能包](#1. 编译自定义功能包)

[2. 加载编译后的环境](#2. 加载编译后的环境)

[3. 命令行启动程序](#3. 命令行启动程序)

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

[1. CMake 在 ROS2 中的作用](#1. CMake 在 ROS2 中的作用)

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

[3. ROS2 标准 CMakeLists.txt 核心配置解析](#3. ROS2 标准 CMakeLists.txt 核心配置解析)

[4. CMake 高频使用场景与技巧](#4. CMake 高频使用场景与技巧)

[5. 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 的使用场景,能快速适配单点调试和项目部署场景。后续复杂的机器人导航、建图、视觉项目,均基于这两种启动方式延伸。

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

相关推荐
小米里的大麦2 小时前
C++ 移动语义
c++·后端
jimy12 小时前
虚函数和 RTTI实现运行时多态
开发语言·c++
今夜有雨.2 小时前
图像运算、掩膜/ROI 与绘制交互
c语言·数据结构·c++·qt·算法·计算机视觉
UIU1142 小时前
P1028 [NOIP 2001 普及组] 数的计算
c++·算法
海盗12343 小时前
AI 新闻日报 2026-10-07:智能体迁往云端 / SDK 支持运行中改向 / 机器人进柜台与景区
人工智能·机器人·人工智能aigc
垆边人似月.3 小时前
日志时间窗口内的最大并发请求数(100分 / 滑动窗口 + 排序)
数据结构·c++·算法
Chen_harmony3 小时前
一、C++入门基础
开发语言·c++
水饺编程4 小时前
第1章,[Win32 章节]:Windows 的方方面面
c语言·c++·windows·visual studio
悠仁さん5 小时前
【C++】auto
java·前端·c++