Isaac ROS 文档翻译(续)


页面 7:单目相机标定 (Monocular Camera Calibration)

原文https://nvidia-isaac-ros.github.io/getting_started/hardware_setup/sensors/camera_calibration.html

单目相机标定

  1. 按照「开发环境设置」中的说明设置您的开发环境。

  2. 打印一个具有已知尺寸的大型棋盘格。

    本教程使用 6×8 棋盘格,方格尺寸为 200mm。标定使用棋盘格的内部顶点,因此一个「7×9」的棋盘使用如下示例中的内部顶点参数「6×8」。可以在此处下载特定尺寸的棋盘格。

  3. 克隆 ROS 2 usb_cam 包:

cd ${ISAAC_ROS_WS}/src && \
  git clone -b ros2 https://github.com/ros-drivers/usb_cam

注意:您的相机厂商可能会提供特定的 ROS 2 兼容相机驱动包,可用于替代 usb_cam 包。

  1. 使用 run_dev.sh 脚本启动 Docker 容器:
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
  ./scripts/run_dev.sh
  1. 在容器内,构建并 source 工作空间:
cd /workspaces/isaac_ros-dev && \
  colcon build --symlink-install && \
  source install/setup.bash
  1. 运行 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
  1. 使用 run_dev.sh 脚本将另一个终端附加到 Docker 容器:
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
  ./scripts/run_dev.sh
  1. 运行相机标定器:
ros2 run camera_calibration cameracalibrator --size 6x8 --square 0.20 image:=/my_camera/image_raw camera:=/my_camera
  1. 完成此相机标定教程中的第 6-8 步。

  2. 确保您按下 Calibrate(标定)按钮,然后按下 Save(保存)按钮。

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

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

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

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

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

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

页面 8:Isaac Sim 设置 (Isaac Sim Setup)

原文https://nvidia-isaac-ros.github.io/getting_started/isaac_sim/index.html

Isaac Sim 是 NVIDIA 基于 Omniverse 的机器人仿真平台。

Isaac Sim 可用于运行和测试 ROS 2 应用。我们有两种配置系统的方式:

  • 软件在环 (SIL):指被测软件不在目标硬件平台上运行。例如,在 x86 上测试 Isaac ROS 包,然后再部署到 Jetson 设备上。
  • 硬件在环 (HIL):指被测软件在目标硬件平台上运行。例如,在 Jetson 设备上测试 Isaac ROS 包,然后再部署。

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

Isaac Sim 5.0 与 5.1

  1. 安装 Isaac Sim,选择适当的工作环境:

    • Native(原生)
    • Docker
    • Cloud(云端)

    注意:本教程假设使用 Isaac Sim 的 Native 环境。

  2. 按照「Running Native ROS」说明,确保安装了 ROS 2 和所需包,以成功启用 Omniverse Isaac Sim 中的 ROS 2 Bridge。

  3. 按照说明启动 Isaac Sim App Selector 窗口,然后点击 Open in Terminal 按钮。

  4. 如果您没有系统级 ROS 2 安装,请按照此处 ROS 2 -> Humble 下的步骤操作。

    可选地,如果需要 ROS_DOMAIN_ID 来创建独立的逻辑网络,请在同一终端中运行以下命令:

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

    ./isaac-sim.sh
    
  6. 按如下所示打开 Isaac ROS 示例场景。

  7. 继续执行您特定 Isaac ROS 包教程中的后续步骤。

    注意:如果之前设置了 ROS_DOMAIN_ID 环境变量,在运行示例应用前请确保已设置该变量。


页面 9:Docker 开发环境 (Docker Development Environment)

原文https://nvidia-isaac-ros.github.io/concepts/docker_devenv/index.html

开发环境

Isaac ROS 开发环境在目标平台的 Docker 容器中使用 run_dev.sh 脚本运行。在您的机器上设置好包含您的包、第三方包以及一个或多个 Isaac ROS 包的 ROS 工作空间后,您可以使用此脚本启动一个包含所有系统库和依赖项的 Docker 容器,以进行构建。

run_dev.sh 设置了一个包含 ROS 2 和关键版本 NVIDIA 框架的开发环境,为 x86_64 和 Jetson 平台做好准备。此脚本为主机准备了一个支持配置的 Docker 镜像,并将您带入容器内运行的 bash 提示符。从这里,您可以执行 ROS 2 构建/运行命令,您的主机工作空间文件会被挂载到容器中,并可在主机和容器中编辑。注意:如果您在脚本运行时再次运行它,它会将一个新的 shell 附加到同一运行中的容器。

