ROS 2 文档中文翻译:About ROS 与 Ubuntu 安装指南(Jazzy Jalisco)

原文来源:ROS 2 Documentation(Jazzy)—— About ROS 及 Installation 章节中与 Ubuntu 平台相关的页面。


一、项目简介

**ROS(Robot Operating System,机器人操作系统)**是一个开源的机器人开发生态系统,提供用于构建、部署、运行和维护机器人应用的框架、工具与库。尽管名字中带有"操作系统",它并非传统意义上的操作系统,而是一套运行在 Ubuntu、Windows、macOS 等系统之上的中间件与工具集。

ROS 目前分为两代:

  • ROS 1:最初的版本,已停止开发,不再发布新版本;
  • ROS 2:当前活跃开发的版本,每年发布一个新的发行版(Distribution)。本译文对应的 Jazzy Jalisco 是 2024 年 5 月发布的长期支持(LTS)版本,官方支持平台为 Ubuntu 24.04(Noble)。

ROS 2 生态由四大板块构成:

  1. 框架(Framework):负责机器人各部件之间通信的"管道",包括节点(Node)、接口(话题/服务/动作)、参数和多语言客户端库;
  2. 工具(Tools):帮助开发者构建、测试和监控机器人系统,如可视化工具 RViz、启动管理、数据录制与回放(rosbag)等;
  3. 能力(Capabilities):可直接使用的功能包,涵盖仿真、运动规划、导航、机械臂操作、感知等;
  4. 社区(Community):由全球开发者、研究者和企业组成的开源社区,并与 Gazebo 仿真、Open-RMF 多机器人调度、ros-controls 实时控制等项目深度集成。

二、《About ROS》全文翻译

关于 ROS

ROS(机器人操作系统)是一个开源生态系统,为构建、部署、运行和维护机器人应用提供框架、工具和库。本文介绍该生态系统的主要板块及其预期用途。

领域:ROS 框架、ROS 工具、ROS 能力 | 内容类型:介绍 | 适合读者:初学者

概要

ROS 被广泛应用于机器人的诸多领域。
在物流领域,它通过提供导航、建图、运动控制以及多机器人之间的协调,帮助机器人在仓库中搬运货物。
在制造领域,它支持自动化抓取与放置等高级任务,借助视觉系统实现精确操作。
在医疗领域,ROS 支持辅助患者护理的机器人系统,并提升临床工作流程的效率。

观看 ROS 介绍视频 可快速了解。

生态系统

尽管名字叫"机器人操作系统",ROS 实际上并不是传统意义上的操作系统,而是一套帮助开发者使用各种平台和编程语言来构建机器人的工具与库的集合。

(原文此处配有 ROS 生态系统高层示意图的动画。)

框架(Framework)

ROS 框架是"管道系统",使机器人的各个组成部分之间、以及组成部分内部能够相互通信。它包括消息传递、标准接口,以及对多种编程语言和平台的支持。

例如,框架负责把数据从相机发送到处理节点,或者把指令从规划系统传递给电机控制器。它还提供了跨系统共享软件的结构,使开发者能够构建模块化、可复用的解决方案。

ROS 由以下基本组件构成:

  • 节点(Nodes)
  • 接口(话题、服务和动作)
  • 参数(Parameters)
  • 客户端库(Client libraries)

工具(Tools)

ROS 中的工具帮助开发者构建、测试和监控机器人系统。它们不会为机器人增加新的行为,但能让开发变得更轻松。

例如,可视化工具可以在测试期间以 3D 方式显示机器人的传感器、位置和环境,这在无人机或移动机器人项目中很常见。
借助启动控制工具,开发者可以在实际部署之前定义并验证机器人如何启动、如何管理其运行。
数据录制与回放工具允许你记录机器人的行为,以便事后检查——这在调试"机器人为什么做错了某件事"时尤其有用。

ROS 提供的核心工具集可以处理开发工作流中的以下环节:

  • 自省(Introspection)
  • 分析
  • 节点管理
  • 调试
  • 构建
  • 可视化
  • 包文档

能力(Capabilities)

ROS 中的能力是指开箱即用的软件包,为机器人提供常用功能,例如机械臂操作、运动规划和感知。这些软件包让开发者无需从零开始就能添加高级行为。

