ROS2入门:Ubuntu环境部署与Python/C++双语言实战
2026/9/10 18:21:08 网站建设 项目流程

新手入门机器人开发,最难的不是写代码,而是把环境铺好。很多人在 Ubuntu 上装完 ROS2,启动示例节点时发现找不到 package,或者 VSCode 里无法自动补全 ROS2 的接口,更别提用 Python 和 C++ 分别跑通发布订阅模型。网上教程虽然多,但要么只讲一种语言,要么跳过环境细节,照着做总是卡壳。

本文整理了一套面向零基础同学的 ROS2 环境部署与开发环境配置方案,涵盖 Ubuntu 系统准备、ROS2 安装、VSCode 插件配置、Python 与 C++ 双语言 HelloWorld 实战,以及常见报错排查。跟着步骤走,你可以在自己的电脑上从零搭建一套可用的机器人开发环境。

需要说明的是,ROS2 已有多个发行版,不同 Ubuntu 版本对应的 ROS2 版本不同。本文会先讲解版本选型原则,再以最常见的组合为例演示完整流程。如果你使用的是其他版本,配置思路是相通的,只需把版本号替换为对应发行版即可。

1. ROS2 环境部署前的概念梳理

1.1 为什么是 ROS2 而不是 ROS1

ROS(Robot Operating System,机器人操作系统)并不是传统意义上的操作系统,而是一套分布式通信框架,它提供了进程之间的消息传递、设备驱动、功能包管理和可视化工具,帮助开发者把传感器、算法、执行器组合成一个完整的机器人系统。

ROS1 诞生较早,在设计上存在一些明显局限:通信依赖单个 Master 节点,Master 挂掉则整个系统瘫痪;实时性支持不足;跨机器通信配置复杂;Python 2 到 Python 3 的过渡也带来了兼容性问题。

ROS2 重新设计了通信架构,核心变化是:

对比维度ROS1ROS2
通信机制基于 TCPROS/UDPROS,依赖 Master基于 DDS(数据分发服务),去中心化
实时性支持有限原生支持实时通信
Python 版本依赖 Python 2(早期)原生支持 Python 3
多机通信配置繁琐DDS 自动发现,跨机部署方便
安全性较弱支持 DDS 安全机制
生命周期停止维护(ROS1 Noetic 是最终版)持续更新

因此,对于新手来说,直接学习 ROS2 是更合理的选择。

1.2 ROS2 的核心通信模型

在开始写 HelloWorld 之前,先理解 ROS2 中最基础的几个概念。

  • 节点(Node):一个可执行程序,负责完成某一项具体任务,例如读取激光雷达数据、控制电机、运行导航算法。
  • 话题(Topic):节点之间异步通信的通道。一个节点发布消息到话题,另一个节点订阅该话题接收消息。适合传感器数据等持续更新的数据流。
  • 服务(Service):节点之间同步通信的方式。客户端发送请求,服务端返回响应,适合一次性调用,例如拍照、开关灯。
  • 动作(Action):适合耗时较长的任务,例如导航到目标点,可以反馈进度并支持取消。
  • 工作空间(Workspace):通常指包含多个 ROS2 功能包的目录结构,使用src目录存放源码,通过colcon build编译。

HelloWorld 通常实现的是发布者(Publisher)和订阅者(Subscriber)两个节点,通过话题完成双向通信,这也是理解 ROS2 通信机制最直观的入门示例。

2. 环境准备与版本说明

2.1 硬件要求

运行 ROS2 对电脑要求不算高,但虚拟机和实体机体验差异较大。建议配置如下:

  • 处理器:双核及以上,推荐四核
  • 内存:8GB 及以上
  • 硬盘:至少 30GB 空闲空间
  • 操作系统:Ubuntu 22.04 或 24.04(推荐 22.04 长期支持版)

如果使用虚拟机,建议给虚拟机分配至少 4GB 内存和 2 个 CPU 核心,否则编译和运行 turtlesim 等示例会明显卡顿。若条件允许,优先使用双系统或实体 Linux 主机。

2.2 确认 Ubuntu 版本与 ROS2 发行版

ROS2 的每个发行版都有对应的 Ubuntu 版本。截至本文写作时,常见的对应关系如下:

