当前位置: 首页 > ops >正文

ISAAC ROS 在Jetson Orin NX上的部署

背景:使用Jetson orin NX开发板

ROS-2-iron

ubuntu 22.04

cuda:12.6  cudnn:9.3  tensorRT:10.3 

Isaac ROS是NVIDIA为ROS(Robot Operating System)生态系统提供的一个扩展。它的主要目标是将NVIDIA的硬件加速能力与ROS的灵活性结合起来,以提高机器人应用的开发效率和性能。

Isaac Sim是NVIDIA开发的一个高保真物理仿真平台,旨在为机器人、自动驾驶和智能系统的开发提供真实的虚拟环境。它基于NVIDIA Omniverse平台,允许用户创建和测试机器人应用。

  • 深度集成NVIDIA的硬件(如GPU)和软件(如CUDA、TensorRT),优化计算和渲染性能。

教程:
Getting Started — isaac_ros_docs documentation

1. 系统要求

2. 环境配置

Developer Environment Setup — isaac_ros_docs documentation

要求ROS2 Humble版本

(官方强烈建议使用docker镜像,我原本是ROS iron版本,所以我把ROS卸载以后就没有再安装ROS)

ros卸载


1. 卸载ROS软件包

sudo apt-get purge ros-*

2. 清理残留依赖项

sudo apt-get autoremove

3. 删除 ROS 安装目录

sudo rm -rf /opt/ros/iron

4. 移除环境变量

sed -i '/source \/opt\/ros/d' ~/.bashrc

5. 列出所有软件源文件

ls /etc/apt/sources.list.d/

6. 上面列出的与ros相关的文件,例如:

sudo rm /etc/apt/sources.list.d/ros2.list
sudo rm /etc/apt/sources.list.d/ros2-latest.list

7. 清理残留配置

sudo apt-get update
sudo apt-get autoclean

8. 确认删除

dpkg -l | grep ros-iron

