ROS 2入门 - 机器人操作系统ROS2的安装
ROS 2入门 - 机器人操作系统ROS2的安装
陈拓 2024/12/11-2024/12/11
1. ROS概述
ROS官网:https://www.ros.org/
机器人操作系统Robot Operating System (ROS)是一套开源的软件库和工具,可帮助你构建机器人应用程序。从驱动程序到最先进的算法,再到强大的开发人员工具,ROS可满足你下一个机器人项目的所有需求。
1.1 ROS版本
ROS有多个大版本和小版本。以下是主要的ROS版本信息:
- ROS 1
ROS 1是ROS的第一个主要版本系列,包含多个发行版。主要的发行版包括:
- ROS 1.0 (C Turtle)
- ROS 1.1 (Diamondback)
- ROS 1.2 (Electric Emys)
- ROS 1.3 (Fuerte)
- ROS 1.4 (Groovy)
- ROS 1.5 (Hydro)
- ROS 1.6 (Indigo)
- ROS 1.7 (Jade)
- ROS 1.8 (Kinetic)
- ROS 1.9 (Lunar)
- ROS 1.10 (Melodic)
- ROS 1.11 (Noetic)
- ROS 2
ROS 2是ROS的第二个主要版本系列,旨在提供更好的实时性、跨平台支持和安全性。主要的发行版包括:
- ROS 2.0 (Ardent Apalone)
- ROS 2.1 (Bouncy Bolson)
- ROS 2.2 (Crystal Clemmys)
- ROS 2.3 (Dashing Diademata)
- ROS 2.4 (Eloquent Elusor)
- ROS 2.5 (Foxy Fitzroy)
- ROS 2.6 (Galactic Geochelone)
- ROS 2.7 (Humble Hawksbill)
- ROS 2.8 (Iron Irwini)
小版本更新通常用于修复bug、添加小功能或进行性能改进。这些小版本通常不会改变API或引入不兼容的更改。
- 版本命名
ROS 1和ROS 2的版本命名通常使用动物名称,且每个版本的名称都是按字母顺序排列的。
- 版本支持
ROS 1的最后一个版本是Noetic,计划在2025年停止支持。
ROS 2的每个版本都有不同的支持周期,通常是每个版本支持大约一年半到两年。
ROS的版本管理相对清晰,用户可以根据自己的需求选择合适的版本进行开发和部署。对于新项目,推荐使用ROS 2,因为它是未来的发展方向,提供了更好的功能和支持。
1.2 ROS1和 ROS 2的主要区别
1.2.1 通信机制
ROS 1:基于 TCPROS 和 UDPROS 进行节点间通信,主要依赖于中心式的主节点(master)进行节点的注册和发现。
ROS 2:使用基于 DDS(Data Distribution Service)的通信中间件,实现了去中心化的通信架构,节点可以直接发现和通信,提高了系统的可靠性和可扩展性。
1.2.2 实时性
ROS 1:在实时性方面有一定的局限性,虽然可以通过一些实时扩展来改善,但实现较为复杂。
ROS 2:从设计上考虑了实时性要求,支持硬实时和软实时应用,可以更好地满足机器人等对实时性要求较高的场景。
1.2.3 编程语言支持
ROS 1:主要使用 C++和 Python 进行开发。
ROS 2:除了 C++和 Python 外,还增加了对其他编程语言的更好支持,如 C 和 Java 等,使得开发者可以根据自己的需求选择更合适的编程语言。
1.3 当前官方推荐的ROS2版本
ROS以发行版(也称为distros)的形式发布,一次支持多个ROS发行版。一些发行版提供长期支持(LTS),这意味着它们更稳定并且经过了广泛的测试。其他发行版较新,生命周期较短,但支持较新的平台及其组成ROS包的较新版本。有关更多详细信息,请参阅发行版列表。通常,每年的世界海龟日(5月23日)都会发布一个新的 ROS 发行版,而LTS发行版则会在偶数年发布。
Ros2有foxy、Galactic、Humble Hawksbil与Iron Irwini多个版本。
其中Humble Hawksbill发布于2022年11月18日,是一个LTS版本,支持时间为5年。Humble更加稳定且易于维护,包括许多新的质量等级1的软件包,以及对不同平台和体系结构的改进。它还改进了安全性,引入了对DDS安全插件的支持。支持Ubuntu 22.04 (Jammy Jellyfish)、macOS 12 (Monterey)和Windows 11。
我们安装Humble Hawksbill。
官方Humble安装文档
https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html
1.4 Tier层级和系统要求
https://www.ros.org/reps/rep-2000.html
- Tier层级与操作系统的对应关系
Humble Hawksbill目前基于Debian的目标平台是:
Tier 1: Ubuntu Linux - Jammy (22.04) 64-bit
Tier 3: Ubuntu Linux - Focal (20.04) 64-bit
Debian Linux - Bullseye (11) 64-bit
在ROS社区中,Tier 1和Tier 3通常指的是支持和维护的不同级别,这主要适用于ROS的软件包和工具。这些级别帮助用户了解哪些软件包得到了积极的支持和维护,以及它们在不同ROS发行版中的可用性。以下是这些级别的官方定义:
Tier 1:平台会频繁接受我们的单元测试套件和其他测试工具的测试,包括持续集成作业、夜间作业、打包作业和性能测试。开发团队会优先修复这些平台中发现的错误或缺陷。Tier 1 平台中发现的重大错误可能会影响发布日期,我们会努力在新版本发布之前解决 Tier 1 平台中所有已知的高优先级错误。
Tier 2:平台需要定期进行 CI 测试,该测试会同时运行构建和测试,并公开结果。预计 CI 将在 ROS 发行版当前状态发生相关变化后至少一周内运行。可能不会提供软件包级别的二进制软件包,但鼓励提供已构建工作区的可下载存档。Tier 2 平台的已发布产品版本中可能存在错误。Tier 2 平台中的已知错误将根据资源可用性尽最大努力解决,并且可能会也可能不会在新版本发布之前得到纠正。一个或多个实体应承诺继续支持该平台。
Tier 3:第 3 层平台是指社区报告表明版本功能正常的平台。开发团队不会在第 3 层平台上运行单元测试套件或执行任何其他测试。平台必须提供最新安装说明才能列入此类别。社区成员可以为这些平台提供帮助。
- 查看我的系统架构和版本
lsb_release -a
符合Tier 1。
1.5 Ubuntu升级
以Tier 1安装ROS2要求Ubuntu22.04。如果你的系统版本目前是Ubuntu20.4,可以参考《ssh远程升级Ubuntu20.04到Ubuntu 22.04》
https://blog.csdn.net/chentuo2000/article/details/144306625?spm=1001.2014.3001.5502
一文进行升级。
2. 安装ROS2
以下步骤参考官方文档:https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html
2.1 通过SSH操作Linux服务器
参考《Win10命令窗口的SSH和SFTP操作》
https://blog.csdn.net/chentuo2000/article/details/119918637?spm=1001.2014.3001.5502
2.2 设置区域
确保您的语言环境支持UTF-8。
locale # check for UTF-8
2.3 设置源
在安装ROS2之前,你首先需要将ROS2 apt存储库添加到你的系统。
默认的Ubuntu apt存储库中不包含ROS 2的软件包,因为ROS 2并不是Ubuntu官方维护的软件,而是作为一个独立的项目由社区维护。为了安装ROS 2,你需要添加专门的ROS 2 apt存储库到你的系统中,这样apt包管理器才能够访问并安装ROS 2的软件包。
2.3.1 确保Ubuntu Universe存储库已启用
Ubuntu分布在不同的存储库中,四个主要存储库是:
- Main - Canonical 支持的免费开源软件。
- Universe - 社区维护的免费开源软件。
- Restricted - 设备的专有驱动程序。
- Multiverse - 受版权或法律问题限制的软件。
我们需要启用Universe存储库。
- 首先安装software-properties-common软件包
这个包提供了一些用于管理软件源和处理软件包依赖的工具和功能。具体来说,它包含以下几个主要组件:
add-apt-repository:这是一个命令行工具,用于添加新的软件源(repository)到你的系统。这在你想要安装一些不在默认软件源中的软件包时非常有用。
python3-software-properties:这个包提供了Python 3的软件属性模块,它用于编写与软件包和软件源相关的脚本。
software-properties-gtk:这是一个图形界面工具,用于管理软件源和安装第三方软件。
安装software-properties-common包后,你可以使用add-apt-repository命令来添加PPA(Personal Package Archives)或其他软件源,这通常用于安装最新版本的软件或测试新功能。这个包是管理Ubuntu软件源的一个基础工具,对于想要扩展系统软件库的用户来说非常有用。
sudo apt install software-properties-common
检查安装情况:
sudo apt policy software-properties-common
- 在终端中运行以下命令来启用Universe存储库
sudo add-apt-repository universe
执行完上述命令后,你需要更新软件包列表以通知Ubuntu新的软件源:
sudo apt-get update
这样,Universe存储库就会被添加并启用。你可以通过运行以下命令来验证Universe存储库是否已经启用:
apt-cache search universe
如果命令能够顺利执行并列出属于Universe存储库的软件包,那么表示Universe存储库已经成功启用。
2.3.2 使用apt添加ROS2 GPG密钥
安装ROS2之前添加ROS2 GPG密钥的主要目的是为了验证安装的真实性和安全性。GPG(GNU Privacy Guard)密钥用于确保你从ROS2存储库安装的软件包是经过官方认证的,没有被篡改或受到恶意软件的侵害。当你添加ROS2的GPG密钥到系统中时,这个密钥会用来验证后续从ROS2存储库下载的软件包的签名。这样,只有当软件包的签名与密钥匹配时,系统才会认为这个软件包是安全的,可以进行安装。这个过程是保障软件来源可靠性和防止潜在安全威胁的重要步骤。
- 安装curl
curl 是一个利用 URL 语法在命令行方式下工作的文件传输工具。它支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SFTP、SCP、TFTP、DICT、TELNET、LDAP、LDAPS、FILE 等。curl 能够用于数据上传和下载,以及与服务器进行交互。
sudo apt update
sudo apt install curl -y
sudo apt policy curl
- 通过curl下载ROS官方GPG密钥
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
2.4 安装ROS2软件包
- 设置存储库后,更新您的 apt 存储库缓存
sudo apt update
- ROS 2 软件包是在经常更新的 Ubuntu 系统上构建的。始终建议您在安装新软件包之前确保系统是最新的
sudo apt upgrade
- 安装ROS2 humble
桌面安装(推荐):ROS、RViz、演示、教程。
sudo apt install ros-humble-desktop
ROS-Base 安装(基本配置):通信库、消息包、命令行工具。无 GUI 工具。
sudo apt install ros-humble-ros-base
开发工具:编译器和其他用于构建 ROS 包的工具
sudo apt install ros-dev-tools
我们安装一个更全面的包,桌面完整版ros-humble-desktop-full。
这个软件包是一个更全面的桌面安装包,它包含了ros-humble-desktop中的所有内容,以及额外的软件包和工具,如更完整的工具集和示例代码。
包含ROS、rqt、rviz、机器人通用库、2D/3D 模拟器、导航以及2D/3D感知。
它适用于需要全面开发环境和更多示例的开发者。
安装命令:
sudo apt install ros-humble-desktop-full
2.5 环境设置
source /opt/ros/humble/setup.bash
以后每次打开一个新的终端窗口运行ros2之前都要运行这个命令来设置环境。如果你不想每次打开新shell时都要设置环境,那么你可以用以下命令添加环境设置到shell启动脚本~/.bashrc中:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
环境设置好之后可以用下面的命令检查环境变量:
printenv | grep -i ROS
或者
printenv | grep ROS
2.6 尝试一些示例
Talker-listener说话者-倾听者。
2.6.1 listener
- 打开一个终端
- 设置环境
source /opt/ros/humble/setup.bash
- Python listener
ros2 run demo_nodes_py listener
听者开始侦听。
2.6.2 Talker
- 打开一个终端
- 设置环境
source /opt/ros/humble/setup.bash
- 运行 C++ talker
ros2 run demo_nodes_cpp talker
说者开始发布消息。
听者收到消息:
你可以看到talker说我正在Publishing消息,listener说我听到I heard这些消息了。这可验证C++和Python API均正常运行。太棒了!