Ubuntu 版本对应 ROS2 发行版支持状态
Ubuntu 22.04 LTSHumble Hawksbill长期支持
Ubuntu 24.04 LTSJazzy Jalisco长期支持
Ubuntu 20.04 LTSFoxy Fitzroy已停止维护(不建议新项目使用)

新手推荐使用 Ubuntu 22.04 搭配 ROS2 Humble,原因是社区资料最多,第三方功能包兼容性最好。若你已经在使用 Ubuntu 24.04,可以安装 Jazzy,步骤类似,只需把仓库地址和版本代号替换为对应名称。

2.3 安装前的系统设置

打开终端,依次执行以下操作。

更新软件源:

sudo apt update sudo apt upgrade -y

安装基础工具:

sudo apt install -y curl wget git build-essential cmake python3-pip

设置 UTF-8 编码环境,避免后续 ROS2 文本输出乱码:

sudo apt install -y locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 export LANG=en_US.UTF-8

3. ROS2 完整环境部署

3.1 方式一:官方仓库安装

ROS2 提供了官方 apt 仓库,安装步骤明确,适合希望了解底层细节的开发者。

步骤 1:添加 ROS2 软件源
sudo apt install -y software-properties-common sudo add-apt-repository universe sudo apt update
步骤 2:添加 ROS2 GPG 密钥

以 Ubuntu 22.04 安装 Humble 为例:

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

如果下载慢或失败,可以手动下载 ros.key 文件后放到对应目录。

步骤 3:添加 ROS2 仓库到 apt 源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
步骤 4:安装 ROS2 桌面版

桌面版包含 ROS 基础功能、可视化工具、示例程序和模拟器,适合学习和开发:

sudo apt update sudo apt upgrade -y sudo apt install -y ros-humble-desktop

如果只需要核心通信功能,可以安装精简版:

sudo apt install -y ros-humble-ros-base
步骤 5:设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc
步骤 6:安装构建工具

ROS2 使用colcon编译工作空间,需要单独安装:

sudo apt install -y python3-colcon-common-extensions

同时建议安装rosdep用于自动安装依赖:

sudo apt install -y python3-rosdep sudo rosdep init rosdep update

3.2 方式二:使用社区一键安装工具

国内网络环境下,官方源可能较慢。社区提供了一键安装脚本,可以自动检测系统版本并安装对应 ROS2 发行版,适合希望快速搭建环境的初学者。

在终端执行:

wget http://fishros.com/install -O fishros && . fishros

运行后按提示选择 ROS2 安装、选择对应发行版即可。脚本会自动配置镜像源和环境变量。

需要说明的是,社区脚本简化了安装流程,节省时间,但建议成功安装后仍然运行一次ros2 doctor检查环境完整性,避免隐藏问题。

3.3 验证安装是否成功

安装完成后,打开新终端,执行:

ros2 --help

如果输出 ROS2 命令帮助信息,说明安装成功。再运行一个更直观的测试:

ros2 run turtlesim turtlesim_node

如果弹出蓝色窗口的海龟模拟器,说明 ROS2 核心功能运行正常。

此时可以再打开一个新终端,运行:

ros2 run turtlesim turtle_teleop_key

然后用方向键控制乌龟移动。看到乌龟在窗口中响应按键,说明节点间的通信机制已经正常工作,这是一个比 HelloWorld 更直观的“居然跑起来了”验证。

3.4 卸载与重装

如果安装过程出错,需要清理重来,可以执行:

sudo apt remove ros-humble-* sudo apt autoremove

删除仓库源文件:

sudo rm /etc/apt/sources.list.d/ros2.list sudo rm /usr/share/keyrings/ros-archive-keyring.gpg

然后重新从第 3.1 节开始。

4. VSCode 开发环境配置

4.1 安装 VSCode

ROS2 开发离不开一个好用的编辑器。VSCode 免费、插件丰富、对 Python 和 C++ 支持完善,是 ROS2 开发的主流选择。

方式一:通过官方 deb 包安装

访问 VSCode 官网下载.deb安装包,然后在终端执行:

sudo dpkg -i code_*.deb sudo apt install -f -y

方式二:通过 Snap 安装

sudo snap install code --classic

安装完成后,在终端输入code即可启动。

4.2 中文界面配置

第一次打开 VSCode 是英文界面。点击左侧扩展图标,搜索Chinese (Simplified),安装第一个结果,然后按Ctrl+Shift+P打开命令面板,输入Configure Display Language,选择中文(简体),重启 VSCode 即可。