$PATH_TO_ISAAC_ROS_COMMON/scripts/run_dev.sh -d $PATH_TO_ROS_WORKSPACE

有关 run_dev.sh 参数的完整描述,请参阅此处。

镜像键 (Image Keys)

run_dev.sh 准备一个基础 Docker 镜像,并将您的目标工作空间挂载到运行中的容器。基础 Docker 镜像本身由 build_image_layers.sh 脚本组装,该脚本解析一个称为镜像键 (image key) 的点分隔字符串。镜像键指定了要按顺序构建为层的一系列匹配 Dockerfile。

build_image_layers.sh 将对应的 Dockerfile 与镜像键匹配。例如,镜像键 first.second.third 可以匹配 { Dockerfile.first, Dockerfile.second, Dockerfile.third },run_dev.sh 将构建 Dockerfile.first 的镜像,然后使用该镜像作为基础镜像构建 Dockerfile.second,依此类推。文件匹配会寻找最大子序列,因此 first.second.third 也可以匹配 { Dockerfile.first.second, Dockerfile.third },具体取决于搜索路径中存在哪些文件。

预构建镜像

作为调用 run_dev.sh 时构建镜像准备的一部分,Dockerfile 将与目标镜像键匹配。确定 Dockerfile 后,build_image_layers.sh 将检查远程 Docker 仓库中是否存在与匹配 Dockerfile 哈希值匹配的镜像。如果存在,它将拉取该镜像并使用它,而不是尝试在本地构建镜像。如果您更改了任何 Dockerfile 的内容,您可能会更改哈希值,并导致 build_image_layers.sh 在本地重新构建 Docker 镜像。

NVIDIA 在 NVCR (NVIDIA Container Registry) 上为标准镜像键 aarch64.ros2_humblex86_64.ros2_humble 提供预构建的 Docker 镜像,以方便用户使用。如果您本地副本的 Dockerfile.x86_64Dockerfile.aarch64Dockerfile.ros2_humble 与这些预构建镜像的哈希内容匹配,run_dev.sh 将找到并下载它们作为构建基础,而不是从头开始。

以下在 .isaac_ros_common-config 中配置的键可让您确定将检查哪些远程仓库。示例 .isaac_ros_common-config 文件:

CONFIG_IMAGE_KEY=ros2_humble.mine
CONFIG_DOCKER_SEARCH_DIRS=(../ros_ws/src/isaac_ros_common/docker ../lib/src/gxf/docker)
CONFIG_CONTAINER_NAME_SUFFIX=mysuffix
BASE_DOCKER_REGISTRY_NAMES=("nvcr.io/isaac/ros" "some.other/image/name")

离线开发环境

如果您之前已经构建了基础镜像,并且希望 run_dev.sh 不要尝试重建基础镜像或执行任何可能需要互联网连接的操作,您可以使用 -b/--skip_image_build 参数以离线方式运行。


页面 10:Isaac ROS Common 仓库

原文https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_common/index.html

概述

Isaac ROS Common 仓库包含一系列用于构建、测试和使用 Isaac ROS 的基本包。

有关已知问题的解决方案,请参阅「故障排除」部分。

支持的平台

此包设计并测试为与在以下平台上运行的 ROS 2 Jazzy 兼容:

  • Jetson
  • 配备 NVIDIA GPU 的 x86_64 系统
  • DGX Spark 工作站

其他基于 GB10 的平台可能可以运行,但不在测试矩阵中,我们无法保证其行为。

Isaac ROS 环境

为简化开发,我们强烈建议利用 Isaac ROS CLI,按照以下步骤操作。这可以简化所有支持平台上依赖项正确版本的开发环境设置。

注意:所有 Isaac ROS 快速入门、教程和示例都设计为以 Isaac ROS CLI 管理的环境为前提。

自定义开发环境

要自定义开发环境,请参阅本指南。

更新日志

日期 变更
2026-04-30 兼容性和集成更新,适用于 Isaac ROS 4.4.0 版本
2026-03-23 引入 SIPL 相机框架和 LI Eagle 立体 CoE/HSB 相机的早期支持
2026-02-19 支持 DGX Spark 和 JetPack 7.1
2026-02-02 支持两种新的 Docker 可选开发和部署模式
2025-10-24 支持 ROS 2 Jazzy,将 Docker 开发容器功能移至 Isaac ROS CLI
2024-12-10 重构 Dockerfile
2024-09-26 更新至 Isaac ROS 3.1
2024-05-30 更新以兼容 JetPack 6.0
2023-10-18 更新至 Isaac ROS 2.0.0
2023-05-25 刷新 ROS 2 Humble
2023-04-05 实验性支持 WSL2,合并镜像键 humblenav2ros2_humble
2022-10-19 次要更新和错误修复
2022-08-31 更新以兼容 JetPack 5.0.2
2022-06-30 支持 ROS 2 Humble 和杂项错误修复
2022-06-16 更新 run_dev.sh 并移除 isaac_ros_nvengine
2021-10-20 迁移至 NVIDIA-ISAAC-ROS,添加 isaac_ros_nvengineisaac_ros_nvengine_interfaces
2021-08-11 初始发布至 NVIDIA-AI-IOT

