一、ROS2概述与环境搭建

欢迎来到ROS2的世界。说实话,我第一次接触ROS还是十多年前的ROS1时代,那时候装个系统能折腾一整天。现在ROS2成熟多了,但很多新手还是会在第一步就卡住。这一章,我带你从零开始,把环境搭好,把概念理清。

1.1 ROS2的历史:为什么会有ROS2?

ROS1诞生于2007年,初衷是给科研用的。但到了2015年左右,大家发现它有几个硬伤:

  • 实时性差——机器人控制需要毫秒级响应,ROS1做不到
  • 多机通信脆弱——依赖一个中心节点,它挂了整个系统就瘫了
  • 不支持多机器人——设计之初就没考虑这个场景

所以2014年,Open Robotics启动了ROS2项目。它基于DDS(数据分发服务)重新设计,解决了上述所有问题。我记得2017年第一次试用ROS2时,最直观的感受就是:启动快多了,而且不用再担心roscore崩溃。

核心时间线:

  • 2007年:ROS1诞生(Willow Garage)
  • 2014年:ROS2项目启动
  • 2017年:ROS2 Ardent Apalone(第一个正式版)
  • 2022年:ROS2 Humble(长期支持版,推荐新手使用)

1.2 核心概念:节点、话题、服务、动作

这四个概念是ROS2的基石。我习惯把它们比作一个团队协作的场景:

节点(Node)

节点就是一个个独立的工作单元。比如一个摄像头驱动是一个节点,一个激光雷达驱动是另一个节点,路径规划又是一个节点。每个节点只干一件事,但组合起来就能完成复杂任务。

话题(Topic)

话题是节点之间通信的"广播频道"。一个节点往话题上发数据,其他节点订阅这个话题就能收到。比如摄像头节点往"/image_raw"话题发图像数据,图像处理节点订阅它就能拿到数据。

服务(Service)

服务是"一问一答"的模式。客户端发请求,服务端处理完返回结果。比如你让机械臂"移动到位置A",它执行完告诉你"已到达"。我在项目中常用服务来做一次性操作,比如校准传感器。

动作(Action)

动作是服务的升级版。它适合耗时长的任务,比如"导航到目标点"。动作可以反馈进度,还能中途取消。嗯,这个设计很实用,你想想看,如果导航到一半发现走错了,能取消重来多好。

我的建议:新手先重点掌握话题和服务。动作可以等用到导航或机械臂控制时再深入学。

1.3 ROS2与ROS1的区别

很多从ROS1转过来的同学会问:到底差在哪?我列个表,一目了然:

对比项 ROS1 ROS2
通信中间件 自定义TCP/UDP DDS(数据分发服务)
中心节点 需要roscore 去中心化,无单点故障
实时性 不支持 支持(通过DDS的QoS)
多机器人 不原生支持 原生支持
跨平台 主要Linux Linux/Windows/macOS
Python版本 Python 2 Python 3

说白了,ROS2就是ROS1的全面升级版。但要注意,两者不兼容——你不能在ROS2里直接跑ROS1的代码。我曾经帮一个团队迁移项目,花了整整两周改通信接口。

1.4 在Ubuntu上安装ROS2 Humble

我推荐新手用Ubuntu 22.04 + ROS2 Humble,这是目前最稳定的组合。下面一步步来:

第一步:设置语言环境

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

第二步:添加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 $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

第三步:安装ROS2 Humble

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

这个"ros-humble-desktop"包包含了ROS2的核心功能、可视化工具和常用库。如果你空间有限,可以只装"ros-humble-ros-base"(约200MB),但新手我建议装完整版。

注意:安装过程可能需要20-30分钟,取决于你的网速。我曾经在校园网环境下装到一半断连,结果依赖没装全,后面编译代码各种报错。所以,确保网络稳定再开始。

1.5 配置环境变量

装完ROS2后,每次打开终端都要先source一下才能用。我建议直接写进.bashrc:

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

如果你同时装了ROS1和ROS2,要注意环境变量冲突。我个人的做法是写两个别名:

alias ros1='source /opt/ros/noetic/setup.bash'
alias ros2='source /opt/ros/humble/setup.bash'

这样想用哪个就敲哪个,互不干扰。

1.6 验证安装

装好了?来验证一下。打开终端,依次运行:

# 终端1:启动一个C++ talker节点
ros2 run demo_nodes_cpp talker

# 终端2:启动一个Python listener节点
ros2 run demo_nodes_py listener

如果看到talker在发"Hello World",listener在收,那就说明安装成功了。我第一次验证通过时,说实话还挺激动的——虽然只是打印了几行字,但意味着整个环境都通了。

你也可以用命令行工具看看系统状态:

ros2 node list        # 查看所有节点
ros2 topic list       # 查看所有话题
ros2 topic echo /chatter  # 监听话题内容

避坑指南:如果运行ros2命令提示"command not found",八成是环境变量没source。检查一下~/.bashrc里有没有那行source命令。

知识体系总览

下面这张图概括了本章的核心内容,你可以把它当作学习地图:

ROS2入门:第1章知识体系 ROS2基础 • 发展历史(2007→2022) • 核心概念 - 节点(Node) - 话题(Topic) - 服务(Service) - 动作(Action) ROS1 vs ROS2 • 通信:自定义→DDS • 架构:中心化→去中心化 • 实时性:不支持→支持 • 多机器人:不原生→原生 • Python:2→3 环境搭建 • 安装ROS2 Humble • 配置环境变量 • 验证安装 • 运行Demo节点 • 常用CLI工具 学习路径建议 ① 理解概念 → ② 搭建环境 → ③ 运行Demo → ④ 动手写第一个节点 本章目标:能独立搭建ROS2开发环境,理解四大核心概念

环境搭好了,概念也清楚了。接下来就是动手写代码的时候了。记住,学ROS2最好的方式就是多敲命令、多跑Demo。遇到问题别慌,八成是环境变量没配好或者依赖没装全——我当年也是这么过来的。