例如,操作类软件包可以控制机械臂,在自动化工作流中完成物体的抓取与放置。
运动规划软件包通过计算环境中的安全路径,让机器人从一点移动到另一点。
感知软件包使机器人能够检测和识别物体或人,支持取物等任务,或让机器人在需要对所见之物做出反应的环境中工作。
同一能力存在多种不同的实现,开发者可以切换实现方案并进行实验,以找到最适合自己需求的实现。

注意:除了 Open Robotics 维护的软件包之外,你还可以从 ROS 社区贡献的大量软件包中进行选择。

ROS 开箱提供或通过受支持的第三方方案提供以下核心能力:

  • 仿真
  • 运动规划
  • 导航
  • 操作(机械臂)
  • 感知

社区(Community)

ROS 社区是由开发者、研究者、企业和贡献者组成的全球性网络,帮助我们这个开源软件库不断成长和改进。人们可以为底层框架、工具和能力做出贡献;正因为有了社区,分享代码、交流想法和协作开发项目都变得十分容易。

集成(Integrations)

ROS 与 Open Robotics 的其他平台协同工作,让开发与部署更加轻松:

  • Gazebo:提供基于物理的仿真,使开发者能在使用真实硬件之前在虚拟环境中测试机器人。
  • Open-RMF(机器人中间件框架):帮助不同的机器人协同工作,并与电梯、门等楼宇系统交互。
  • ros-controls:使用 ROS 实现对机器人的实时控制。

这些集成让在任何预算、任何团队规模下,于复杂环境中设计、测试和管理机器人都变得更加简单。

ROS 发行版(Distributions)

ROS 发行版是按照固定周期发布的一整套 ROS 软件包。每个发行版提供核心库与工具的稳定版本,以及大量的社区软件包。这使开发者更容易基于一致的代码库开展工作,并保持项目的兼容性。

ROS 有两个主要版本:

  • ROS 1:最初的框架。
  • ROS 2:当前正在积极开发的版本。

ROS 1 的开发已经结束,不再计划发布新版本;而 ROS 2 仍在持续开发,每年都会发布新的发行版。这些发行版包含更新与改进,开发者可以在稳定性与最新特性之间做出选择。

支持的系统

ROS 可以运行在 Ubuntu、Windows 和 macOS 上,但我们强烈建议你使用对应 ROS 发行版的 Tier 1(一级支持)平台。macOS 上的 ROS 由社区支持,我们不推荐新用户使用。

对 Ubuntu 的支持取决于具体的 ROS 发行版,每个发行版都要求特定的 Ubuntu LTS(长期支持)版本。其他平台可能需要从源码构建或使用容器。

有关当前支持平台与支持等级的完整详情,请参阅 Rolling Ridley 的发行说明页面


三、Installation 章节中 Ubuntu 平台相关内容(全部翻译)

Installation 章节中与 Ubuntu 平台相关的页面共有三篇:Ubuntu(deb 软件包)Ubuntu(二进制包)Ubuntu(源码)。以下为完整翻译(文中的 jazzy 即本发行版的代号,命令中已按 Jazzy 版本代入)。

3.1 Ubuntu(deb 软件包)

ROS 2 Jazzy Jalisco 的 deb 软件包目前适用于 Ubuntu Noble(24.04)。目标平台定义见 REP 2000

资源
系统设置

设置区域语言(locale)

确保你的系统区域设置支持 UTF-8。如果你处于最小化环境(例如 Docker 容器)中,区域设置可能是类似 POSIX 的最小值。我们使用以下设置进行测试;不过,只要你使用的是其他支持 UTF-8 的区域设置,也应该没有问题。

$ locale  # 检查是否为 UTF-8

$ 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

$ locale  # 验证设置

启用所需的软件仓库

你需要把 ROS 2 的 apt 仓库添加到系统中。

首先确保已启用 Ubuntu Universe 仓库

$ sudo apt install software-properties-common
$ sudo add-apt-repository universe

ros-apt-source 软件包为各个 ROS 仓库提供密钥和 apt 源配置。

安装 ros2-apt-source 软件包即可为你的系统配置好 ROS 2 仓库。当该软件包的新版本发布到 ROS 仓库时,仓库配置会自动更新。

$ sudo apt update && sudo apt install curl -y
$ export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}')
$ curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb"
$ sudo dpkg -i /tmp/ros2-apt-source.deb

安装开发工具(可选)