4.3 必装插件清单

以下插件建议全部安装,覆盖 ROS2 开发全流程:

插件名称作用
ROS提供 ROS2 消息类型识别、launch 文件高亮、调试配置等能力
C/C++微软官方 C++ 扩展,提供智能提示、调试、代码跳转
PythonPython 语言支持,提供智能提示和调试
CMakeCMake 语法高亮和辅助工具
CMake Tools简化 CMake 项目构建流程
Msg Language SupportROS2.msg消息文件语法支持
URDFURDF 机器人模型文件语法高亮
Markdown All in One写文档、写博客时使用
GitLensGit 代码冲突、提交记录查看

安装步骤:点击左侧扩展图标,在搜索框输入插件名,点击 Install。

4.4 配置 Python 开发环境

打开 VSCode 设置,搜索python.autoComplete.extraPaths,把 ROS2 的 Python 模块路径加入自动补全列表:

{ "python.autoComplete.extraPaths": [ "/opt/ros/humble/lib/python3.10/site-packages" ], "python.analysis.extraPaths": [ "/opt/ros/humble/lib/python3.10/site-packages" ] }

如果你使用的是 Ubuntu 24.04 和 Jazzy,路径类似,需要把humble替换为jazzy,Python 版本号按实际目录调整。

4.5 配置 C/C++ 开发环境

ROS2 的 C++ 头文件位于/opt/ros/humble/include。为了让 VSCode 正确识别头文件路径,需要在项目根目录创建.vscode/c_cpp_properties.json