页面 11:Isaac ROS Visual SLAM

原文https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_visual_slam/index.html

概述

Isaac ROS Visual SLAM 提供了一个高性能、同类最佳的 ROS 2 包,用于 VSLAM(视觉同步定位与建图)。此包使用一个或多个立体相机,并可选择性地使用 IMU 来估计里程计,作为导航的输入。它通过 GPU 加速,在机器人应用中提供实时、低延迟的结果。VSLAM 为移动机器人(地面)提供额外的里程计来源,并可作为无人机的主要里程计来源。

VSLAM 提供了一种视觉估计机器人相对于其起始位置位置的方法,称为 VO(视觉里程计)。这在 GPS 不可用(如室内)或间歇性可用(如城市环境中建筑物阻挡 GPS 卫星视线)的环境中特别有用。此方法设计为使用多个立体相机帧和 IMU(惯性测量单元)作为输入。它使用立体图像对来寻找匹配的关键点。利用相机对之间的基线,它可以估计到关键点的距离。使用连续的图像,VSLAM 可以跟踪关键点的运动以估计相机的 3D 运动——然后用于计算里程计作为导航的输出。与经典的 VSLAM 方法相比,此方法使用 GPU 加速来实时查找和匹配更多关键点,并进行微调以最小化整体重投影误差。

关键点依赖于图像中的独特特征,这些特征可以在尺寸、方向、视角、光照和图像噪声变化的情况下被重复检测。在某些情况下,关键点的数量可能有限或完全不存在;例如,如果相机视野只看着一堵大的纯色墙,可能不会检测到任何关键点。如果关键点不足,此模块将使用 IMU 感知的运动来提供运动传感器,当测量时,可以提供里程计的估计。这种方法称为 VIO(视觉惯性里程计),在场景中缺乏可跟踪运动的独特特征时,可以提高估计性能。

准确性

VSLAM 是一个同类最佳的包,在 KITTI Visual Odometry / SLAM Evaluation 2012 上测量,具有最低的平移和旋转误差,适用于实时应用。

方法 运行时间 平移误差 旋转误差 平台
VSLAM 0.007s 0.94% 0.0019 deg/m Jetson AGX Xavier aarch64
ORB-SLAM2 0.06s 1.15% 0.0027 deg/m 2 cores @ >3.5 GHz x86_64

除了标准基准测试的结果外,我们还在超过 1000 米的序列上测试 VSLAM 的闭环检测,覆盖室内和室外场景。

  • isaac_ros_visual_slam
    • Quickstart
    • Try More Examples
    • Coordinate Frames
    • Troubleshooting
    • API
  • isaac_ros_visual_slam_interfaces

相机系统要求

向此包提供数据的相机系统必须遵守以下规范:

规格 要求规格
最低目标图像帧率 30 赫兹
图像帧率中允许的最大抖动 +/- 2 毫秒
立体相机内图像之间的最大预期偏移 +/- 100 微秒
立体相机之间图像的最大预期偏移 +/- 100 微秒

支持的平台

此包设计并测试为与在以下平台上运行的 ROS 2 Jazzy 兼容:

  • Jetson
  • 配备 NVIDIA GPU 的 x86_64 系统
  • DGX Spark 工作站

其他基于 GB10 的平台可能可以运行,但不在测试矩阵中,我们无法保证其行为。

Isaac ROS 环境

为简化开发,我们强烈建议利用 Isaac ROS CLI,按照以下步骤操作。这可以简化所有支持平台上依赖项正确版本的开发环境设置。

注意:所有 Isaac ROS 快速入门、教程和示例都设计为以 Isaac ROS CLI 管理的环境为前提。

自定义开发环境

要自定义开发环境,请参阅本指南。

商业支持与源码访问

有关商业支持和源码访问,请联系 NVIDIA。


翻译完成。以上文档基于 NVIDIA Isaac ROS 官方文档,仅供参考。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