当前位置:   article > 正文

NVIDIA Isaac ROS - 入门教程(一)

isaac ros

系列文章目录

 


前言

18bca0e066e74486858972c79b5771fa.png

欢迎访问 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 源,请执行以下步骤:

设置地域

  1. locale # check for UTF-8
  2. sudo apt update && sudo apt install locales
  3. sudo locale-gen en_US en_US.UTF-8
  4. sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
  5. export LANG=en_US.UTF-8
  6. locale # verify settings

安装依赖项

  1. sudo apt update && sudo apt install gnupg wget
  2. sudo apt install software-properties-common
  3. 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 仓库。

  1. sudo apt update && sudo apt install curl -y \
  2. && 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 以上
  2. 根据官方说明(此处)安装 Docker
  3. 根据官方说明安装最新的英伟达™(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
  3. 运行以下命令将 GPU 和 CPU 时钟设置为最大值。更多详情,请参阅 "最大化 Jetson 性能"。

    sudo /usr/bin/jetson_clocks
  4. 运行以下命令将电源设置为 MAX。详情请参阅 "电源模式控制"。

    sudo /usr/sbin/nvpmodel -m 0
  5. 将你的用户添加到 docker 组。

    1. sudo usermod -aG docker $USER
    2. newgrp docker
  6. 安装 Docker。

    根据官方的 Docker 安装说明(此处),安装 docker-buildx-插件。

    1. # Add Docker's official GPG key:
    2. sudo apt-get update
    3. sudo apt-get install ca-certificates curl gnupg
    4. sudo install -m 0755 -d /etc/apt/keyrings
    5. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    6. sudo chmod a+r /etc/apt/keyrings/docker.gpg
    7. # Add the repository to Apt sources:
    8. echo \
    9. "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
    10. "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
    11. sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    12. sudo apt-get update
    13. sudo apt install docker-buildx-plugin

    考虑为 Jetson 添加更多存储空间,以获得更好的体验: Jetson 开发人员环境设置

2.2.1.2.1 Jetson 设置

如果您正在使用 Jetson 开发者套件,则需要一个快速且大容量的存储设备来存储容器映像和 rosbag 文件。要增加存储容量,请在 Jetson 开发者套件的载板上安装 NVMe SSD 卡。

注意事项

一般不建议通过 USB 3.x 连接固态硬盘,因为它的写入/读取速度比通过 NVMe(PCIe)接口连接的固态硬盘慢。

d6f6d9edd8534ab286f6f148ce67a32e.png

不同存储介质(包括固态硬盘)的读写速度比较

 

要正确配置带有 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

    典型的输出结果如下:

    0007:01:00.0 Non-Volatile memory controller: Marvell Technology Group Ltd. Device 1322 (rev 02)
  5. 运行 lsblk 查找设备名称。

    lsblk

    典型的输出结果如下:

    1. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    2. loop0 7:0 0 16M 1 loop
    3. mmcblk1 179:0 0 59.5G 0 disk
    4. ├─mmcblk1p1 179:1 0 58G 0 part /
    5. ├─mmcblk1p2 179:2 0 128M 0 part
    6. ├─mmcblk1p3 179:3 0 768K 0 part
    7. ├─mmcblk1p4 179:4 0 31.6M 0 part
    8. ├─mmcblk1p5 179:5 0 128M 0 part
    9. ├─mmcblk1p6 179:6 0 768K 0 part
    10. ├─mmcblk1p7 179:7 0 31.6M 0 part
    11. ├─mmcblk1p8 179:8 0 80M 0 part
    12. ├─mmcblk1p9 179:9 0 512K 0 part
    13. ├─mmcblk1p10 179:10 0 64M 0 part
    14. ├─mmcblk1p11 179:11 0 80M 0 part
    15. ├─mmcblk1p12 179:12 0 512K 0 part
    16. ├─mmcblk1p13 179:13 0 64M 0 part
    17. └─mmcblk1p14 179:14 0 879.5M 0 part
    18. zram0 251:0 0 1.8G 0 disk [SWAP]
    19. zram1 251:1 0 1.8G 0 disk [SWAP]
    20. zram2 251:2 0 1.8G 0 disk [SWAP]
    21. zram3 251:3 0 1.8G 0 disk [SWAP]
    22. nvme0n1 259:0 0 238.5G 0 disk

    识别固态硬盘对应的设备。在本例中,它是 nvme0n1。

  6.  

    格式化固态硬盘,创建挂载点,并将其挂载到文件系统。

     

    sudo mkfs.ext4 /dev/nvme0n1
    sudo mkdir /ssd
    sudo mount /dev/nvme0n1 /ssd
  7. 为确保启动后挂载持续进行,请在 fstab 文件中添加一个条目:

    确定固态硬盘的 UUID:

    lsblk -f

    在 fstab 文件中添加一个新条目:

    sudo vi /etc/fstab

    插入以下一行,将 UUID 替换为从 lsblk -f 中找到的值:

    UUID=************-****-****-****-******** /ssd/ ext4 defaults 0 2
  8. 更改 /ssd 目录的所有权。

    sudo chown ${USER}:${USER} /ssd

 将 Docker 目录迁移到固态硬盘


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

  1. 停止 Docker 服务。
    sudo systemctl stop docker
  2. 移动现有的 Docker 文件夹。

    1. sudo du -csh /var/lib/docker/ && \
    2. sudo mkdir /ssd/docker && \
    3. sudo rsync -axPS /var/lib/docker/ /ssd/docker/ && \
    4. sudo du -csh /ssd/docker/
  3. 编辑 /etc/docker/daemon.json

    sudo vi /etc/docker/daemon.json

    插入类似下面的 "data-root "行:

    1. {
    2. "runtimes": {
    3. "nvidia": {
    4. "path": "nvidia-container-runtime",
    5. "runtimeArgs": []
    6. }
    7. },
    8. "default-runtime": "nvidia",
    9. "data-root": "/ssd/docker"
    10. }
  4. 重命名旧的 Docker 数据目录。

    sudo mv /var/lib/docker /var/lib/docker.old
  5. 重新启动 Docker 守护进程。

    1. sudo systemctl daemon-reload && \
    2. sudo systemctl restart docker && \
    3. sudo journalctl -u docker

在固态硬盘上测试 Docker

 

  1. [终端 1] 打开终端,在拉取 Docker 映像时监控磁盘使用情况。
    watch -n1 df
  2. [终端 2] 打开一个新终端,开始拉取 Docker。

    docker pull nvcr.io/nvidia/l4t-base:r35.2.1
  3. [终端 1] 观察/ssd 上的磁盘使用量随着容器映像的下载和提取而上升。

    1. ~$ docker image ls
    2. REPOSITORY TAG IMAGE ID CREATED SIZE
    3. nvcr.io/nvidia/l4t-base r35.2.1 dc07eb476a1d 7 months ago 713MB

2.2.1.2.1.2 最终验证

重新启动 Jetson,并验证是否出现以下情况:

  1. ~$ sudo blkid | grep nvme
  2. /dev/nvme0n1: UUID="9fc06de1-7cf3-43e2-928a-53a9c03fc5d8" TYPE="ext4"
  3. ~$ df -h
  4. Filesystem Size Used Avail Use% Mounted on
  5. /dev/mmcblk1p1 116G 18G 94G 16% /
  6. none 3.5G 0 3.5G 0% /dev
  7. tmpfs 3.6G 108K 3.6G 1% /dev/shm
  8. tmpfs 734M 35M 699M 5% /run
  9. tmpfs 5.0M 4.0K 5.0M 1% /run/lock
  10. tmpfs 3.6G 0 3.6G 0% /sys/fs/cgroup
  11. tmpfs 734M 88K 734M 1% /run/user/1000
  12. /dev/nvme0n1 458G 824M 434G 1% /ssd
  13. ~$ docker info | grep Root
  14. Docker Root Dir: /ssd/docker
  15. ~$ sudo ls -l /ssd/docker/
  16. total 44
  17. drwx--x--x 4 root root 4096 Mar 22 11:44 buildkit
  18. drwx--x--- 2 root root 4096 Mar 22 11:44 containers
  19. drwx------ 3 root root 4096 Mar 22 11:44 image
  20. drwxr-x--- 3 root root 4096 Mar 22 11:44 network
  21. drwx--x--- 13 root root 4096 Mar 22 16:20 overlay2
  22. drwx------ 4 root root 4096 Mar 22 11:44 plugins
  23. drwx------ 2 root root 4096 Mar 22 16:19 runtimes
  24. drwx------ 2 root root 4096 Mar 22 11:44 swarm
  25. drwx------ 2 root root 4096 Mar 22 16:20 tmp
  26. drwx------ 2 root root 4096 Mar 22 11:44 trust
  27. drwx-----x 2 root root 4096 Mar 22 16:19 volumes
  28. ~$ sudo du -chs /ssd/docker/
  29. 752M /ssd/docker/
  30. 752M total
  31. ~$ docker info | grep -e "Runtime" -e "Root"
  32. Runtimes: io.containerd.runtime.v1.linux nvidia runc io.containerd.runc.v2
  33. Default Runtime: nvidia
  34. Docker Root Dir: /ssd/docker

 您的 Jetson 现在已安装好固态硬盘!

2.2.2 传感器设置

注意

如果您无法使用物理传感器,但仍想试用 Isaac ROS 软件包,可以查看我们的 Isaac Sim 指南来设置模拟环境。

Isaac ROS 正式支持 Hawk、RealSense 和 ZED 相机。

2.2.2.1 Isaac ROS Hawk 设置

Leopard Imaging 的 Hawk 相机是与 Isaac ROS 生态系统软件包一起使用的立体相机的热门选择。本文档详细介绍了使用 Isaac ROS 配置 Hawk 相机的重要设置说明。

注意事项

为获得最佳效果,必须更新相机固件。

注意

通过 Argus 的 Hawk 立体相机仅支持 Jetson 平台

2.2.2.1.1 Jetson 平台

2.2.2.1.1.1 相机配置

Hawk 相机必须通过 GMSL 扩展板连接到 Jetson。例如,如果使用 AGX Orin,请参阅 Leopard 板。如需帮助,请联系硬件供应商。

2.2.2.1.1.2 IMU 配置

要达到 Hawk 内置 IMU 的目标传感器更新频率,必须适当设置 Jetson 设备上的某些寄存器:

  1. 确定用于将加速计和陀螺仪连接到 Jetson 的 GPIO 引脚。物理引脚和引脚编号之间的具体对应关系可通过特定 Jetson 设备的引脚复用表查找。
  2. 根据相应的焊盘控制器,确定这些 GPIO 引脚对应的寄存器地址块。具体 Jetson 设备的技术参考手册可在 Jetson 下载网站上找到。
    1. 例如,在 Jetson AGX Orin 系列设备上,Always On Hypervisor (AO_HV) 组中的 GPIO 引脚 8 和 9 位于 PADCTL_A15 下,内存块从 0x0c303000 开始。
  3. 在技术参考手册中,可以找到焊盘控制器到 GPIO 偏移地址的详细说明。确定要索引到相关引脚的具体偏移地址。
    1. 继续前面的例子,上面提到的两个引脚的偏移地址为 0x0c303000,偏移量为 0x00。由于本例中的引脚位于索引 8 和 9,因此它们的偏移量分别为 8 * 8 = 64 = 0x40 和 8 * 9 = 72 = 0x48。
  4. 在技术参考手册中找到 GPIO 寄存器的详细说明。确定将上拉/下拉状态设置为上拉的具体位索引。向先前确定的地址写入一对字节,设置相应位的同时保留其他位的值。这可以使用 devmem2 或类似工具完成。
    1. 完成示例后,如果引脚 8 的当前寄存器设置为 0xC058,但必须将低 4 位设置为 0b0000,才能设置上拉状态,那么正确的命令将是
      sudo devmem2 0x0c303040 w 0xC050

      相应地,如果引脚 9 的当前寄存器设置为 0xD054,则可通过以下命令将低 4 位设置为 0b0000:

      sudo devmem2 0x0c303048 w 0xD050

2.2.2.2 Isaac ROS RealSense 设置

2.2.2.2.1 相机兼容性

RealSense Model

Supported?

D455

D435i

D415

注意事项

要获得最佳效果,必须更新相机固件。

2.2.2.2.2 设置说明

注意

本教程假定您已按照说明完成了开发人员环境设置。

  1. 克隆 librealsense 资源库并设置 udev 规则。按提示移除任何已连接的 RealSense 相机:
    1. cd /tmp && \
    2. git clone https://github.com/IntelRealSense/librealsense && \
    3. cd librealsense && \
    4. ./scripts/setup_udev_rules.sh
  2. 从 realsense-ros 软件源中克隆 isaac_ros_common 和 4.51.1 版本:

    1. cd ${ISAAC_ROS_WS}/src
    2. git clone https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git
    3. git clone https://github.com/IntelRealSense/realsense-ros.git -b 4.51.1

    注意

    ${ISAAC_ROS_WS} 被定义为指向 /ssd/workspaces/isaac_ros-dev/ 或 ~/workspaces/isaac_ros-dev/。

  3. 在下一步启动 Docker 容器之前,先插入 RealSense 相机。
  4. 配置由 isaac_ros_common/scripts/run_dev.sh 创建的容器,使其包含 librealsense。在 isaac_ros_common/scripts 目录中创建 .isaac_ros_common-config 文件:
    1. cd ${ISAAC_ROS_WS}/src/isaac_ros_common/scripts && \
    2. touch .isaac_ros_common-config && \
    3. echo CONFIG_IMAGE_KEY=ros2_humble.realsense > .isaac_ros_common-config
  5. 启动 Docker 容器

    1. cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
    2. ./scripts/run_dev.sh ${ISAAC_ROS_WS}

    这会在其中一个分层阶段使用 Dockerfile.realsense 重建容器镜像。重建可能需要几分钟时间。

  6. 在重建容器镜像并进入容器后,可以运行 realsense-viewer 来验证 RealSense 相机是否已连接。

    realsense-viewer

    如果在图形用户界面中打开 "立体声模块",就会看到类似下面的内容:5d89e236e93f4ce7a54174b2cc1c2872.png

2.2.2.3 Isaac ROS ZED 设置

c55cb8b9e42f4f4797a144ac0b882284.png

ZED 相机需要以下设备才能将数据发布到 ROS 2 的话题中:

  1. ZED SDK(通过 Dockerfile.zed 安装)
  2. zed-ros2-wrapper (在安装说明步骤 1 中克隆)
  3. ZED X 驱动程序(由用户在安装说明步骤 3 中的主机上安装)

2.2.2.3.1 相机兼容性

zed ros2 封装程序支持的所有相机均可在 Isaac ROS 上运行。

ZED Model

SQA Testing?

ZED 2i

ZED X

ZED 2

ZED

ZED Mini

ZED X Mini

2.2.2.3.2 设置说明

注意事项

本教程假定您已按照此处的说明设置了开发环境。

  1. 克隆 isaac_ros_common 和 zed-ros2-wrapper 软件源:
    1. cd ${ISAAC_ROS_WS}/src && \
    2. git clone https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git && \
    3. git clone --recurse-submodules https://github.com/stereolabs/zed-ros2-wrapper

    注意

    ${ISAAC_ROS_WS} 被定义为指向 /ssd/workspaces/isaac_ros-dev/ 或 ~/workspaces/isaac_ros-dev/。

  2. 如果您使用的是 ZED X 或 ZED X Mini,请参阅相应的立体实验室设置指南。

    注意事项

    你不需要安装 ZED SDK,因为这是由 Dockerfile.zed 完成的。

    注意事项

    您必须安装 ZED 驱动程序。

  3. 在下一步启动 Docker 容器之前,请先插入 ZED 相机的 USB 电缆。

  4. 配置由 isaac_ros_common/scripts/run_dev.sh 创建的容器,使其包含 Dockerfile.zed。在 isaac_ros_common/scripts 目录中创建 .isaac_ros_common-config 文件:

    1. cd ${ISAAC_ROS_WS}/src/isaac_ros_common/scripts && \
    2. touch .isaac_ros_common-config && \
    3. echo CONFIG_IMAGE_KEY=ros2_humble.user.zed >> .isaac_ros_common-config
  5. 启动 Docker 容器

    1. cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
    2. ./scripts/run_dev.sh ${ISAAC_ROS_WS}

    这会在其中一个分层阶段使用 Dockerfile.zed 重建容器映像。重建需要一些时间。

  6. 在重建容器映像并进入容器后,你可以运行 /usr/local/zed/tools/ZED_Explorer 检查 ZED 相机是否已连接。

    /usr/local/zed/tools/ZED_Explorer

    如果一切正常,您应该会看到类似下面的内容:30b8fca99ab54567a8bd1995a3b37bf5.png

2.2.2.4 单目相机标定

注意事项

这些说明专门针对单目相机。要标定立体相机,请参阅相机标定说明。

  1. 按照 "开发环境设置 "设置开发环境。
  2. 打印一个已知尺寸的大棋盘格。
    1. 本教程使用的是一个 6x8 的棋盘,方格尺寸为 200 毫米。标定使用棋盘的内顶点,因此 "7x9 "棋盘使用内顶点参数 "6x8",如下例所示。具体尺寸的棋盘可在此处下载。
  3. 克隆 ROS 2 usb_cam 软件包:
    1. cd ${ISAAC_ROS_WS}/src && \
    2. git clone -b ros2 https://github.com/ros-drivers/usb_cam

    注意事项

    你的相机供应商可能会提供特定的 ROS 2 兼容相机驱动程序软件包,可以用来代替 usb_cam 软件包。

  4. 使用 run_dev.sh 脚本启动 Docker 容器:

    1. cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
    2. ./scripts/run_dev.sh
  5. 在容器内,构建工作区并为其添加源代码:

    1. cd /workspaces/isaac_ros-dev && \
    2. colcon build --symlink-install && \
    3. source install/setup.bash
  6. 运行 usb_cam 图像发布器:

    ros2 run usb_cam usb_cam_node_exe --remap __ns:=/my_camera --ros-args -p framerate:=30.0 -p image_height:=720 -p image_width:=1280
  7. 使用 run_dev.sh 脚本将另一个终端连接到 Docker 容器:

    1. cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
    2. ./scripts/run_dev.sh
  8. 运行相机标定程序:

    ros2 run camera_calibration cameracalibrator --size 6x8 --square 0.20 image:=/my_camera/image_raw camera:=/my_camera
  9. 完成相机标定教程中的第 6-8 步。

  10. 确保按下 "标定",然后按下 "保存 "按钮。

    您应该会在第二个终端中看到以下一行:

    ('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

    标定文件将保存在 /tmp/calibrationdata.tar.gz。

  11. 保存标定文件后,在每个终端输入 Ctrl+C 停止节点。

  12. 将标定文件移动到所需位置:

    1. cd /workspaces/isaac_ros-dev/src/<isaac_ros_metapackage>/<isaac_ros_package>/config/ && \
    2. tar -xvf /tmp/calibrationdata.tar.gz -C ./ ost.yaml && \
    3. mv ost.yaml camera_info.yaml

2.2.3 开发者环境设置

Isaac ROS 目前支持的开发流程是在目标平台上构建。你可以使用 Isaac ROS Buildfarm 在主机中设置 ROS 2 Humble,并使用 rosdep 设置依赖关系,也可以通过 run_dev.sh 使用基于 Isaac ROS Dev Docker 的开发环境。

我们强烈建议你使用 Isaac ROS Dev Docker 镜像来设置开发环境。这将简化您的开发环境设置,在 Jetson 和 x86_64 平台上使用正确版本的依赖项。在 Isaac ROS Dev Docker 容器中工作,还能自动访问我们的 Isaac ROS Buildfarm。

注意事项

所有 Isaac ROS 快速入门、教程和示例都是以 Isaac ROS Docker 映像作为先决条件设计的。

有关基于 Docker 的 Isaac ROS Dev 开发环境的更多信息,以及如何根据自己的需要对其进行定制,请查看本指南。

注意事项

开始之前,请确认设备上有足够的可用存储空间。我们建议至少要有 30 GB 的空间,以考虑容器和数据集的大小。

在 Jetson 平台上,需要使用 NVMe SSD 存储来提供足够的快速存储空间。请参见此处

  1. 在 x86_64 平台上:
    1. 使用说明安装 nvidia-container-toolkit。
    2. 使用说明为 Docker 配置 nvidia-container-toolkit。
  2. 在 Jetson 平台上: 按照此说明首先为 Jetson 设置固态硬盘,然后返回本文档并从第 2 步继续。
  3. 重新启动 Docker:
    sudo systemctl daemon-reload && sudo systemctl restart docker
  4. 安装 Git LFS,提取所有大文件:

    sudo apt-get install git-lfs
    git lfs install --skip-repo
  5. 创建 ROS 2 工作区,用于 Isaac ROS 的实验:

    用于使用固态硬盘作为可选存储的 Jetson 设置:

    1. mkdir -p /ssd/workspaces/isaac_ros-dev/src
    2. echo "export ISAAC_ROS_WS=/ssd/workspaces/isaac_ros-dev/" >> ~/.bashrc
    3. source ~/.bashrc
    1. mkdir -p ~/workspaces/isaac_ros-dev/src
    2. echo "export ISAAC_ROS_WS=${HOME}/workspaces/isaac_ros-dev/" >> ~/.bashrc
    3. source ~/.bashrc

    我们希望将来使用 ISAAC_ROS_WS 环境变量来引用 ROS 2 工作区目录。

要进一步定制开发环境,请查看本指南。

Isaac Sim 设置
Isaac Sim 是由 Omniverse 支持的英伟达机器人仿真平台。

Isaac Sim 可用于运行和测试 ROS2 应用程序。我们可以通过两种方式配置系统。

环路中的软件

环路中的硬件

环路中的软件(SIL)是指被测软件不在目标硬件平台上运行的配置。例如,Isaac ROS 软件包在部署到 Jetson 设备上之前在 x86 上进行测试就是 SIL。

硬件环路(HIL)是指在目标硬件平台上测试软件的配置。例如,Isaac ROS 软件包在 Jetson 设备上测试后再部署就是 HIL。

在这两种配置中,Isaac Sim 始终运行在 x86_64 机器上,提供传感器数据和世界信息。

  1. 安装 Isaac Sim,选择合适的工作环境:
    1. 本地
    2. Docker
    3. 注意

      本教程假设 Isaac Sim 使用本地环境。

  2. 请按照 "运行本地 ROS "的说明操作,确保已安装 ROS 2 和所需软件包,以便在 Omniverse Isaac Sim 中成功启用 ROS 2 桥接器。
  3. 按照说明启动 Isaac Sim 应用程序选择器窗口。b50b7ec682e54cacbb5ce0656f977827.png
  4. 如果没有安装系统级 ROS 2,请按照 ROS2 -> 无系统级安装 -> Humble 下的步骤操作。

    如果已安装系统级 ROS 2,请单击 "在终端中打开"(Open in Terminal)按钮。它会打开一个终端窗口,然后按照这里的 "ROS2 -> Ubuntu 22.04 -> Humble "概述的步骤操作。在继续之前,请确保您的 ROS 2 安装是源代码。

    如果需要 ROS_DOMAIN_ID 来创建一个独立的逻辑网络,请运行以下命令。

    export ROS_DOMAIN_ID=<your_domain_id>
  5. 启动 Isaac Sim。

    ./isaac-sim.sh
  6. 如下图所示,打开 Isaac ROS 示例场景。316b9ad0490445f2b8c34d9f29dde7cc.png

  7. 继续执行特定 Isaac ROS 软件包教程中的下一步。

注意事项

确保在运行示例程序之前设置 ROS_DOMAIN_ID 环境变量(如果先前已设置)。

设置完成后,查看 "资源库和软件包",开始运行 Isaac ROS 软件包!

2.3 Isaac 模拟教程

Isaac ROS 软件包还可以与 Isaac Sim 配合使用,后者是由 Omniverse 支持的英伟达机器人仿真平台。本网站提供了大量教程,供您学习如何将 Isaac Sim 与 Isaac ROS 结合使用。

  • 使用 Isaac Sim 进行 AprilTag 检测的教程
  • 使用 Isaac Sim 的视觉 SLAM 教程
  • 使用 Isaac Sim 的 Nvblox 教程
  • 使用 Isaac Sim 进行 DNN 物体检测的教程
  • 使用 Isaac Sim 的 SGM 立体差分教程
  • 使用 Isaac Sim 进行 DNN 立体深度估计的教程
  • 利用 Isaac Sim 实现 Bi3D 的教程
  • 使用 Isaac Sim 进行自由空间分割教程
  • Isaac ROS 占用网格定位器 Nav2 Isaac Sim 教程
  • 使用 Isaac Sim 进行 DNN 图像分割的教程
  • Isaac ROS 任务客户端教程

三、性能总结

在 Jetson 和 x86_64 平台上对 Isaac ROS 软件包进行基准测试的性能结果如下:

 87a6c2cb92ab4caeb0811ffb790f4329.png

3.1 使用方法

以上提供的性能数据是使用 Isaac ROS 基准测得的。此处每个基准的启动脚本中都提供了用于重现结果的配置文件。

每秒帧数(fps)是使用每个所列平台上加速计算管道的最大持续坐标系帧速率测得的。测得的性能包括输入节点 → 性能测试中的节点图 → 输出节点,其中输入节点的发布速率经过自动调整,以发现峰值吞吐量的坐标系掉帧率小于 5%。计算 5 次运行的平均帧频,剔除最小和最大运行;以与传感器捕获速率相匹配的 30hz 发布速率测量延迟。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/675379
推荐阅读
相关标签
  

闽ICP备14008679号