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.0、release-2.1、release-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 本身,这个可选步骤完全可以跳过。
文档地址
- Isaac ROS 3.2 文档主页: https://nvidia-isaac-ros.github.io/v/release-3.2/index.html
- 硬件要求(Compute Setup): https://nvidia-isaac-ros.github.io/v/release-3.2/getting_started/hardware_setup/compute/index.html
- 开发环境搭建: https://nvidia-isaac-ros.github.io/v/release-3.2/getting_started/dev_env_setup.html
- 3.2 Release Notes: https://nvidia-isaac-ros.github.io/v/release-3.2/releases/index.html
- 全部功能包仓库索引: https://nvidia-isaac-ros.github.io/repositories_and_packages/index.html
- GXF 开源仓库(最后开源版): https://github.com/NVIDIA-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_BUILD、CONFIG_CONTAINER_NAME_SUFFIX、CONFIG_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 仓库源; - 上层叠加开发工具(
rosdep、colcon、ccache、调试工具等),并创建与宿主机 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_fusion、enable_localization_n_mapping、save_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 / 多目四个教程)
2. nvblox(GPU 3D 重建 / ESDF 代价地图,供 Nav2 用)
编译(容器内):
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.py 或 zed_example.launch.py;要接 Nav2 导航时设 navigation:=True。
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
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等)只需克隆一次。