Isaac ROS 3.2 编译

RTX 3080

ubuntu 22.04

x86_64

cuda 12.6.3

nvidia container tool

RTX 3080 是 Ampere 架构(CC 8.6),完全满足 Isaac ROS 3.2 的要求。关于 GXF 最后一个开源版本的问题,我先核实一下,顺便确认 3.2 对 Ubuntu 24.04 的支持情况。

已核实清楚,先回答你的两个疑问:

1. GXF 最后一个开源版本------是的,就是对应 Isaac ROS 3.2 的那一版

NVIDIA 开源的 GXF 仓库(https://github.com/NVIDIA-ISAAC-ROS/gxf)目前只有 release-2.0.0release-2.1release-3.2 三个发布分支,最后一次更新是 2024-11-05 升级到 GXF 4.1 (随 Isaac ROS 3.2 发布)。Isaac ROS 4.0 起不再有对应的 GXF 开源分支,GXF 仅以预编译二进制形式随 isaac_ros_gxf 包分发。所以你说的没错:GXF 最后一个开源版本就是 Isaac ROS 3.2 配套的 GXF 4.1。

2. Ubuntu 版本选择------必须用 22.04,不能用 24.04

  • Isaac ROS 3.2 只支持 Ubuntu 22.04 + ROS 2 Humble + CUDA 12.6
  • Ubuntu 24.04 对应 ROS 2 Jazzy,从 Isaac ROS 4.0(2025 年 10 月,CUDA 13.0)才开始支持。

RTX 3080(Ampere,CC 8.6,10GB/12GB 显存)满足 3.2 的要求(Ampere 或更新、显存 ≥8GB、驱动 ≥560)。结论:Ubuntu 22.04 + RTX 3080 + Isaac ROS 3.2 是官方支持的组合。

3. 源码编译安装步骤(Ubuntu 22.04 / RTX 3080 / x86_64)

① 宿主机准备

bash 复制代码
# 驱动 ≥ 560(nvidia-smi 确认 CUDA 12.6+)
# 安装 Docker(含 buildx 插件)和 NVIDIA Container Toolkit
sudo apt-get install git-lfs
git lfs install --skip-repo
sudo usermod -aG docker $USER && newgrp docker

② 创建工作区,克隆 isaac_ros_common(release-3.2 分支)

bash 复制代码
mkdir -p ~/workspaces/isaac_ros-dev/src
echo "export ISAAC_ROS_WS=${HOME}/workspaces/isaac_ros-dev/" >> ~/.bashrc
source ~/.bashrc
cd ${ISAAC_ROS_WS}/src
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git

③ 启动 Isaac ROS Dev 容器(x86 默认基于 ros2_humble 镜像)

bash 复制代码
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && ./scripts/run_dev.sh

④ 容器内克隆功能包并编译(以 visual_slam 为例,其他包同理)

bash 复制代码
cd /workspaces/isaac_ros-dev/src
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_visual_slam.git
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nitros.git  # 多数包的依赖

cd /workspaces/isaac_ros-dev
rosdep update
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
# 可能因为网络因素在 65/67 时断掉cmake FetchContent(),这时可以重新尝试执行:
#colcon build --symlink-install --packages-up-to isaac_ros_r2b_galileo
source install/setup.bash

中断补救

中断信息:

方案1:重试

可能因为网络因素在 65/67 时断掉cmake FetchContent(),这时可以重新尝试执行,需要下载将近 500MB 的数据:

bash 复制代码
colcon build --symlink-install --packages-up-to isaac_ros_r2b_galileo

另附检测网络的命令

bash 复制代码
#DNS 解析检测:
nslookup xfiles.ngc.nvidia.com
# 或
dig +short xfiles.ngc.nvidia.com

#TCP 443 端口连通性检测:
curl -v --connect-timeout 10 telnet://xfiles.ngc.nvidia.com:443 2>&1 | head -5

# HTTPS 握手 + HTTP/2 支持(关键)检测:
curl -sS -o /dev/null -w "HTTP状态: %{http_code}\n协议: %{http_version}\n握手耗时: %{time_appconnect}s\n" \
  --connect-timeout 15 --max-time 30 \
  https://xfiles.ngc.nvidia.com/
 
 # 实际下载速度测试(最有说服力)
# 下载 Isaac ROS 的一个实际资产文件测速(约几十 MB)
curl -o /tmp/ngc_test.bin -w "\n下载速度: %{speed_download} B/s\n总大小: %{size_download} bytes\n耗时: %{time_total}s\n" \
  --connect-timeout 15 \
  "https://api.ngc.nvidia.com/v2/resources/nvidia/isaac/isaac_ros_nvblox_assets/versions"

# 或直接测 xfiles 上的对象(响应头即可,看它支不支持断点续传)
curl -sI --max-time 20 "https://xfiles.ngc.nvidia.com/" | head -10
# 更真实的压测------找一个大的 NGC 资产连续下载,观察是否中途掉速/断开:
# 例如 FoundationPose 模型文件(约几百 MB,真实走 api.ngc 分发)
time curl -L -o /tmp/fp_test.onnx \
  "https://api.ngc.nvidia.com/v2/models/nvidia/isaac/foundationpose/versions/1.0.0_onnx/files/score_model.onnx"

方案2: 手动下载 500 MB 数据的方案

手动断点续传下载,再让编译跳过下载

curl -C - 支持断点续传,断了重跑同一条命令即可,比 CMake 内置下载抗造得多:

bash 复制代码
# 容器内执行
cd /workspaces/isaac_ros-dev

# 清掉失败的构建目录
rm -rf build/isaac_ros_r2b_galileo

# 预建 FetchContent 期望的下载目录
mkdir -p build/isaac_ros_r2b_galileo/data/r2b_galileo
cd build/isaac_ros_r2b_galileo/data/r2b_galileo

# 手动下载(断了就重复执行这两条,会续传)
curl -L -C - -o metadata.yaml \
  "https://api.ngc.nvidia.com/v2/resources/org/nvidia/team/isaac/r2bdataset2024/1/files?redirect=true&path=r2b_galileo/metadata.yaml"

curl -L -C - -o r2b_galileo_0.mcap \
  "https://api.ngc.nvidia.com/v2/resources/org/nvidia/team/isaac/r2bdataset2024/1/files?redirect=true&path=r2b_galileo/r2b_galileo_0.mcap"

# 回到工作区重新编译
cd /workspaces/isaac_ros-dev
colcon build --symlink-install --packages-up-to isaac_ros_r2b_galileo
source install/setup.bash

原理:这个 FetchContent 声明没有设 URL_HASH 校验,ExternalProject 发现目标文件已存在就会跳过下载步骤,直接进入后续构建。

方案3: 侵入式下载 500MB 数据的方案

覆写 DOWNLOAD_COMMAND,换成 curl 断点续传(根治)

FetchContent_Declare 的参数会透传给 ExternalProject,而后者允许用 DOWNLOAD_COMMAND 完全替换内置下载逻辑。直接改包里的 CMakeLists(源码就在你工作区里,随便改):

文件:src/isaac_ros_common/isaac_ros_r2b_galileo/CMakeLists.txt

bash 复制代码
FetchContent_Declare(
  metadata
  URL ${BASE_URL}/metadata.yaml
  DOWNLOAD_COMMAND curl -L -C - --retry 20 --retry-all-errors --connect-timeout 30
      -o <DOWNLOAD_DIR>/metadata.yaml ${BASE_URL}/metadata.yaml
  DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/data/${DATASET_NAME}/
  DOWNLOAD_NO_EXTRACT TRUE
)

FetchContent_Declare(
  mcap
  URL ${BASE_URL}/${DATASET_NAME}_0.mcap
  DOWNLOAD_COMMAND curl -L -C - --retry 20 --retry-all-errors --connect-timeout 30
      -o <DOWNLOAD_DIR>/${DATASET_NAME}_0.mcap ${BASE_URL}/${DATASET_NAME}_0.mcap
  DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/data/${DATASET_NAME}/
  DOWNLOAD_NO_EXTRACT TRUE
)

键参数含义:

  • -C -:断点续传,检测到本地已有部分文件就从断点继续;
  • --retry 20 --retry-all-errors:任何错误(包括 HTTP/2 流中断)都自动重试,最多 20 次,且重试也走续传;
  • <DOWNLOAD_DIR>:ExternalProject 的内置占位符,会被替换成 DOWNLOAD_DIR 指定的路径;
  • DOWNLOAD_NO_EXTRACT TRUE:必须保留,否则自定义下载后 ExternalProject 还会尝试解压。

改完后:

bash 复制代码
rm -rf build/isaac_ros_r2b_galileo
colcon build --symlink-install --packages-up-to isaac_ros_r2b_galileo

中断后重跑这条 colcon 命令即可,curl 会接着上次的位置继续下。

方案3 完结。

⑤(可选)从源码编译开源 GXF 并替换进 NITROS

这是 3.2 独有的能力(4.0 起 GXF 闭源),步骤来自 GXF 仓库 README:

bash 复制代码
cd ${ISAAC_ROS_WS}/src
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/gxf.git
# isaac_ros_common 和 isaac_ros_nitros 已在上面克隆

# 配置镜像 key 和 Dockerfile 搜索路径
echo "CONFIG_IMAGE_KEY=ros2_humble.user.gxf" >> ${ISAAC_ROS_WS}/src/isaac_ros_common/scripts/.isaac_ros_common-config
echo "CONFIG_DOCKER_SEARCH_DIRS=(../../gxf/docker)" >> ${ISAAC_ROS_WS}/src/isaac_ros_common/scripts/.isaac_ros_common-config

# 重新启动容器(会构建带 gxf 的镜像层)
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && ./scripts/run_dev.sh

# 容器内:编译 GXF 并安装到 isaac_ros_gxf 包
cd /workspaces/isaac_ros-dev/src/gxf && \
  ./build_install_gxf_release.sh -i /workspaces/isaac_ros-dev/src/isaac_ros_nitros/isaac_ros_gxf

之后再 colcon build --symlink-install 编译其余包,即使用你自己编译的 GXF 运行时。

4. 第5步 构建 gxf 方式的原因分析

gxf 的构建方式,跟其他模块在docker container 下载后构建的方式不同,而是先在 容器外下载后,再在容器内构建。

好问题,这触及了 GXF 和其他 Isaac ROS 包的本质区别:GXF 不是一个 ROS 包,它是 ROS 之下的一层运行时框架。具体有四个原因:

1. GXF 不用 colcon 构建------它连 ROS 都不认识

其他包(visual_slam、nitros 等)都是标准 ROS 2 包:有 package.xml、用 CMake/ament 构建,colcon build 能自动识别。

GXF 是一个纯 C++ 框架(NITROS 节点内嵌的计算图引擎,和 Holoscan、DeepStream 共用),没有 package.xml,构建系统是 Bazel 而非 CMake 。把它放进 src/ 里 colcon 会直接忽略它,甚至报错。所以它用自己的构建脚本 build_install_gxf_release.sh(内部调 Bazel)。

2. 编译 GXF 需要一套额外的工具链,那两行配置就是装这个的

Bazel 编译 GXF 需要 Bazelisk、特定的构建依赖,这些默认镜像里没有。这两行配置的作用:

bash 复制代码
CONFIG_IMAGE_KEY=ros2_humble.user.gxf        # 镜像层链追加 gxf 层
CONFIG_DOCKER_SEARCH_DIRS=(../../gxf/docker) # 告诉构建脚本去哪找 gxf 的 Dockerfile

run_dev.sh 的镜像构建是分层叠加 的:x86_64(基础)→ ros2_humble(ROS 环境)→ user(用户工具)→ gxf(Bazel 工具链)。加了这两个配置后,build_image_layers.sh 会多构建一层,把 GXF 的编译依赖装进镜像。

3. 关键原因:容器是临时的(--rm),容器内装的东西退出即丢

回看 run_dev.sh 的启动参数:docker run -it --rm------最后一个终端退出容器后,容器就销毁了 。如果你想偷懒,在容器里手动 apt install bazel 然后编译 GXF,当时能成,但容器一退,Bazel 就没了,下次进来又要重装。

所以"构建工具链"这类需要长期存在 的东西,必须固化进镜像层(重建镜像);而"编译产物"放在挂载的工作区目录里(src/install/ 都在宿主机上),天然持久。这正是流程设计成分两层的逻辑:

内容 存放方式 生命周期
Bazel 等编译工具 Docker 镜像层(.user.gxf 永久,随镜像
GXF 编译产物、ROS 包 挂载目录 ~/workspaces/isaac_ros-dev 永久,随宿主机磁盘
容器本身 --rm 临时,退出即销毁

4. 产物去向也不同:不是装进 install/,而是"替换"

其他包编译后产物进 install/,通过 source install/setup.bash 生效。GXF 的产物则是由 build_install_gxf_release.sh -i 直接替换 isaac_ros_nitros/isaac_ros_gxf 包里的预编译二进制和头文件 (该包默认装的是 NVIDIA 官方编好的 GXF)。之后再 colcon build 其余包时,NITROS 全家链接的就是你亲手编译的 GXF 运行时了。

总结:其他包是"ROS 包,用 colcon 编";GXF 是"ROS 之下的 Bazel 项目,需要专门工具链,产物要注入回 ROS 包里"------所以多了一步重建镜像(固化 Bazel 工具链)和一步脚本安装(替换预编译二进制)。如果你只是想用 Isaac ROS 而不是研究/修改 GXF 本身,这个可选步骤完全可以跳过。

文档地址

5. run_dev.sh 的工作

run_dev.sh 做的工作可以分为 5 个阶段

1. 读取配置与解析参数

  • 依次读取两个配置文件(存在则加载):
    • 仓库内的 ${ISAAC_ROS_WS}/src/isaac_ros_common/scripts/.isaac_ros_common-config
    • 用户主目录的 ~/.isaac_ros_common-config优先级更高,会覆盖前者
  • 关键配置项:CONFIG_IMAGE_KEY(决定构建哪套镜像层,默认 ros2_humble)、CONFIG_SKIP_IMAGE_BUILDCONFIG_CONTAINER_NAME_SUFFIXCONFIG_DOCKER_SEARCH_DIRS 等。
  • 解析命令行参数:-d(指定工作区目录,默认取 $ISAAC_ROS_WS)、-i(image key)、-b(跳过镜像构建)、-a(追加 docker run 参数)、-v(调试输出)。

2. 环境检查(不满足就直接退出)

  • 工作区目录必须存在;
  • 禁止 root 运行
  • 当前用户必须在 docker 组且能执行 docker ps
  • 必须安装了 git-lfs,并检查工作区内所有 LFS 文件已真正下载(防止只拉到指针文件导致后续编译失败)。

3. 容器复用判断

  • 容器名固定为 isaac_ros_dev-x86_64-container(aarch64 平台则是 isaac_ros_dev-aarch64-container);
  • 先清理同名的已退出容器;
  • 如果同名容器正在运行,不新建容器 ,直接 docker exec -u admin 以 admin 用户 attach 进去并退出脚本------这就是你可以开多个终端同时进同一个 Dev 容器的原因。

4. 构建 Docker 镜像(核心耗时步骤)

镜像 key 拼成 x86_64.ros2_humble,然后调用同目录的 build_image_layers.sh 构建名为 isaac_ros_dev-x86_64 的镜像。这个脚本做的事情是:

  • 按 image key 在 docker/ 目录(以及 CONFIG_DOCKER_SEARCH_DIRS 指定的额外目录,比如你编 GXF 时加的 ../../gxf/docker找到一串分层 Dockerfile 逐层构建
  • 底层从 NGC 拉取 Isaac ROS 官方基础镜像(x86 为 nvcr.io/nvidia/isaac/ros:x86_64-ros2_humble-...),里面已包含 Ubuntu 22.04 + CUDA 12.6 + TensorRT + ROS 2 Humble + Isaac APT 仓库源;
  • 上层叠加开发工具(rosdepcolconccache、调试工具等),并创建与宿主机 UID/GID 一致的 admin 用户,保证容器里编译产物的文件归属正确。

构建失败时若本地有缓存镜像会给出警告并继续;加 -b 可完全跳过构建(适合镜像已构建好、只想快速进容器的情况)。

5. 组装参数并启动容器

拼出 docker run 命令,关键参数:

参数 作用
--runtime nvidia + NVIDIA_VISIBLE_DEVICES=all + NVIDIA_DRIVER_CAPABILITIES=all 把 RTX 3080 及全部驱动能力(compute/graphics/video 等)透传进容器
--privileged --network host --ipc=host 共享主机网络与 IPC(ROS 2 DDS 通信、相机/设备访问需要)
-v /tmp/.X11-unix ... -e DISPLAY 转发 X11,容器内可跑 RViz 等 GUI
-v $ISAAC_ROS_WS:/workspaces/isaac_ros-dev 工作区目录挂载进容器 ------这就是容器内编译的源码和产物都保留在宿主机 ~/workspaces/isaac_ros-dev 的原因,容器删了代码不丢
-e HOST_USER_UID/GID 供 entrypoint 对齐容器内用户权限
-e ROS_DOMAIN_ID 透传 ROS 2 域 ID
--entrypoint workspace-entrypoint.sh 容器启动入口:处理用户映射、source ROS 环境等
-v $SSH_AUTH_SOCK:/ssh-agent(如有) 转发 SSH agent,容器内可直接用宿主机的 git SSH key
aarch64 专属挂载(tegrastats、VPI、PVA 等) x86 平台会跳过这段

另外,如果存在 ~/.isaac_ros_dev-dockerargs 或仓库下的 .isaac_ros_dev-dockerargs 文件,里面每行的额外 docker run 参数(经 envsubst 展开变量后)也会被追加------比如你想挂载额外的数据集目录、加 --shm-size,就写在这个文件里,不用改脚本。

总结:run_dev.sh = 读配置 → 环境自检 → 复用或构建 isaac_ros_dev-x86_64 分层镜像 → 以 GPU 直通 + 工作区挂载 + 主机网络的方式启动/进入一个与宿主机用户权限对齐的开发容器。 首次运行的几十分钟基本花在第 4 步拉取和构建镜像上;之后再次执行因为镜像已缓存、容器复用机制存在,几秒内就能进入容器。

6. 具体功能包(Visual SLAM、nvblox、FoundationPose 等)在 3.2 下的完整编译与运行流程

下面按"通用前置 → 各包编译 → 各包运行"整理,全部基于 release-3.2 文档。

通用前置(三个包共用)

bash 复制代码
# 宿主机:工作区 + isaac_ros_common + 进入 Dev 容器
mkdir -p ~/workspaces/isaac_ros-dev/src
export ISAAC_ROS_WS=${HOME}/workspaces/isaac_ros-dev
cd ${ISAAC_ROS_WS}/src
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git
cd isaac_ros_common && ./scripts/run_dev.sh     # 首次会构建镜像

三个包的官方 Quickstart 都提供了 Debian 安装sudo apt-get install ros-humble-isaac-ros-xxx)和源码编译 两条路;下面以你要的源码编译为主。所有包的演示数据(rosbag、模型、mesh)都从 NGC 下载到 ${ISAAC_ROS_WS}/isaac_ros_assets,宿主机先装好 curl jq tar


1. Visual SLAM(cuVSLAM,双目/多目视觉惯性 SLAM)

编译(容器内):

bash 复制代码
cd /workspaces/isaac_ros-dev/src
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_visual_slam.git
# 依赖:isaac_ros_nitros(NITROS 类型适配)
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nitros.git

cd /workspaces/isaac_ros-dev
rosdep update && rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install --packages-up-to isaac_ros_visual_slam
source install/setup.bash

说明:cuVSLAM 核心算法库以预编译 GXF 扩展形式随仓库分发(闭源部分),你编译的是 ROS 2 节点封装。3.2 支持最多 32 路相机(16 对双目)、IMU 融合、地图保存/加载定位(SaveMap / LocalizeInMap 服务)。

运行(以 RealSense D435i 为例):

bash 复制代码
# 终端 1(容器内):启动 VSLAM + RealSense
ros2 launch isaac_ros_visual_slam isaac_ros_visual_slam_realsense.launch.py

# 终端 2(再执行一次 run_dev.sh 进入同一容器):RViz 可视化
rviz2 -d $(ros2 pkg prefix isaac_ros_visual_slam --share)/rviz/...   # 包内自带 rviz 配置

常用输出:/visual_slam/tracking/odometry(里程计)、map -> odom -> base_link 的 TF;调参重点:enable_imu_fusionenable_localization_n_mappingsave_map_folder_path / load_map_folder_path 等。

文档: https://nvidia-isaac-ros.github.io/v/release-3.2/concepts/visual_slam/index.html (含 Isaac Sim / RealSense / HAWK / 多目四个教程)


编译(容器内):

bash 复制代码
cd /workspaces/isaac_ros-dev/src
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nvblox.git
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nitros.git   # 依赖

cd /workspaces/isaac_ros-dev
rosdep update && rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install --packages-up-to nvblox_examples_bringup
source install/setup.bash

下载演示数据(宿主机或容器均可): 用文档里的 NGC 下载脚本(NGC_RESOURCE="isaac_ros_nvblox_assets",自动匹配 3.2 对应版本),解压到 ${ISAAC_ROS_WS}/isaac_ros_assets

运行(自带 rosbag 演示,无需相机):

bash 复制代码
ros2 launch nvblox_examples_bringup isaac_sim_example.launch.py \
  rosbag:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_nvblox/quickstart \
  navigation:=False

RViz 中会看到机器人实时重建的 3D mesh + 叠加的 2D ESDF 切片。接真机时换 realsense_example.launch.pyzed_example.launch.py;要接 Nav2 导航时设 navigation:=True

文档: https://nvidia-isaac-ros.github.io/v/release-3.2/repositories_and_packages/isaac_ros_nvblox/isaac_ros_nvblox/index.html


3. FoundationPose(6DoF 零样本物体位姿估计)

3.2 中 FoundationPose 在 isaac_ros_pose_estimation 仓库里。完整管线 = RT-DETR(2D 检测)→ Detection2DToMask → FoundationPose(位姿估计/跟踪)。

编译(容器内):

bash 复制代码
cd /workspaces/isaac_ros-dev/src
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_pose_estimation.git
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_dnn_inference.git  # TensorRT 推理节点
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_rtdetr.git          # RT-DETR 检测
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nitros.git          # 依赖
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_examples.git        # 演示 launch

cd /workspaces/isaac_ros-dev
rosdep update && rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install --packages-up-to isaac_ros_foundationpose isaac_ros_rtdetr isaac_ros_examples
source install/setup.bash

下载模型和演示数据:

bash 复制代码
# Quickstart 资产(rosbag + 芥末酱瓶 mesh),用文档中的 NGC 脚本:
# NGC_RESOURCE="isaac_ros_foundationpose_assets" → 解压到 ${ISAAC_ROS_WS}/isaac_ros_assets

# FoundationPose 预训练模型(ONNX)
mkdir -p ${ISAAC_ROS_WS}/isaac_ros_assets/models/foundationpose
cd ${ISAAC_ROS_WS}/isaac_ros_assets/models/foundationpose
wget 'https://api.ngc.nvidia.com/v2/models/nvidia/isaac/foundationpose/versions/1.0.0_onnx/files/refine_model.onnx' -O refine_model.onnx
wget 'https://api.ngc.nvidia.com/v2/models/nvidia/isaac/foundationpose/versions/1.0.0_onnx/files/score_model.onnx' -O score_model.onnx
# RT-DETR 模型按 isaac_ros_rtdetr 教程下载并转换(生成 sdetr_grasp.plan)

ONNX → TensorRT engine(容器内,一次性):

bash 复制代码
/usr/src/tensorrt/bin/trtexec --onnx=${ISAAC_ROS_WS}/isaac_ros_assets/models/foundationpose/refine_model.onnx \
  --saveEngine=${ISAAC_ROS_WS}/isaac_ros_assets/models/foundationpose/refine_trt_engine.plan \
  --minShapes=input1:1x160x160x6,input2:1x160x160x6 \
  --optShapes=input1:1x160x160x6,input2:1x160x160x6 \
  --maxShapes=input1:42x160x160x6,input2:42x160x160x6

/usr/src/tensorrt/bin/trtexec --onnx=${ISAAC_ROS_WS}/isaac_ros_assets/models/foundationpose/score_model.onnx \
  --saveEngine=${ISAAC_ROS_WS}/isaac_ros_assets/models/foundationpose/score_trt_engine.plan \
  --minShapes=input1:1x160x160x6,input2:1x160x160x6 \
  --optShapes=input1:1x160x160x6,input2:1x160x160x6 \
  --maxShapes=input1:252x160x160x6,input2:252x160x160x6

⚠️ 两点注意(官方注明):转换需要至少 7.5GB 空闲显存 ------RTX 3080 10GB 版本请先关掉其他占显存的程序;TensorRT 10.3+ 下 FoundationPose 以 FP32 运行(FP16 有精度损失),且 engine 文件与 GPU 架构绑定,换卡要重新转换。

运行演示(容器内):

bash 复制代码
# 终端 1:启动完整管线
ros2 launch isaac_ros_examples isaac_ros_examples.launch.py \
  launch_fragments:=foundationpose \
  interface_specs_file:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_foundationpose/quickstart_interface_specs.json \
  mesh_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_foundationpose/Mustard/textured_simple.obj \
  texture_path:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_foundationpose/Mustard/texture_map.png \
  score_engine_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/models/foundationpose/score_trt_engine.plan \
  refine_engine_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/models/foundationpose/refine_trt_engine.plan \
  rt_detr_engine_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr/sdetr_grasp.plan

# 终端 2(run_dev.sh 再进容器):循环播放 rosbag
ros2 bag play -l ${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_foundationpose/quickstart.bag/

# 终端 3:RViz
rviz2 -d $(ros2 pkg prefix isaac_ros_foundationpose --share)/rviz/foundationpose.rviz

文档: https://nvidia-isaac-ros.github.io/v/release-3.2/repositories_and_packages/isaac_ros_pose_estimation/isaac_ros_foundationpose/index.html


7. 针对 RTX 3080 的实用建议

  • 三选一单独跑没问题;FoundationPose + nvblox 同时跑时注意 10GB 显存(3080 12GB 版更宽裕);
  • 编译加速colcon build --symlink-install --parallel-workers $(nproc),容器内已配好 ccache
  • 推荐顺序:nvblox(自带 rosbag,最容易看到效果)→ Visual SLAM(需要相机或 Isaac Sim)→ FoundationPose(流程最长:模型下载 + engine 转换 + 三终端);
  • 所有包共用一个工作区即可,依赖(isaac_ros_nitros 等)只需克隆一次。
相关推荐
Eloudy7 小时前
GXF 报告 - 构建依赖分析,NvSci 裁剪,公网裸机构建与测试
gpu
众人皆醒我独醉2 天前
InferenceGraph:把多个推理服务编排成 DAG
面试·kubernetes·gpu
众人皆醒我独醉2 天前
LLMService:KServe 面向 LLM 的下一步
面试·kubernetes·gpu
众人皆醒我独醉4 天前
模型加载:storage-initializer 与节点级缓存
面试·kubernetes·gpu
进哥AI研习社4 天前
WebGL 与视频背景——首屏视觉层的性能博弈
性能优化·webgl·gpu·canvas·shader·帧率·视频背景
众人皆醒我独醉5 天前
调和循环:kubectl apply 之后发生了什么
面试·llm·gpu
众人皆醒我独醉5 天前
从 Spec 到资源:Predictor/Transformer/Explainer 如何变成 Deployment
面试·llm·gpu
众人皆醒我独醉9 天前
源码导读:一张地图看懂 KServe 仓库
面试·云计算·gpu
众人皆醒我独醉10 天前
MLOps 流水线:从训练到推理的 CI/CD
面试·llm·gpu