NVIDIA Isaac ROS - 入门教程(一)

本文涉及的产品
资源编排,不限时长
简介: NVIDIA Isaac ROS - 入门教程(一)

系列文章目录

 


前言

欢迎访问 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

Jetson Orin Jetson Xavier

JetPack 5.1.2

For best performance, ensure that power settings are configured appropriately.

x86_64

NVIDIA GPU

Ubuntu 20.04+ CUDA 11.8+

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 平台

  1. 准备一个最低配置如下的英伟达平台:
  • Ubuntu 20.04+
  • 实验:Windows 11 上的 WSL2
  • 16 GB 普通内存
  • 具有以下规格的英伟达™(NVIDIA®)独立 GPU:
  • 支持 CUDA 11.8 和 Volta 或更新版本
  • 最低 8GB VRAM,建议 12GB 以上
  1. 根据官方说明(此处)安装 Docker
  2. 根据官方说明安装最新的英伟达™(NVIDIA®)GPU 驱动程序(此处

2.2.1.2 Jetson 平台

  1. 安装 Jetpack,包括 nvidia-container 软件包。
  2. 启动后,运行以下命令确认已安装 Jetpack 5.1.2。确认输出结果中有 R35(版本)、REVISION: 4.1 的字样。
cat /etc/nv_tegra_release
  1. 运行以下命令将 GPU 和 CPU 时钟设置为最大值。更多详情,请参阅 "最大化 Jetson 性能"。
sudo /usr/bin/jetson_clocks
  1. 运行以下命令将电源设置为 MAX。详情请参阅 "电源模式控制"。
sudo /usr/sbin/nvpmodel -m 0
  1. 将你的用户添加到 docker 组。
sudo usermod -aG docker $USER
newgrp docker
  1. 安装 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
  1. 考虑为 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 固态硬盘设置

物理安装固态硬盘并自动安装

 

  1. 拔下 Jetson 开发套件的电源和任何外围设备。
  2. 在 Jetson 开发套件的载板上物理安装 NVMe SSD 卡。必须正确安装连接器并用螺丝固定。
  3. 重新插入电源线和任何外围设备,并打开 Jetson 开发套件电源。
  4. 验证系统是否在 PCI 总线上识别出新的内存控制器:
lspci
  1. 典型的输出结果如下:
0007:01:00.0 Non-Volatile memory controller: Marvell Technology Group Ltd. Device 1322 (rev 02)
  1. 运行 lsblk 查找设备名称。
lsblk
  1. 典型的输出结果如下:
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
  1. 识别固态硬盘对应的设备。在本例中,它是 nvme0n1。

  2. 格式化固态硬盘,创建挂载点,并将其挂载到文件系统。
sudo mkfs.ext4 /dev/nvme0n1
sudo mkdir /ssd
sudo mount /dev/nvme0n1 /ssd
  1. 为确保启动后挂载持续进行,请在 fstab 文件中添加一个条目:
    确定固态硬盘的 UUID:
lsblk -f
  1. 在 fstab 文件中添加一个新条目:
sudo vi /etc/fstab
  1. 插入以下一行,将 UUID 替换为从 lsblk -f 中找到的值:
UUID=************-****-****-****-******** /ssd/ ext4 defaults 0 2
  1. 更改 /ssd 目录的所有权。
sudo chown ${USER}:${USER} /ssd

将 Docker 目录迁移到固态硬盘

安装固态硬盘并将其提供给你的设备后,你可以使用额外的存储容量来存放空间很大的 Docker 目录。

  1. 停止 Docker 服务。
sudo systemctl stop docker
  1. 移动现有的 Docker 文件夹。
sudo du -csh /var/lib/docker/ && \
    sudo mkdir /ssd/docker && \
    sudo rsync -axPS /var/lib/docker/ /ssd/docker/ && \
    sudo du -csh  /ssd/docker/
  1. 编辑 /etc/docker/daemon.json
sudo vi /etc/docker/daemon.json
  1. 插入类似下面的 "data-root "行:
{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia",
    "data-root": "/ssd/docker"
}
  1. 重命名旧的 Docker 数据目录。
sudo mv /var/lib/docker /var/lib/docker.old
  1. 重新启动 Docker 守护进程。
sudo systemctl daemon-reload && \
    sudo systemctl restart docker && \
    sudo journalctl -u docker

在固态硬盘上测试 Docker

 

  1. [终端 1] 打开终端,在拉取 Docker 映像时监控磁盘使用情况。
watch -n1 df
  1. [终端 2] 打开一个新终端,开始拉取 Docker。
docker pull nvcr.io/nvidia/l4t-base:r35.2.1
  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

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
28天前
|
传感器 机器学习/深度学习 固态存储
NVIDIA Isaac ROS - 入门教程(二)
NVIDIA Isaac ROS - 入门教程
92 3
|
28天前
|
监控 机器人
MATLAB - ROS 入门教程(一)
MATLAB - ROS 入门教程
14 1
|
28天前
|
存储 数据可视化
MATLAB - ROS 入门教程(二)
MATLAB - ROS 入门教程(二)
14 0
|
29天前
|
监控 数据可视化 机器人
MATLAB - ROS 2 工具箱入门教程
MATLAB - ROS 2 工具箱入门教程
41 0
|
29天前
ROS 2 - Gazebo 通信入门教程
ROS 2 - Gazebo 通信入门教程
43 0
|
4月前
|
传感器 人工智能 算法
ROS机器人操作系统
ROS机器人操作系统
133 1
|
28天前
|
存储 Ubuntu 数据可视化
Sawyer 机器人 ROS SDK 配置(三)
Sawyer 机器人 ROS SDK 配置(三)
34 5
|
28天前
|
存储 Ubuntu 数据可视化
Sawyer 机器人 ROS SDK 配置(二)
Sawyer 机器人 ROS SDK 配置(二)
21 0
|
28天前
|
存储 网络协议 机器人
Sawyer 机器人 ROS SDK 配置(一)
Sawyer 机器人 ROS SDK 配置
33 0
|
3月前
|
机器学习/深度学习 传感器 算法
强化学习(RL)在机器人领域的应用,尤其是结合ROS(Robot Operating System)和Gazebo(机器人仿真环境)
强化学习(RL)在机器人领域的应用,尤其是结合ROS(Robot Operating System)和Gazebo(机器人仿真环境)
128 2

推荐镜像

更多