系列文章目录
前言
欢迎访问 Isaac ROS,这是一套硬件加速、高性能、低延迟的 ROS 2 软件包,用于制造自主机器人,充分利用 Jetson 和其他英伟达平台的强大功能。
- 查看入门指南,开始使用 Isaac ROS。
- 设置 Isaac ROS Buildfarm,在英伟达™(NVIDIA®)Jetson 上构建 ROS 2 软件包
- 访问资源库和软件包,了解特定软件包。
- 熟悉 Isaac ROS 的基本概念。
- 比较软件包在不同平台上的性能。
- 阅读博文集,了解更多信息。
- 浏览常见问题解答,了解常见问题的答案。
- 参考发行说明,了解有关 Isaac ROS 所有更新的详细信息。
一、Isaac ROS Buildfarm
英伟达 Jetson 平台运行在基于 Ubuntu Linux 的 JetPack 操作系统上。JetPack 5.x 是在 Ubuntu 20.04 Focal 的基础上构建的,这意味着由 ROS 2 Buildfarm 为 Ubuntu 22.04 Jammy 构建的 ROS 2 Humble 的 Debian 包不受支持。
由于官方 ROS 2 Buildfarm 只为 Ubuntu 22.04 Jammy 构建,因此 Isaac ROS Buildfarm 的设置是为 Ubuntu 20.04 Focal 从源代码构建 ROS 2 软件包。
1.1 设置
Isaac ROS Buildfarm 是官方 Buildfarm 的一个分叉,经过几处修改,几乎可以为 Ubuntu 20.04 Focal 构建所有 ROS 2 软件包。英伟达的半全球 CDN 发布了这些社区贡献的软件包和即将预构建的 Isaac ROS Debian 软件包。
要将 CDN 设置为 apt 源,请执行以下步骤:
设置地域
locale # check for 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 # verify settings
安装依赖项
sudo apt update && sudo apt install gnupg wget sudo apt install software-properties-common sudo add-apt-repository universe
设置源代码
首先,在 apt 注册 GPG 密钥。下面列出了两个选项,一个是 .com(美国 CDN),另一个是 .cn(中国 CDN),请选择您喜欢的选项。
wget -qO - https://isaac.download.nvidia.com/isaac-ros/repos.key | sudo apt-key add -
wget -qO - https://isaac.download.nvidia.cn/isaac-ros/repos.key | sudo apt-key add -
现在将软件源添加到你的 apt 源中。
echo 'deb https://isaac.download.nvidia.com/isaac-ros/ubuntu/main focal main' | sudo tee -a /etc/apt/sources.list"
echo 'deb https://isaac.download.nvidia.cn/isaac-ros/ubuntu/main focal main' | sudo tee -a /etc/apt/sources.list"
接下来,对于所有非 Buildfarm ROS 2 软件包,请确保已获取 ROS 2 apt 仓库。
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 focal main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
这样就可以正常安装几乎所有的 ROS 2 软件包。我们保证支持任何依赖于 Isaac ROS 的 ROS 2 软件包。
1.2 安装 ROS 2 软件包
sudo apt update
根据 ROS 2 文档:
桌面安装(推荐): ROS、RViz、演示、教程。
sudo apt install ros-humble-desktop
或者
sudo apt install ros-humble-desktop-full
ROS 基础安装(裸机): 通信库、消息包、命令行工具。无图形用户界面工具。
sudo apt install ros-humble-ros-base
开发工具: 用于构建 ROS 软件包的编译器和其他工具
sudo apt install ros-dev-tools
二、开始使用
Isaac ROS 套件由英伟达™(NVIDIA®)开发并发布,旨在利用英伟达™(NVIDIA®)Jetson 和独立 GPU 上的硬件加速功能来实现标准的机器人应用。
Isaac ROS 在输入和输出话题上使用标准的 ROS 接口,因此非常易于使用,可直接替代机器人开发人员熟悉的基于 CPU 的常用 ROS 实现。
2.1 系统要求
Platform |
Hardware |
Software |
Notes |
Jetson |
For best performance, ensure that power settings are configured appropriately. |
||
x86_64 |
NVIDIA GPU |
ROS 支持
所有 Isaac ROS 软件包的设计和测试都与 ROS 2 Humble 兼容。
如果您的应用程序是使用 ROS 1 Noetic 构建的,您可以使用 Isaac ROS NITROS Bridge 以更快的性能集成 Isaac ROS 软件包。
警告
Isaac ROS 软件包仅针对 ROS 2 Humble 进行过测试。目前还不支持其他 ROS 2 版本。
请按照以下步骤使用 Isaac ROS Dev Docker 镜像建立 ROS 2 开发者环境。或者,你也可以通过 Isaac ROS Buildfarm 安装预构建的 ROS 2 Humble 平台。
注意事项
我们强烈建议你使用 Isaac ROS Dev Docker 镜像来设置开发环境。这将简化您的开发环境设置,为 Jetson 和 x86_64 平台提供正确版本的依赖项。在 Isaac ROS Dev Docker 容器中工作将设置 ROS 并自动配置 Isaac ROS Buildfarm。
2.2 设置
设置运行 Isaac ROS 的硬件:
2.2.1 计算设置
2.2.1.1 x86 平台
- 准备一个最低配置如下的英伟达平台:
- Ubuntu 20.04+
- 实验:Windows 11 上的 WSL2
- 16 GB 普通内存
- 具有以下规格的英伟达™(NVIDIA®)独立 GPU:
- 支持 CUDA 11.8 和 Volta 或更新版本
- 最低 8GB VRAM,建议 12GB 以上
- 根据官方说明(此处)安装 Docker
- 根据官方说明安装最新的英伟达™(NVIDIA®)GPU 驱动程序(此处
2.2.1.2 Jetson 平台
- 安装 Jetpack,包括 nvidia-container 软件包。
- 启动后,运行以下命令确认已安装 Jetpack 5.1.2。确认输出结果中有 R35(版本)、REVISION: 4.1 的字样。
cat /etc/nv_tegra_release
- 运行以下命令将 GPU 和 CPU 时钟设置为最大值。更多详情,请参阅 "最大化 Jetson 性能"。
sudo /usr/bin/jetson_clocks
- 运行以下命令将电源设置为 MAX。详情请参阅 "电源模式控制"。
sudo /usr/sbin/nvpmodel -m 0
- 将你的用户添加到 docker 组。
sudo usermod -aG docker $USER newgrp docker
- 安装 Docker。
根据官方的 Docker 安装说明(此处),安装 docker-buildx-插件。
# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Add the repository to Apt sources: echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt install docker-buildx-plugin
- 考虑为 Jetson 添加更多存储空间,以获得更好的体验: Jetson 开发人员环境设置
2.2.1.2.1 Jetson 设置
如果您正在使用 Jetson 开发者套件,则需要一个快速且大容量的存储设备来存储容器映像和 rosbag 文件。要增加存储容量,请在 Jetson 开发者套件的载板上安装 NVMe SSD 卡。
注意事项
一般不建议通过 USB 3.x 连接固态硬盘,因为它的写入/读取速度比通过 NVMe(PCIe)接口连接的固态硬盘慢。
不同存储介质(包括固态硬盘)的读写速度比较
要正确配置带有 NVMe SSD 的 Jetson,请选择以下方法之一:
- 将 NVMe SSD 实际安装在全新的 Jetson 开发套件上,然后使用 Ubuntu PC 上运行的 SDK 管理器在 SSD 上闪存整个 L4T(Jetson Linux)。
- 将 L4T 闪存到 Jetson 的 eMMC 或 microSD 卡上,然后物理安装 NVMe 固态硬盘,并将固态硬盘配置为 ROS2 工作区和/或 Docker 覆盖文件的可选存储空间。
第一种方案最直接,但需要重新刷新整个 Jetson 开发套件,从而丢失设备上已有的任何文件。
第二个方案需要更多工作,但无需重新刷新 Jetson。本文其余部分将介绍如何使用第二种方法配置固态硬盘。如果您的 Jetson 已经设置并运行,但没有 NVMe 固态硬盘,请按照以下步骤操作。
2.2.1.2.1.1 固态硬盘设置
物理安装固态硬盘并自动安装
- 拔下 Jetson 开发套件的电源和任何外围设备。
- 在 Jetson 开发套件的载板上物理安装 NVMe SSD 卡。必须正确安装连接器并用螺丝固定。
- 重新插入电源线和任何外围设备,并打开 Jetson 开发套件电源。
- 验证系统是否在 PCI 总线上识别出新的内存控制器:
lspci
- 典型的输出结果如下:
0007:01:00.0 Non-Volatile memory controller: Marvell Technology Group Ltd. Device 1322 (rev 02)
- 运行 lsblk 查找设备名称。
lsblk
- 典型的输出结果如下:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 16M 1 loop mmcblk1 179:0 0 59.5G 0 disk ├─mmcblk1p1 179:1 0 58G 0 part / ├─mmcblk1p2 179:2 0 128M 0 part ├─mmcblk1p3 179:3 0 768K 0 part ├─mmcblk1p4 179:4 0 31.6M 0 part ├─mmcblk1p5 179:5 0 128M 0 part ├─mmcblk1p6 179:6 0 768K 0 part ├─mmcblk1p7 179:7 0 31.6M 0 part ├─mmcblk1p8 179:8 0 80M 0 part ├─mmcblk1p9 179:9 0 512K 0 part ├─mmcblk1p10 179:10 0 64M 0 part ├─mmcblk1p11 179:11 0 80M 0 part ├─mmcblk1p12 179:12 0 512K 0 part ├─mmcblk1p13 179:13 0 64M 0 part └─mmcblk1p14 179:14 0 879.5M 0 part zram0 251:0 0 1.8G 0 disk [SWAP] zram1 251:1 0 1.8G 0 disk [SWAP] zram2 251:2 0 1.8G 0 disk [SWAP] zram3 251:3 0 1.8G 0 disk [SWAP] nvme0n1 259:0 0 238.5G 0 disk
- 识别固态硬盘对应的设备。在本例中,它是 nvme0n1。
格式化固态硬盘,创建挂载点,并将其挂载到文件系统。
sudo mkfs.ext4 /dev/nvme0n1
sudo mkdir /ssd
sudo mount /dev/nvme0n1 /ssd
- 为确保启动后挂载持续进行,请在 fstab 文件中添加一个条目:
确定固态硬盘的 UUID:
lsblk -f
- 在 fstab 文件中添加一个新条目:
sudo vi /etc/fstab
- 插入以下一行,将 UUID 替换为从 lsblk -f 中找到的值:
UUID=************-****-****-****-******** /ssd/ ext4 defaults 0 2
- 更改 /ssd 目录的所有权。
sudo chown ${USER}:${USER} /ssd
将 Docker 目录迁移到固态硬盘
安装固态硬盘并将其提供给你的设备后,你可以使用额外的存储容量来存放空间很大的 Docker 目录。
- 停止 Docker 服务。
sudo systemctl stop docker
- 移动现有的 Docker 文件夹。
sudo du -csh /var/lib/docker/ && \ sudo mkdir /ssd/docker && \ sudo rsync -axPS /var/lib/docker/ /ssd/docker/ && \ sudo du -csh /ssd/docker/
- 编辑 /etc/docker/daemon.json
sudo vi /etc/docker/daemon.json
- 插入类似下面的 "data-root "行:
{ "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } }, "default-runtime": "nvidia", "data-root": "/ssd/docker" }
- 重命名旧的 Docker 数据目录。
sudo mv /var/lib/docker /var/lib/docker.old
- 重新启动 Docker 守护进程。
sudo systemctl daemon-reload && \ sudo systemctl restart docker && \ sudo journalctl -u docker
在固态硬盘上测试 Docker
- [终端 1] 打开终端,在拉取 Docker 映像时监控磁盘使用情况。
watch -n1 df
- [终端 2] 打开一个新终端,开始拉取 Docker。
docker pull nvcr.io/nvidia/l4t-base:r35.2.1
- [终端 1] 观察/ssd 上的磁盘使用量随着容器映像的下载和提取而上升。
~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nvcr.io/nvidia/l4t-base r35.2.1 dc07eb476a1d 7 months ago 713MB
2.2.1.2.1.2 最终验证
重新启动 Jetson,并验证是否出现以下情况:
~$ sudo blkid | grep nvme /dev/nvme0n1: UUID="9fc06de1-7cf3-43e2-928a-53a9c03fc5d8" TYPE="ext4" ~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mmcblk1p1 116G 18G 94G 16% / none 3.5G 0 3.5G 0% /dev tmpfs 3.6G 108K 3.6G 1% /dev/shm tmpfs 734M 35M 699M 5% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.6G 0 3.6G 0% /sys/fs/cgroup tmpfs 734M 88K 734M 1% /run/user/1000 /dev/nvme0n1 458G 824M 434G 1% /ssd ~$ docker info | grep Root Docker Root Dir: /ssd/docker ~$ sudo ls -l /ssd/docker/ total 44 drwx--x--x 4 root root 4096 Mar 22 11:44 buildkit drwx--x--- 2 root root 4096 Mar 22 11:44 containers drwx------ 3 root root 4096 Mar 22 11:44 image drwxr-x--- 3 root root 4096 Mar 22 11:44 network drwx--x--- 13 root root 4096 Mar 22 16:20 overlay2 drwx------ 4 root root 4096 Mar 22 11:44 plugins drwx------ 2 root root 4096 Mar 22 16:19 runtimes drwx------ 2 root root 4096 Mar 22 11:44 swarm drwx------ 2 root root 4096 Mar 22 16:20 tmp drwx------ 2 root root 4096 Mar 22 11:44 trust drwx-----x 2 root root 4096 Mar 22 16:19 volumes ~$ sudo du -chs /ssd/docker/ 752M /ssd/docker/ 752M total ~$ docker info | grep -e "Runtime" -e "Root" Runtimes: io.containerd.runtime.v1.linux nvidia runc io.containerd.runc.v2 Default Runtime: nvidia Docker Root Dir: /ssd/docker
您的 Jetson 现在已安装好固态硬盘!
NVIDIA Isaac ROS - 入门教程(二)+https://developer.aliyun.com/article/1585287