如果你打算构建 ROS 软件包或进行其他开发工作,还可以安装开发工具:

警告

在 Ubuntu 24.04 安装中,你的 apt 源可能只包含基础的 noble 套件,这会在安装 ros-dev-tools 时导致依赖冲突。

检查 /etc/apt/sources.list.d/ubuntu.sources,确保 Suites: 一行包含 noble-updatesnoble-backports

$ grep Suites /etc/apt/sources.list.d/ubuntu.sources

如果缺少 noble-updatesnoble-backports,请编辑该文件,把这一行改为:

Suites: noble noble-updates noble-backports

然后运行:

$ sudo apt clean && sudo apt update && sudo apt full-upgrade -y
$ sudo apt update && sudo apt install ros-dev-tools
安装 ROS 2

设置好仓库之后,更新 apt 仓库缓存:

$ sudo apt update

ROS 2 软件包是在频繁更新的 Ubuntu 系统上构建的。建议在安装新软件包之前,始终确保你的系统是最新的:

$ sudo apt upgrade

桌面版安装(推荐):包含 ROS、RViz、示例和教程。

$ sudo apt install ros-jazzy-desktop

ROS-Base 安装(最小化):通信库、消息包、命令行工具。不含 GUI 工具。

$ sudo apt install ros-jazzy-ros-base

安装额外的 RMW 实现(可选)

ROS 2 默认使用的中间件是 Fast DDS,但中间件(RMW)可以在运行时替换。关于如何使用多个 RMW,请参阅相应指南

配置环境

通过 source 以下文件来配置环境:

$ source /opt/ros/jazzy/setup.bash

注意:如果你使用的不是 bash,请把 .bash 替换为你所用的 shell。可选值为:setup.bashsetup.shsetup.zsh

尝试一些示例

如果你上面安装的是 ros-jazzy-desktop,可以尝试一些示例。

在一个终端中,source 配置文件,然后运行一个 C++ 的 talker(发布者):

$ source /opt/ros/jazzy/setup.bash
$ ros2 run demo_nodes_cpp talker

在另一个终端中,source 配置文件,然后运行一个 Python 的 listener(订阅者):

$ source /opt/ros/jazzy/setup.bash
$ ros2 run demo_nodes_py listener

你应该会看到 talker 提示正在 Publishing(发布)消息,而 listener 提示 I heard(已收到)这些消息。这验证了 C++ 和 Python 的 API 都在正常工作。恭喜!

如果你想使用其他 RMW 实现,可以查阅 RMW 实现指南

后续步骤

继续阅读教程和示例,配置你的环境、创建自己的工作区和软件包,并学习 ROS 2 的核心概念。

故障排除

故障排除技巧请参阅安装故障排除指南

卸载

如果你在通过二进制方式安装之后需要卸载 ROS 2,或切换为基于源码的安装方式,请运行以下命令:

$ sudo apt remove '~nros-jazzy-*' && sudo apt autoremove

你可能还想移除软件仓库:

$ sudo apt remove ros2-apt-source
$ sudo apt update
$ sudo apt autoremove
$ sudo apt upgrade # 建议升级,以更新之前被遮蔽(shadowed)的软件包

3.2 Ubuntu(二进制包)

本页介绍如何在 Ubuntu Linux 上通过预编译二进制包安装 ROS 2。

注意

预编译二进制包并不包含所有 ROS 2 软件包。它包含了 ROS base 变体中的全部软件包,以及 ROS desktop 变体中的一部分软件包。具体的软件包清单由 ros2.repos 文件中列出的仓库所定义。

此外还有 deb 软件包可供选择。

系统要求

我们目前支持 Ubuntu Noble(24.04)的 64 位 x86 和 64 位 ARM。

系统设置

设置区域语言(locale):与 3.1 节相同,确保区域设置支持 UTF-8(命令见上文)。

启用所需的软件仓库:与 3.1 节相同,启用 Universe 仓库并安装 ros2-apt-source 软件包(命令见上文)。

安装前置依赖

有几个软件包是获取和解压二进制发行版所必需的:

$ sudo apt install tar bzip2 wget -y

安装开发工具(可选)

如果你打算构建 ROS 软件包或进行其他开发工作,还可以安装开发工具:

$ sudo apt update && sudo apt install ros-dev-tools
安装 ROS 2
  • 前往 releases 页面

  • 下载适用于 Ubuntu 的最新软件包;假设下载后位于 ~/Downloads/ros2-package-linux-x86_64.tar.bz2

    • 注意:可能有不止一个二进制下载选项,因此文件名可能有所不同。
  • 解压:

$ mkdir -p ~/ros2_jazzy
$ cd ~/ros2_jazzy
$ tar xf ~/Downloads/ros2-package-linux-x86_64.tar.bz2

使用 rosdep 安装依赖

ROS 2 软件包是在频繁更新的 Ubuntu 系统上构建的。建议在安装新软件包之前,始终确保你的系统是最新的:

$ sudo apt upgrade
$ sudo apt update
$ sudo apt install -y python3-rosdep
$ sudo rosdep init
$ rosdep update
$ rosdep install --from-paths ~/ros2_jazzy/ros2-linux/share --ignore-src -y --skip-keys "cyclonedds fastcdr fastrtps iceoryx_binding_c rmw_connextdds rti-connext-dds-6.0.1 urdfdom_headers"

注意:如果你使用的是基于 Ubuntu、但不自称 Ubuntu 的发行版(比如 Linux Mint),你会收到类似 Unsupported OS [mint] 的错误信息。这种情况下,请在上面的命令后附加 --os=ubuntu:noble

安装额外的 RMW 实现(可选)

ROS 2 默认使用的中间件是 Fast DDS,但中间件(RMW)可以在运行时替换。详情请参阅多 RMW 使用指南。

配置环境

通过 source 以下文件来配置环境:

$ . ~/ros2_jazzy/ros2-linux/setup.bash

注意:如果你使用的不是 bash,请把 .bash 替换为你所用的 shell。可选值为:setup.bashsetup.shsetup.zsh

尝试一些示例

在一个终端中,source 配置文件,然后运行一个 C++ 的 talker

$ . ~/ros2_jazzy/ros2-linux/setup.bash
$ ros2 run demo_nodes_cpp talker

在另一个终端中,source 配置文件,然后运行一个 Python 的 listener

$ . ~/ros2_jazzy/ros2-linux/setup.bash
$ ros2 run demo_nodes_py listener

你应该会看到 talker 提示正在 Publishing(发布)消息,而 listener 提示 I heard(已收到)这些消息。这验证了 C++ 和 Python 的 API 都在正常工作。恭喜!

后续步骤

继续阅读教程和示例,配置你的环境、创建自己的工作区和软件包,并学习 ROS 2 的核心概念。

故障排除

故障排除技巧请参阅安装故障排除指南

卸载
  1. 如果你按照上文指引用 colcon 安装了工作区,"卸载"可以很简单:打开一个新终端,不再 source 该工作区的 setup 文件即可。这样,你的环境会表现得就像系统上没有安装 Jazzy 一样。

  2. 如果你还想释放磁盘空间,可以删除整个工作区目录:

$ rm -rf ~/ros2_jazzy

3.3 Ubuntu(源码)

系统要求

Jazzy Jalisco 当前的 Debian 系目标平台为:

  • Tier 1:Ubuntu Linux — Noble(24.04)64 位
  • Tier 3:Ubuntu Linux — Jammy(22.04)64 位
  • Tier 3:Debian Linux — Bookworm(12)64 位

定义见 REP 2000

系统设置

设置区域语言(locale):确保区域设置支持 UTF-8(命令见 3.1 节)。

启用所需的软件仓库:启用 Universe 仓库并安装 ros2-apt-source 软件包(命令见 3.1 节)。

安装开发工具

$ sudo apt update && sudo apt install -y \
  python3-flake8-blind-except \
  python3-flake8-class-newline \
  python3-flake8-deprecated \
  python3-mypy \
  python3-pip \
  python3-pytest \
  python3-pytest-cov \
  python3-pytest-mock \
  python3-pytest-repeat \
  python3-pytest-rerunfailures \
  python3-pytest-runner \
  python3-pytest-timeout \
  ros-dev-tools
构建 ROS 2

获取 ROS 2 代码

创建一个工作区并克隆所有仓库:

$ mkdir -p ~/ros2_jazzy/src
$ cd ~/ros2_jazzy
$ vcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src

使用 rosdep 安装依赖

ROS 2 软件包是在频繁更新的 Ubuntu 系统上构建的。建议在安装新软件包之前,始终确保你的系统是最新的:

$ sudo apt upgrade
$ sudo rosdep init
$ rosdep update
$ rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

注意:如果你使用的是基于 Ubuntu、但不自称 Ubuntu 的发行版(比如 Linux Mint),你会收到类似 Unsupported OS [mint] 的错误信息。这种情况下,请在上面的命令后附加 --os=ubuntu:noble

安装额外的 RMW 实现(可选)

ROS 2 默认使用的中间件是 Fast DDS,但中间件(RMW)可以在构建时或运行时替换。详情请参阅多 RMW 使用指南。

安装 colcon mixins

$ colcon mixin add default https://github.com/colcon/colcon-mixin-repository/raw/master/index.yaml
$ colcon mixin update default

构建工作区中的代码

如果你已经通过其他方式(deb 包或二进制发行版)安装过 ROS 2,请确保在一个未 source 那些安装的全新环境中运行下面的命令。同时确保你的 .bashrc 中没有 source /opt/ros/${ROS_DISTRO}/setup.bash 这一行。你可以用 printenv | grep -i ROS 来确认 ROS 2 没有被 source——输出应该为空。

关于使用 ROS 工作区的更多信息,请参阅 colcon 教程

$ cd ~/ros2_jazzy/
$ colcon build --symlink-install --mixin release

注意

如果你在编译所有示例时遇到困难,导致无法成功完成构建,可以使用 colcon 的 --packages-skip 参数忽略出问题的软件包。例如,如果你不想安装庞大的 OpenCV 库,可以用下面的命令跳过构建依赖它的软件包:

$ colcon build --symlink-install --packages-skip image_tools intra_process_demo
配置环境

通过 source 以下文件来配置环境:

$ . ~/ros2_jazzy/install/local_setup.bash

注意:如果你使用的不是 bash,请把 .bash 替换为你所用的 shell。可选值为:setup.bashsetup.shsetup.zsh

尝试一些示例

在一个终端中,source 配置文件,然后运行一个 C++ 的 talker

$ . ~/ros2_jazzy/install/local_setup.bash
$ ros2 run demo_nodes_cpp talker

在另一个终端中,source 配置文件,然后运行一个 Python 的 listener

$ . ~/ros2_jazzy/install/local_setup.bash
$ ros2 run demo_nodes_py listener

你应该会看到 talker 提示正在 Publishing(发布)消息,而 listener 提示 I heard(已收到)这些消息。这验证了 C++ 和 Python 的 API 都在正常工作。恭喜!

后续步骤

继续阅读教程和示例,配置你的环境、创建自己的工作区和软件包,并学习 ROS 2 的核心概念。

其他编译器

使用 gcc 之外的编译器来编译 ROS 2 也很简单。只需把环境变量 CCCXX 分别设置为可用的 C 和 C++ 编译器的可执行文件,然后重新触发 CMake 配置(使用 --cmake-force-configure,或者删除你希望受影响的软件包),CMake 就会重新配置并使用不同的编译器。

Clang

要让 CMake 检测并使用 Clang:

$ sudo apt install clang
$ export CC=clang
$ export CXX=clang++
$ colcon build --cmake-force-configure
保持更新

参阅维护源码检出,以定期刷新你的源码安装。

故障排除

故障排除技巧请参阅安装故障排除指南中的 Linux 部分。

卸载
  1. 如果你按照上文指引用 colcon 安装了工作区,"卸载"可以很简单:打开一个新终端,不再 source 该工作区的 setup 文件即可。这样,你的环境会表现得就像系统上没有安装 Jazzy 一样。

  2. 如果你还想释放磁盘空间,可以删除整个工作区目录:

$ rm -rf ~/ros2_jazzy

附注

  • 本译文基于 ROS 2 官方文档 Jazzy 分支,命令中的版本占位符已替换为 jazzy(对应 Ubuntu 24.04 Noble)。
  • Installation 章节中与 Ubuntu 相关的内容共三篇(deb 软件包、二进制包、源码),均已完整收录;Windows、RHEL、macOS 等其他平台内容不在本文范围内。
  • 被多个页面重复引用的公共片段(设置 locale、启用 apt 仓库、升级提示、Linux Mint 提示等)在 3.1 节给出完整翻译,后续章节引用处保留关键命令并标注"与 3.1 节相同",以避免冗余。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