当前 Isaac ROS 支持的开发流程是在目标平台上直接构建。可以选择以下两种方式:

  1. 在主机上设置 ROS 2 Humble:通过 Isaac Apt 仓库安装依赖(使用 rosdep
  2. 使用基于 Docker 的开发环境(推荐):通过 Isaac ROS Dev 容器化方案
    我们强烈建议使用 Isaac ROS Dev 配置开发环境。该方案能自动匹配 Jetson 和 x86_64 平台的依赖版本,并通过 Docker 容器直接集成 Isaac Apt 仓库。

我们选择使用Docker,因为Isaac ROS快速入门、教程示例等都以Isaac ROS Dev Docker为先决条件。

Developer Environment Setup — isaac_ros_docs documentation

准备工作

  1. 存储空间:确保设备至少有 30 GB 可用空间(用于容器和数据集)。

                Jetson 设备:必须使用 NVMe SSD 存储

  1. VPI 加速设置:若需使用 PVA 加速器,请先配置Jetson VPI.


NVMe SSD

Jetson Setup — isaac_ros_docs documentation

若使用 Jetson 开发套件,需配备高速大容量存储设备以存放容器镜像和 rosbag 文件。需要安装 NVMe SSD 至 Jetson 载板。

如图,是这个,需要单独购买:

NVMe SSD 配置方案

方案一:全新安装(推荐)

  1. 在未使用的 Jetson 开发套件上安装 NVMe SSD

  2. 通过 Ubuntu PC 的 SDK Manager 将完整 L4T (Jetson Linux) 刷写到 SSD

特点:操作简单,但会清空设备原有数据

方案二:保留现有系统(选择这个方案,因为板卡之前已经被使用过)

  1. 将 L4T 刷写至 Jetson 的 eMMC 或 microSD 卡

  2. 安装 NVMe SSD 并配置为 ROS 2 工作空间/Docker 存储卷

特点:无需重刷系统,但需手动配置(下文详述)

SSD物理安装与自动挂载

  1. 断开 Jetson 电源及外设

  2. 将 NVMe SSD 插入载板插槽,用螺丝固定

  3. 重新连接电源并启动设备

  4. 系统识别验证

lspci  # 检查PCI总线是否识别到SSD控制器

5. 确认SSD设备名(如nvme0n1)

lsblk

注意上图是官方给的示例图片,但在我的板卡中,nvme0n1是图中mmcblk1的位置,有很多的分区。所以后面官方用的nvme0n1实际山是我们自己的SSD设备名,可能不是nvme0n1。

6. 格式化 SSD,创建一个挂载点,然后将其挂载到文件系统

sudo mkfs.ext4 /dev/nvme0n1
sudo mkdir -p /mnt/nova_ssd
sudo mount /dev/nvme0n1 /mnt/nova_ssd

7. 要确保挂载在引导后仍然存在,要添加一个条目 到文件中

获取SSD的UUID:

lsblk -f

例如: 

  • UUID 是 a1b2c3d4-e5f6-7890-1234-567890abcdef(你的 SSD 会显示不同的值)。

向文件添加新条目:

sudo vi /etc/fstab

在文件末尾插入以下行,将 UUID 替换为找到的值 :(i进入编辑;esc退出; :wq保存退出)

UUID=************-****-****-****-******** /mnt/nova_ssd/ ext4 defaults 0 2

例如: 

更改目录/mnt/nova_ssd 所有权(默认挂载后,目录属于 root,普通用户无法写入。需更改所有者):

sudo chown ${USER}:${USER} /mnt/nova_ssd

 验证权限:

ls -ld /mnt/nova_ssd


Docker目录迁移至SSD

1. 将用户加入 Docker 用户组(避免频繁使用 sudo

# 将当前用户加入 docker 用户组
sudo usermod -aG docker $USER
# 验证是否成功(适用于 Jetson 默认用户 "nvidia")
id nvidia | grep docker
# 刷新用户组权限(无需重新登录)
newgrp docker

上面nvidia是默认用户名,查看自己的用户名使用:

whoami

2. 停止 Docker 服务(Docker 运行时,/var/lib/docker 会被锁定,无法迁移数据。)

sudo systemctl stop docker

3. 迁移 Docker 数据目录至 SSD

# 查看原 Docker 目录大小
sudo du -csh /var/lib/docker/
# 在 SSD 上创建新目录
sudo mkdir -p /mnt/nova_ssd/docker
# 使用 rsync 同步数据(保留权限和符号链接)
sudo rsync -axPS /var/lib/docker/ /mnt/nova_ssd/docker/
# 检查新目录大小是否匹配
sudo du -csh /mnt/nova_ssd/docker/

4. 修改 Docker 存储路径配置(编辑 /etc/docker/daemon.json

sudo vi /etc/docker/daemon.json

添加:

{"runtimes": {"nvidia": {"path": "nvidia-container-runtime","runtimeArgs": []}},"default-runtime": "nvidia","data-root": "/mnt/nova_ssd/docker"
}

配置说明:

  • "data-root":指定 Docker 的新存储路径(SSD)。

  • "nvidia" 运行时:确保容器能调用 Jetson 的 GPU 加速。

5. 重命名旧目录(防止冲突)

sudo mv /var/lib/docker /var/lib/docker.old

为什么保留旧目录?

迁移失败时可快速回滚

sudo mv /var/lib/docker.old /var/lib/docker

6. 重启 Docker 并检查日志

sudo systemctl daemon-reload && \
sudo systemctl restart docker && \
sudo journalctl -u docker --no-pager | tail -n 20

测试 Docker 是否使用 SSD

1. [终端1] 打开一个终端来监控拉取Docker镜像时的磁盘使用情况:

watch -n1 df

2. [终端2] 打开一个新终端并开始拉取Docker镜像:

docker pull nvcr.io/nvidia/l4t-base:r35.2.1

3. [终端1] 观察/mnt/nova_ssd上的磁盘使用量会随着容器镜像的下载和解压而增加:


终极验证

重启,依次执行:


VPI加速配置

Jetson Setup for VPI — isaac_ros_docs documentation

以下指令用于在 Jetson 设备上启用 PVA(可编程视觉加速器)硬件加速功能。这些步骤需在 Docker 容器外的 Jetson 主机上执行。

1. 生成 GPU/PVA 的 CDI 规范文件

前提条件:确保已安装 NVIDIA Container Toolkit。

# 生成 CDI 规范文件(CSV 模式)  
sudo nvidia-ctk cdi generate --mode=csv --output=/etc/cdi/nvidia.yaml  

作用:

  • 创建 /etc/cdi/nvidia.yaml 文件,定义 GPU 和 PVA 加速器的设备接口。

  • 后续可通过该文件在容器中调用硬件加速功能。

2. 安装 pva-allow-2 软件包

# 更新软件源并添加 Jetson 官方仓库  
sudo apt-get update  
sudo apt-get install software-properties-common  
sudo apt-key adv --fetch-key https://repo.download.nvidia.com/jetson/jetson-ota-public.asc  
sudo add-apt-repository 'deb https://repo.download.nvidia.com/jetson/common r36.4 main'  
sudo apt-get update  
# 安装 PVA 授权包  
sudo apt-get install -y pva-allow-2  

关键说明

  • pva-allow-2:NVIDIA 官方提供的授权包,用于解锁 Jetson 的 PVA 加速器访问权限。
  • 仓库地址r36.4 对应 JetPack 5.1.2 版本,请根据实际系统版本调整(如 r35.4 或 r34.1)。

Docker配置

Developer Environment Setup — isaac_ros_docs documentation

因为我们执行了上面的SSD配置,所以直接到第二步;否则执行:

2.  重启docker

sudo systemctl daemon-reload && sudo systemctl restart docker

3. 安装Git LFS 以拉取西修啊在所有大文件:

sudo apt-get install git-lfs
git lfs install --skip-repo  # # 全局启用 LFS,跳过当前仓库配置

4. 创建一个 ROS 2 工作区来试验 ISAAC ROS

mkdir -p  /mnt/nova_ssd/workspaces/isaac_ros-dev/src
echo "export ISAAC_ROS_WS=/mnt/nova_ssd/workspaces/isaac_ros-dev/" >> ~/.bashrc
source ~/.bashrc


3. 传感器配置(RealSense)

Sensors Setup — isaac_ros_docs documentation

 我们这里使用的是D435i

正确版本的 librealsense SDK 和 realsense-ros 驱动程序会自动安装在 docker 容器中.

为了获得最佳结果,建议将最大 Linux 内核接收缓冲区大小增加。(待写)

1. 在下一步启动 Docker 容器之前插入实感摄像头

2. 在 ${ISAAC_ROS_WS}/src 目录下克隆isaac_ros_common:

cd ${ISAAC_ROS_WS}/src && \git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git isaac_ros_common

 我们在之前已经指定了路径:

所以 ${ISAAC_ROS_WS} 会自动展开为 /mnt/nova_ssd/workspaces/isaac_ros-dev/

3. 配置由 isaac_ros_common/scripts/run_dev.sh 创建的容器以包含 RealSense 软件包。

为此,请在 isaac_ros_common/scripts 目录下创建 .isaac_ros_common-config 文件,然后运行以下命令修改 CONFIG_IMAGE_KEY,将 librealsense SDK 和 realsense-ros 包含到 Isaac ROS 开发 Docker 中:

cd ${ISAAC_ROS_WS}/src/isaac_ros_common/scripts && \
touch .isaac_ros_common-config && \
echo CONFIG_IMAGE_KEY=ros2_humble.realsense > .isaac_ros_common-config

4. 启动docker容器

cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
./scripts/run_dev.sh -d ${ISAAC_ROS_WS}

容器会自动挂载 ${ISAAC_ROS_WS} 到 /workspaces/isaac_ros-dev

5.  验证 RealSense 相机连接

在容器内启动 realsense-viewer

realsense-viewer


4. Isaac ROS Pose Estimation

Isaac ROS Pose Estimation — isaac_ros_docs documentation

isaac ros pose estimation包含三个ros 2 包预测物体的姿势:

isaac_ros_foundationpose(选择)

该节点通过图结构(graph of nodes)利用3D边界立方体维度估计新物体的位姿。其基于NVLabs开发的预训练深度学习模型FoundationPose构建。该模型具备以下特性:

  1. 零样本能力:无需微调即可对未见过的物体进行位姿估计与跟踪。
  2. 精度优势:性能超越现有最先进方法。
  3. 双模型架构:
    • Refine模型:迭代优化初始位姿假设,输出至Score模型。
    • Score模型:筛选并确定最终位姿估计。
  4. 高效跟踪:基于前一帧位姿和当前图像输入更新估计,在Jetson Orin平台跟踪速度超过120 FPS。

isaac_ros_dope

该节点通过图结构估计已知物体的3D边界立方体位姿,需依赖预训练的DOPE(Deep Object Pose Estimation)模型。使用要点:

  1. 输入处理:图像需裁剪/缩放以匹配DOPE输入分辨率并保持宽高比。

  2. 推理流程:

    • DNN推理生成置信度图(belief maps)。

    • 解码器结合物体类型和置信度图输出位姿。

  3. 训练限制:

    • 预训练模型基于HOPE数据集(含合成数据的玩具 grocery 物体)。

    • 自定义物体需重新训练(参考NVIDIA教程)。

    • 示例应用:移动机器人导航场景中的托盘检测模型训练。

isaac_ros_centerpose

与DOPE类似但功能扩展:

  1. 多任务处理:物体检测 → 生成2D关键点 → 估计6自由度位姿(含尺度) → 回归3D边界立方体维度。
  2. 类别级泛化:可检测未训练过的同类物体实例(如识别未参与训练的椅子)。
  3. 计算优化:位姿估计频率低于相机输入帧率,首帧结果用于导航初始化,后续低频更新。

isaac_ros_foundationpose

isaac_ros_foundationpose — isaac_ros_docs documentation

源码连接:isaac_ros_pose_estimation/isaac_ros_foundationpose at main · NVIDIA-ISAAC-ROS/isaac_ros_pose_estimation

1.  克隆 isaac_ros_common到 ${ISAAC_ROS_WS}/src

cd ${ISAAC_ROS_WS}/src && \git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git isaac_ros_common

2. 下载传感器的各种依赖(Sensors Setup — isaac_ros_docs documentation) 步骤3已完成

3.安装依赖工具:

确保系统已安装 curl(下载工具)、jq(JSON 解析工具)、tar(解压工具)

sudo apt-get install -y curl jq tar

4.   从NGC下载快速使用的数据(直接全部粘贴到终端运行)

NGC_ORG="nvidia"
NGC_TEAM="isaac"
PACKAGE_NAME="isaac_ros_foundationpose"
NGC_RESOURCE="isaac_ros_foundationpose_assets"
NGC_FILENAME="quickstart.tar.gz"
MAJOR_VERSION=3
MINOR_VERSION=2
VERSION_REQ_URL="https://catalog.ngc.nvidia.com/api/resources/versions?orgName=$NGC_ORG&teamName=$NGC_TEAM&name=$NGC_RESOURCE&isPublic=true&pageNumber=0&pageSize=100&sortOrder=CREATED_DATE_DESC"
AVAILABLE_VERSIONS=$(curl -s \-H "Accept: application/json" "$VERSION_REQ_URL")
LATEST_VERSION_ID=$(echo $AVAILABLE_VERSIONS | jq -r ".recipeVersions[]| .versionId as \$v| \$v | select(test(\"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\"))| split(\".\") | {major: .[0]|tonumber, minor: .[1]|tonumber, patch: .[2]|tonumber}| select(.major == $MAJOR_VERSION and .minor <= $MINOR_VERSION)| \$v" | sort -V | tail -n 1
)
if [ -z "$LATEST_VERSION_ID" ]; thenecho "No corresponding version found for Isaac ROS $MAJOR_VERSION.$MINOR_VERSION"echo "Found versions:"echo $AVAILABLE_VERSIONS | jq -r '.recipeVersions[].versionId'
elsemkdir -p ${ISAAC_ROS_WS}/isaac_ros_assets && \FILE_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/\
versions/$LATEST_VERSION_ID/files/$NGC_FILENAME" && \curl -LO --request GET "${FILE_REQ_URL}" && \tar -xf ${NGC_FILENAME} -C ${ISAAC_ROS_WS}/isaac_ros_assets && \rm ${NGC_FILENAME}
fi

5. 下载FoundationPose的预训练权重

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

6. 编译isaac_ros_foundationpose

有两种方式(二进制包Binary Package和源代码包Build from Source)

二进制包不可修改;源代码包允许代码级调整,这里选择源代码编译

 克隆代码仓库

cd ${ISAAC_ROS_WS}/src && \git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_pose_estimation.git isaac_ros_pose_estimation

通过使用run_dev.sh 启动Docker

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

通过rosdep自动安装isaac_ros_foundationpose依赖包

sudo apt-get update
rosdep update && rosdep install --from-paths ${ISAAC_ROS_WS}/src/isaac_ros_pose_estimation/isaac_ros_foundationpose --ignore-src -y

--ignore-src 表示跳过已存在的本地源码包依赖。

编译代码

cd ${ISAAC_ROS_WS}/ && \colcon build --symlink-install --packages-up-to isaac_ros_foundationpose --base-paths ${ISAAC_ROS_WS}/src/isaac_ros_pose_estimation/isaac_ros_foundationpose
  • --symlink-install:使用符号链接而非复制文件,便于开发时实时修改。
  • --packages-up-to:仅编译指定包及其依赖。
  • --base-paths:指定源码根目录。

激活工作空间

source install/setup.bash

注意:每打开一个新终端环境变量都会重置,必须每次都source.

7. 运行launch文件

在容器中,将模型从.onnx转换为TensorRT引擎

转换refine模型:

/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
  • 输入:refine_model.onnx
  • 输出:refine_trt_engine.plan
  • 形状范围:最小 (1x160x160x6)、优化 (1x160x160x6)、最大 (42x160x160x6)

转换score模型:

/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
  • 输入:score_model.onnx
  • 输出:score_trt_engine.plan
  • 形状范围:最小 (1x160x160x6)、优化 (1x160x160x6)、最大 (252x160x160x6)

注意事项:

1. TensorRT 精度设置:FoundationPose 的 TensorRT 引擎在 TensorRT 10.3+ 版本中默认使用 FP32(单精度浮点)运行,因为 FP16(半精度浮点)会导致精度损失。

2. GPU 内存需求:至少需要 7.5 GB 的可用 GPU 显存 才能完成模型转换。如果显存不足,转换过程可能会失败。

3. 转换时间

        不同硬件平台的转换时间差异较大:

                在 Jetson AGX Orin 上,引擎转换过程大约需要 10-15 分钟。

                在高性能 GPU(如 NVIDIA A100 / RTX 4090)上,转换时间可能更短。

8. 启动

我们最终是要使用realsense相机实时监测

所以执行以下操作:

首先需要完成isaac ros rt-detr tutorial,请跳转到5.isaac_ros_rtdetr,执行完后回来

打开一个新终端,启动容器:

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

安装依赖:

sudo apt-get update
sudo apt-get install -y ros-humble-isaac-ros-examples ros-humble-isaac-ros-realsense

将待检测物体放置在相机视野内,运行以下命令启动 RealSense 单目(Mono)模式 + RT-DETR 检测

ros2 launch isaac_ros_examples isaac_ros_examples.launch.py launch_fragments:=realsense_mono_rect_depth,foundationpose mesh_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_foundationpose/Mac_and_cheese_0_1/Mac_and_cheese_0_1.obj texture_path:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_foundationpose/Mac_and_cheese_0_1/materials/textures/baked_mesh_tex0.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
launch_fragments:=realsense_mono_rtdetr同时启动 RealSense 相机和 RT-DETR 检测节点
engine_file_path指定 TensorRT 引擎文件路径(.plan 格式)

9. 可视化

打开新终端:

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

rsobag

 加载Rviz2可视化:

rviz2 -d  $(ros2 pkg prefix isaac_ros_foundationpose --share)/rviz/foundationpose.rviz

Realsense可视化

rviz2 -d  $(ros2 pkg prefix isaac_ros_foundationpose --share)/rviz/foundationpose_realsense.rviz

5. isaac_ros_rtdetr

isaac_ros_rtdetr — isaac_ros_docs documentation

1. 下面这几步我们在foundationpose已经做过了,所以跳过

 2. 从NGC下载相关指令

NGC_ORG="nvidia"
NGC_TEAM="isaac"
PACKAGE_NAME="isaac_ros_rtdetr"
NGC_RESOURCE="isaac_ros_rtdetr_assets"
NGC_FILENAME="quickstart.tar.gz"
MAJOR_VERSION=3
MINOR_VERSION=2
VERSION_REQ_URL="https://catalog.ngc.nvidia.com/api/resources/versions?orgName=$NGC_ORG&teamName=$NGC_TEAM&name=$NGC_RESOURCE&isPublic=true&pageNumber=0&pageSize=100&sortOrder=CREATED_DATE_DESC"
AVAILABLE_VERSIONS=$(curl -s \-H "Accept: application/json" "$VERSION_REQ_URL")
LATEST_VERSION_ID=$(echo $AVAILABLE_VERSIONS | jq -r ".recipeVersions[]| .versionId as \$v| \$v | select(test(\"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\"))| split(\".\") | {major: .[0]|tonumber, minor: .[1]|tonumber, patch: .[2]|tonumber}| select(.major == $MAJOR_VERSION and .minor <= $MINOR_VERSION)| \$v" | sort -V | tail -n 1
)
if [ -z "$LATEST_VERSION_ID" ]; thenecho "No corresponding version found for Isaac ROS $MAJOR_VERSION.$MINOR_VERSION"echo "Found versions:"echo $AVAILABLE_VERSIONS | jq -r '.recipeVersions[].versionId'
elsemkdir -p ${ISAAC_ROS_WS}/isaac_ros_assets && \FILE_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/\
versions/$LATEST_VERSION_ID/files/$NGC_FILENAME" && \curl -LO --request GET "${FILE_REQ_URL}" && \tar -xf ${NGC_FILENAME} -C ${ISAAC_ROS_WS}/isaac_ros_assets && \rm ${NGC_FILENAME}
fi

3. 下载RT-DETR预训练权重

mkdir -p ${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr && \
cd ${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr && \wget 'https://api.ngc.nvidia.com/v2/models/nvidia/isaac/synthetica_detr/versions/1.0.0_onnx/files/sdetr_grasp.onnx'

这里的快速入门使用的是 NVIDIA 生产的 SyntheticaDETR 模型,ISAAC ROS RT-DETR 与所有 RT-DETR 架构模型兼容。 

RT-DETR — isaac_ros_docs documentation

4. 编译isaac_ros_rtdetr

依旧选择源代码编译

克隆代码:

cd ${ISAAC_ROS_WS}/src && \git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_object_detection.git isaac_ros_object_detection

 使用run_dev.sh运行docker:

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

下载依赖:

sudo apt-get update
rosdep update && rosdep install --from-paths ${ISAAC_ROS_WS}/src/isaac_ros_object_detection/isaac_ros_rtdetr --ignore-src -y

编译:

cd ${ISAAC_ROS_WS} && \colcon build --symlink-install --packages-up-to isaac_ros_rtdetr --base-paths ${ISAAC_ROS_WS}/src/isaac_ros_object_detection/isaac_ros_rtdetr

source(每次新开终端都需要source):

source install/setup.bash

5. 运行launch文件

将模型.onnx转换为TensorRT引擎

/usr/src/tensorrt/bin/trtexec --onnx=${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr/sdetr_grasp.onnx --saveEngine=${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr/sdetr_grasp.plan

在 Jetson AGX Orin 上转换过程可能需要 10-15 分钟才能完成。

6. 启动

我们选择realsensecamera启动

在docker容器中,安装以下依赖:

sudo apt-get update
sudo apt-get install -y ros-humble-isaac-ros-examples ros-humble-isaac-ros-realsense

运行下面的launch文件使用 RealSense 摄像头启动此软件包的演示:

ros2 launch isaac_ros_examples isaac_ros_examples.launch.py launch_fragments:=realsense_mono_rect,rtdetr engine_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr/sdetr_grasp.plan

注意:上面执行的stdetr_grasp模型只在特定的数据集上进行了训练用于快速入门

SyntheticaDETR | NVIDIA NGC

 用rosbag试试效果,因为实际场景中没有特定的那几个物体,没办法运行realsense实时检测:

sudo apt-get update
sudo apt-get install -y ros-humble-isaac-ros-examples
#  运行以下启动文件,以使用快速入门 rosbag 启动此包的演示:
ros2 launch isaac_ros_examples isaac_ros_examples.launch.py launch_fragments:=rtdetr interface_specs_file:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_rtdetr/quickstart_interface_specs.json engine_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/models/synthetica_detr/sdetr_grasp.plan
# 在 Docker 容器内打开第二个终端:
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
./scripts/run_dev.sh
# 运行 rosbag 文件以模拟图像流:
ros2 bag play -l ${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_rtdetr/quickstart.bag

 7. 可视化

在docker容器中打开新的终端

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

运行RT-DETR可视化文件

ros2 run isaac_ros_rtdetr isaac_ros_rtdetr_visualizer.py

打开另外一个终端

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

使用rqt_image_view可视化

ros2 run rqt_image_view rqt_image_view /rtdetr_processed_image

 8. 使用Isaac sim 的RT DETR(略)

Tutorial for RT-DETR with Isaac Sim — isaac_ros_docs documentation

http://www.xdnf.cn/news/16223.html

相关文章:

  • Mkdocs相关插件推荐(原创+合作)
  • 目标导向的强化学习:问题定义与 HER 算法详解—强化学习(19)
  • 双非上岸985!专业课140分经验!信号与系统考研专业课140+上岸中南大学,通信考研小马哥
  • Zookeeper 3.6.3【详细技术讲解】整
  • Day 3: 机器学习进阶算法与集成学习
  • GPU服务器与PC 集群(PC农场):科技算力双子星
  • IPv6网络排障详细步骤指南(附工具命令+配置检查点+典型案例)
  • Jenkins中HTML文件显示样式问题解决方案
  • linux修改用户名和主目录及权限-linux029
  • 初识JVM--从Java文件到机器指令
  • 百度蜘蛛池解析机制:原创
  • 视频质量检测效率提升28%!陌讯多模态融合方案在流媒体场景的技术实践
  • Python之--集合
  • C#(数据类型)
  • 冠捷科技 | 内生外化,精准触达,实现数字化转型精准赋能
  • Matlab中的 for 与while是有区别的
  • geomtry空间索引sql查询慢优化
  • Android 的16 KB内存页设备需要硬件支持吗,还是只需要手机升级到Android15系统就可以
  • [python][基础]Flask 技术栈
  • 软件工程之可行性研究:从理论到实践的全面解析
  • JAVA知识点(四):SpringBoot与分布式、微服务架构
  • 腾讯云CodeBuddy+微信小程序:5分钟开发番茄小闹钟
  • ClickHouse 高性能实时分析数据库-物化视图篇
  • 【lucene】如何给StandardAnalyzer添加charfilter
  • P1106 删数问题 - 洛谷
  • Multiscale Structure Guided Diffusion for Image Deblurring 论文阅读
  • 用友ERP 反射xss漏洞复现(CVE-2025-2709)
  • [NLP]多电源域设计的仿真验证方法
  • Linux运维新人自用笔记(Rsync远程传输备份,服务端、邮箱和客户端配置、脚本)
  • 编译器-gcc/g++和自动化构建-make/Makefile