{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/opt/ros/humble/include/**" ], "defines": [], "compilerPath": "/usr/bin/g++", "cStandard": "c17", "cppStandard": "gnu++17", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 }

创建 ROS2 工作空间后,建议把 workspace 文件夹直接用 VSCode 打开,这样插件能正确加载整个项目的编译上下文。

4.6 配置 launch.json 调试参数

ROS2 Python 节点可以用 VSCode 调试。在项目根目录创建.vscode/launch.json

{ "version": "0.2.0", "configurations": [ { "name": "Python: ROS2 Node", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "cwd": "${workspaceFolder}", "env": { "PYTHONPATH": "/opt/ros/humble/lib/python3.10/site-packages:${env:PYTHONPATH}" } } ] }

调试 C++ 节点时,需要先使用colcon build编译,再在 launch.json 中指定可执行文件路径。

5. 双语言 HelloWorld 实战

接下来我们分别用 Python 和 C++ 实现 ROS2 的发布者与订阅者示例。先创建共享的工作空间,再在src下分别创建两个功能包。

5.1 创建 ROS2 工作空间

mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src

5.2 使用 Python 编写发布者与订阅者

创建 Python 功能包
cd ~/ros2_ws/src ros2 pkg create py_hello_world --build-type ament_python --dependencies rclpy std_msgs

参数说明:

  • py_hello_world:功能包名称
  • --build-type ament_python:指定 Python 构建类型
  • --dependencies rclpy std_msgs:声明依赖,rclpy 是 ROS2 Python 客户端库,std_msgs 提供标准消息类型

命令执行后,会在src下生成py_hello_world目录,结构如下:

py_hello_world/ ├── package.xml ├── py_hello_world/ │ └── __init__.py ├── resource ├── setup.cfg ├── setup.py └── test
编写发布者节点

py_hello_world/py_hello_world/目录下新建talker.py

# 文件路径:src/py_hello_world/py_hello_world/talker.py import rclpy from rclpy.node import Node from std_msgs.msg import String class TalkerNode(Node): def __init__(self): super().__init__('talker_node') self.publisher = self.create_publisher(String, 'hello_topic', 10) self.timer = self.create_timer(1.0, self.timer_callback) self.count = 0 def timer_callback(self): msg = String() msg.data = f'Hello ROS2 from Python, count: {self.count}' self.publisher.publish(msg) self.get_logger().info(f'Publishing: {msg.data}') self.count += 1 def main(args=None): rclpy.init(args=args) node = TalkerNode() try: rclpy.spin(node) except KeyboardInterrupt: pass finally: node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main()

代码说明:

  • create_publisher(String, 'hello_topic', 10)创建了一个发布者,消息类型为String,话题名为hello_topic,队列长度 10。
  • create_timer(1.0, self.timer_callback)创建了一个周期为 1 秒的定时器,每秒触发一次回调函数。
  • rclpy.spin(node)让节点持续运行,不断处理事件。
编写订阅者节点

py_hello_world/py_hello_world/目录下新建listener.py

# 文件路径:src/py_hello_world/py_hello_world/listener.py import rclpy from rclpy.node import Node from std_msgs.msg import String class ListenerNode(Node): def __init__(self): super().__init__('listener_node') self.subscription = self.create_subscription( String, 'hello_topic', self.listener_callback, 10 ) def listener_callback(self, msg): self.get_logger().info(f'Received: {msg.data}') def main(args=None): rclpy.init(args=args) node = ListenerNode() try: rclpy.spin(node) except KeyboardInterrupt: pass finally: node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main()
注册节点入口

编辑setup.py,在entry_points中添加两个控制台脚本:

entry_points={ 'console_scripts': [ 'talker = py_hello_world.talker:main', 'listener = py_hello_world.listener:main', ], },

保存后,使用colcon build编译并运行,见 5.4 节。

5.3 使用 C++ 编写发布者与订阅者

创建 C++ 功能包
cd ~/ros2_ws/src ros2 pkg create cpp_hello_world --build-type ament_cmake --dependencies rclcpp std_msgs

命令执行后生成cpp_hello_world目录。

编写发布者节点

src/cpp_hello_world/src/目录下新建talker.cpp

// 文件路径:src/cpp_hello_world/src/talker.cpp #include <chrono> #include <functional> #include <memory> #include <string> #include "rclcpp/rclcpp.hpp" #include "std_msgs/msg/string.hpp" using namespace std::chrono_literals; class TalkerNode : public rclcpp::Node { public: TalkerNode() : Node("cpp_talker_node"), count_(0) { publisher_ = this->create_publisher<std_msgs::msg::String>("hello_topic", 10); timer_ = this->create_wall_timer( 1s, std::bind(&TalkerNode::timer_callback, this)); } private: void timer_callback() { auto message = std_msgs::msg::String(); message.data = "Hello ROS2 from C++, count: " + std::to_string(count_); publisher_->publish(message); RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str()); count_++; } rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_; rclcpp::TimerBase::SharedPtr timer_; size_t count_; }; int main(int argc, char * argv[]) { rclcpp::init(argc, argv); rclcpp::spin(std::make_shared<TalkerNode>()); rclcpp::shutdown(); return 0; }
编写订阅者节点

src/cpp_hello_world/src/目录下新建listener.cpp

// 文件路径:src/cpp_hello_world/src/listener.cpp #include <memory> #include "rclcpp/rclcpp.hpp" #include "std_msgs/msg/string.hpp" class ListenerNode : public rclcpp::Node { public: ListenerNode() : Node("cpp_listener_node") { subscription_ = this->create_subscription<std_msgs::msg::String>( "hello_topic", 10, std::bind(&ListenerNode::listener_callback, this, std::placeholders::_1) ); } private: void listener_callback(const std_msgs::msg::String & msg) const { RCLCPP_INFO(this->get_logger(), "Received: '%s'", msg.data.c_str()); } rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_; }; int main(int argc, char * argv[]) { rclcpp::init(argc, argv); rclcpp::spin(std::make_shared<ListenerNode>()); rclcpp::shutdown(); return 0; }
修改 CMakeLists.txt

编辑src/cpp_hello_world/CMakeLists.txt,在文件末尾添加:

add_executable(talker src/talker.cpp) ament_target_dependencies(talker rclcpp std_msgs) add_executable(listener src/listener.cpp) ament_target_dependencies(listener rclcpp std_msgs) install(TARGETS talker listener DESTINATION lib/${PROJECT_NAME} )

保存后编译运行,见 5.4 节。

5.4 编译和运行

回到工作空间根目录,执行编译:

cd ~/ros2_ws colcon build --symlink-install

--symlink-install参数对 Python 开发很友好,修改 Python 源码后无需重新编译即可生效。

编译完成后,需要重新 source 环境,让当前终端识别新功能包:

source ~/ros2_ws/install/setup.bash
运行 Python 发布者与订阅者

打开终端 A:

source /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash ros2 run py_hello_world talker

打开终端 B:

source /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash ros2 run py_hello_world listener

预期输出:

终端 A 每 1 秒输出一条发布日志:

[INFO] [tal~er_node]: Publishing: Hello ROS2 from Python, count: 0 [INFO] [tal~er_node]: Publishing: Hello ROS2 from Python, count: 1

终端 B 同步输出:

[INFO] [lis~er_node]: Received: Hello ROS2 from Python, count: 0 [INFO] [lis~er_node]: Received: Hello ROS2 from Python, count: 1
运行 C++ 发布者与订阅者

保持上述终端不变,新开终端 C 运行:

source /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash ros2 run cpp_hello_world talker

可以看到终端 B 同时接收到 Python 节点和 C++ 节点发布的消息。这验证了 ROS2 跨语言通信能力:Python 写的发布者可以被 C++ 写的订阅者接收,反之亦然。

5.5 使用 rqt_graph 查看节点关系

运行rqt_graph可以直观看到节点和话题之间的关系:

source /opt/ros/humble/setup.bash rqt_graph

在弹出的窗口中选择一个相对简单的视图,可以看到talker_nodelistener_node通过hello_topic话题连接在一起,形成一个通信链路。

6. 常见问题与排查指南

问题现象常见原因解决思路
ros2: command not found环境变量未 source执行source /opt/ros/humble/setup.bash,并写入~/.bashrc
Package 'py_hello_world' not found未 source install/setup.bash编译后执行source ~/ros2_ws/install/setup.bash
colcon build找不到命令colcon 未安装执行sudo apt install python3-colcon-common-extensions
Python 脚本无法 import rclpyPython 环境未配置确认使用系统 Python,检查/opt/ros/humble/lib/python3.10/site-packages是否存在
C++ 编译报找不到头文件VSCode includePath 未配置c_cpp_properties.json中添加/opt/ros/humble/include/**
虚拟机运行 turtlesim 非常卡虚拟机资源不足提高虚拟机内存和处理器核心数,或改用双系统
rosdep update超时网络问题检查网络,或使用社区镜像源
多个终端反复 source 很麻烦每次新开终端都需要手动 source把 source 命令写入~/.bashrc,并确保只写一次

6.1 详细排查:环境变量未生效

如果你运行ros2命令时提示找不到命令,最可能是环境变量没有生效。

检查~/.bashrc末尾是否有:

source /opt/ros/humble/setup.bash

如果没有,手动添加:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc

注意,每次重新打开终端后,source命令会自动执行,但如果你手动运行bash而不是登录 shell,可能需要重新执行。

6.2 详细排查:找不到功能包

编译完工作空间后,经常出现Package 'xx' not found的情况。这是因为colcon build生成的可执行文件位于install目录,需要 source 该目录下的setup.bash才能被 ROS2 发现。

每次新开终端,执行:

source ~/ros2_ws/install/setup.bash

也可以将其写入~/.bashrc,但要注意不要重复添加多次,否则环境变量会异常。

6.3 详细排查:colcon build 失败

如果编译时提示缺少依赖,可以先用rosdep安装依赖:

cd ~/ros2_ws rosdep install -i --from-path src --rosdistro humble -y

如果是 Python 包依赖问题,可以使用 pip 安装:

pip3 install <package-name>

编译失败时,重点看终端最后几行报错信息,常见是 CMakeLists.txt 中忘记添加ament_target_dependencies,或者 Python 包入口写错。

6.4 详细排查:VSCode 无法跳转定义

很多同学用 VSCode 打开 ROS2 项目时,发现 Ctrl+点击无法跳转到 rclcpp 或 rclpy 的定义位置。

对于 C++,确认.vscode/c_cpp_properties.jsonincludePath包含了/opt/ros/humble/include/**。配置后重启 VSCode,再执行一次C/C++: Reset IntelliSense Database

对于 Python,确认设置中的python.analysis.extraPaths路径正确。如果仍然无法跳转,建议打开 VSCode 的命令面板,执行Python: Clear Cache and Reload Window

7. 最佳实践与工程建议

7.1 工作空间命名与组织

建议使用~/ros2_ws作为默认工作空间,在src下按功能划分目录,例如:

src/ ├── bringup # 启动文件 ├── navigation # 导航相关功能包 ├── perception # 感知相关功能包 ├── robot_bringup # 机器人启动脚本 └── utils # 通用工具包

功能包命名建议采用小写下划线风格,例如robot_base_bringuplidar_processing。避免使用中文、空格和特殊字符。

7.2 管理环境变量

不要把大量source命令无脑堆在~/.bashrc中。建议只保留基础环境:

source /opt/ros/humble/setup.bash

工作空间的source在需要时手动执行,或者通过别名管理:

alias ws='source ~/ros2_ws/install/setup.bash'

这样每次新开终端只需输入ws即可。

7.3 使用 launch 文件

当节点数量增多后,不要手动开多个终端分别ros2 run。建议编写 launch 文件统一启动。

在 Python 功能包中创建launch/hello_launch.py

# 文件路径:src/py_hello_world/launch/hello_launch.py from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='py_hello_world', executable='talker', name='py_talker' ), Node( package='py_hello_world', executable='listener', name='py_listener' ), ])

然后在setup.py中注册 launch 文件:

data_files=[ (share_directory, ['package.xml']), (os.path.join(share_directory, 'launch'), glob(os.path.join('launch', '*launch.py'))), ],

运行:

ros2 launch py_hello_world hello_launch.py

launch 文件是 ROS2 项目中非常重要的工程化手段,后期做机器人整机启动时几乎每天都会用到。

7.4 版本管理与回滚

建议在创建功能包后立刻初始化 Git 仓库:

cd ~/ros2_ws git init git add . git commit -m "init ros2 workspace"

对功能包进行重大修改前,先提交一次,防止破坏性变更无法恢复。

7.5 使用模拟器加快开发

ROS2 生态中有多个模拟器可以不用真实硬件就能验证算法:

  • Gazebo:经典机器人仿真平台,支持传感器仿真和物理引擎,可搭配 ROS2 使用。
  • Rviz2:数据可视化工具,可以显示机器人模型、传感器数据、路径规划结果。
  • Webots:跨平台机器人仿真软件,支持 ROS2 接口。
  • Isaac Sim:NVIDIA 出品的仿真平台,适合视觉和强化学习场景,但对显卡要求较高。

对于新手来说,先掌握 Gazebo 和 Rviz2 是最稳妥的选择。后续学习 SLAM、导航、机械臂控制时,这些工具会成为主力。

7.6 常见安全与权限提醒

  • 如果需要修改系统级配置,务必在测试环境验证后再操作。
  • 使用sudo时谨慎确认命令内容,不要盲目执行来历不明的脚本。
  • 在真实机器人上运行节点前,先在模拟器中验证逻辑和安全性,尤其是涉及电机驱动、底盘控制的代码。
  • 如果涉及kill、删除文件等操作,先确认进程和文件路径,避免误删工作空间源码。

8. 总结与学习路线

通过本文,你已经完成了 ROS2 开发环境的完整搭建,掌握了以下关键技能:

  • 理解 ROS2 核心概念,包括节点、话题、服务、动作和工作空间。
  • 根据 Ubuntu 版本选择正确的 ROS2 发行版,并完成环境部署。
  • 安装并配置 VSCode,为 Python 和 C++ 开发提供智能提示和调试支持。
  • 分别使用 Python 和 C++ 编写发布者与订阅者节点,并成功实现跨语言通信。
  • 掌握常见的环境问题和报错排查方法。

下一步建议按照以下顺序继续学习:

  1. 深入学习 ROS2 话题、服务、动作的完整用法,尝试自定义消息类型。
  2. 学习launch文件的高级用法,统一启动多个节点。
  3. 学习 URDF 机器人建模,在 Rviz2 中显示自己的机器人模型。
  4. 学习 Gazebo 仿真,给机器人添加传感器和物理属性。
  5. 挑战一个综合项目,例如基于 ROS2 的差速底盘小车:建图、定位、导航一气呵成。

ROS2 的入门曲线确实比普通软件开发陡峭一些,但环境一旦打通,后续学习会顺利很多。本文涉及的代码量不大,关键在于每一步的执行顺序和环境细节。建议打开终端跟着做一遍,遇到报错不要急着改,先看错误信息,再对照第 6 节排查思路逐项确认。

如果你在配置过程中遇到了本文没有覆盖到的问题,欢迎留言说明你的 Ubuntu 版本、ROS2 发行版和具体报错信息,我可以继续补充对应的排查方案。

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

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

立即咨询