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 支持的开发流程是在目标平台上直接构建。可以选择以下两种方式:
- 在主机上设置 ROS 2 Humble:通过 Isaac Apt 仓库安装依赖(使用
rosdep
) - 使用基于 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
准备工作
-
存储空间:确保设备至少有 30 GB 可用空间(用于容器和数据集)。
Jetson 设备:必须使用 NVMe SSD 存储。
-
VPI 加速设置:若需使用 PVA 加速器,请先配置Jetson VPI.
NVMe SSD
Jetson Setup — isaac_ros_docs documentation
若使用 Jetson 开发套件,需配备高速大容量存储设备以存放容器镜像和 rosbag 文件。需要安装 NVMe SSD 至 Jetson 载板。
如图,是这个,需要单独购买:
NVMe SSD 配置方案
方案一:全新安装(推荐)
在未使用的 Jetson 开发套件上安装 NVMe SSD
通过 Ubuntu PC 的 SDK Manager 将完整 L4T (Jetson Linux) 刷写到 SSD
特点:操作简单,但会清空设备原有数据
方案二:保留现有系统(选择这个方案,因为板卡之前已经被使用过)
将 L4T 刷写至 Jetson 的 eMMC 或 microSD 卡
安装 NVMe SSD 并配置为 ROS 2 工作空间/Docker 存储卷
特点:无需重刷系统,但需手动配置(下文详述)
SSD物理安装与自动挂载
-
断开 Jetson 电源及外设
-
将 NVMe SSD 插入载板插槽,用螺丝固定
-
重新连接电源并启动设备
-
系统识别验证
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构建。该模型具备以下特性:
- 零样本能力:无需微调即可对未见过的物体进行位姿估计与跟踪。
- 精度优势:性能超越现有最先进方法。
- 双模型架构:
- Refine模型:迭代优化初始位姿假设,输出至Score模型。
- Score模型:筛选并确定最终位姿估计。
- 高效跟踪:基于前一帧位姿和当前图像输入更新估计,在Jetson Orin平台跟踪速度超过120 FPS。
isaac_ros_dope
该节点通过图结构估计已知物体的3D边界立方体位姿,需依赖预训练的DOPE(Deep Object Pose Estimation)模型。使用要点:
输入处理:图像需裁剪/缩放以匹配DOPE输入分辨率并保持宽高比。
推理流程:
DNN推理生成置信度图(belief maps)。
解码器结合物体类型和置信度图输出位姿。
训练限制:
预训练模型基于HOPE数据集(含合成数据的玩具 grocery 物体)。
自定义物体需重新训练(参考NVIDIA教程)。
示例应用:移动机器人导航场景中的托盘检测模型训练。
isaac_ros_centerpose
与DOPE类似但功能扩展:
- 多任务处理:物体检测 → 生成2D关键点 → 估计6自由度位姿(含尺度) → 回归3D边界立方体维度。
- 类别级泛化:可检测未训练过的同类物体实例(如识别未参与训练的椅子)。
- 计算优化:位姿估计频率低于相机输入帧率,首帧结果用于导航初始化,后续低频更新。
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