1. ROS2概述与环境搭建

大家好,我是你们的嵌入式系统讲师。今天咱们聊聊ROS2的起源、设计哲学,以及怎么在Ubuntu上把环境搭起来。这部分内容,说白了就是整个课程的基石。你想想看,如果地基没打好,后面盖再高的楼也悬。

1.1 ROS2的起源:为什么要有ROS2?

ROS1诞生于2007年,那时候机器人还比较「单纯」。我在2015年第一次接触ROS1时,觉得这东西真方便——节点通信、消息发布订阅,一套下来就能让机器人动起来。但后来在实际项目中,我遇到了不少头疼的问题。

比如,ROS1的通信依赖一个叫「roscore」的中心节点。这个节点一旦挂了,整个系统就瘫痪了。我记得有一次在工厂调试AGV小车,运行了8个小时后roscore莫名其妙崩溃了,小车直接停在产线中间……嗯,从那以后我就开始关注ROS2了。

ROS2从2015年开始设计,2017年发布第一个正式版本。它的目标很明确:解决ROS1在实时性、多机器人协作、跨平台支持等方面的短板。说白了,ROS2是为「工业级」机器人准备的。

1.2 设计哲学:ROS2到底改了啥?

ROS2的设计哲学,我总结为三个关键词:

  • 去中心化:不再依赖roscore。每个节点直接通过DDS(数据分发服务)通信。DDS本身就是工业级标准,支持实时传输、QoS(服务质量)控制。
  • 跨平台:ROS1主要跑在Linux上,ROS2支持Windows、macOS、RTOS(实时操作系统)。我在一个项目中把ROS2移植到了ARM Cortex-A系列芯片上,效果还不错。
  • 实时性:ROS2的通信栈支持硬实时。你可以给不同的消息设置不同的优先级。比如,电机控制指令的优先级可以高于传感器数据。

核心变化:ROS1用的是自定义的TCPROS/UDPROS协议,ROS2直接采用DDS标准。这意味着ROS2的通信更可靠、更灵活,但也更复杂——你需要理解DDS的QoS配置。

1.3 ROS1 vs ROS2:一张表说清楚

对比项 ROS1 ROS2
通信中间件 自定义TCPROS/UDPROS DDS(如Fast DDS、Cyclone DDS)
中心节点 需要roscore 无中心节点
实时性 不支持硬实时 支持硬实时(需配置)
跨平台 主要Linux Linux、Windows、macOS、RTOS
多机器人 较复杂 原生支持
安全性 无内置安全机制 支持DDS安全插件
Python版本 Python 2 Python 3

我个人习惯用这张表来跟团队新人解释。你想想看,ROS2几乎在每个维度上都做了升级。但要注意,升级也带来了学习成本——DDS的配置比ROS1的通信复杂不少。

1.4 在Ubuntu上安装ROS2 Humble

好,咱们开始动手。我选择ROS2 Humble作为教学版本,因为它是一个长期支持版(LTS),支持到2027年。你在实际项目中,也建议优先选LTS版本。

1.4.1 系统要求

  • Ubuntu 22.04 LTS(推荐)
  • 至少4GB内存,20GB磁盘空间
  • 网络连接(用于下载包)

注意:ROS2 Humble只支持Ubuntu 22.04。如果你用的是20.04,请安装ROS2 Foxy。我曾经见过有人硬要在20.04上装Humble,结果依赖冲突搞了一整天……别踩这个坑。

1.4.2 安装步骤

打开终端,按顺序执行以下命令:

# 1. 设置locale
sudo apt update && sudo apt install 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

# 2. 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
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

# 3. 安装ROS2 Humble桌面版(包含GUI工具)
sudo apt update
sudo apt install ros-humble-desktop

# 4. 安装开发工具(可选,但推荐)
sudo apt install ros-dev-tools

安装过程大概需要10-20分钟,取决于你的网速。我建议你泡杯咖啡,或者看看文档。

1.4.3 配置环境变量

安装完成后,需要把ROS2的环境变量加到你的shell配置文件中。我个人习惯用~/.bashrc

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

小技巧:如果你同时装了ROS1和ROS2,可以在~/.bashrc里写个别名来切换。比如:alias ros1='source /opt/ros/noetic/setup.bash'alias ros2='source /opt/ros/humble/setup.bash'。这样就不会冲突了。

1.5 验证安装

环境配好了,咱们来验证一下。打开两个终端窗口。

终端1:启动一个C++ talker节点

ros2 run demo_nodes_cpp talker

终端2:启动一个Python listener节点

ros2 run demo_nodes_py listener

如果一切正常,你会看到终端1不断发送「Hello World」消息,终端2不断接收并打印出来。就像这样:

[INFO] [talker]: Publishing: 'Hello World: 1'
[INFO] [talker]: Publishing: 'Hello World: 2'
[INFO] [listener]: I heard: 'Hello World: 1'
[INFO] [listener]: I heard: 'Hello World: 2'

看到这个输出,说明你的ROS2环境已经搭好了。恭喜你,迈出了第一步!

避坑指南:如果遇到「command not found」错误,多半是环境变量没配好。检查一下source /opt/ros/humble/setup.bash是否执行成功。我曾经在Docker容器里忘了source,折腾了半小时才发现……

1.6 本章小结

咱们今天聊了ROS2的起源、设计哲学,以及它和ROS1的区别。然后一步步在Ubuntu 22.04上安装了ROS2 Humble,配置了环境变量,最后用talker/listener验证了安装。

下一章,咱们会深入ROS2的核心概念——节点、话题、服务、动作。这些东西你理解了,后面写代码就顺了。

嗯,今天就到这儿。有问题随时在群里问,我看到就会回。


公众号:蓝海资料掘金营,微信deep3321