Isaac ROS 文档翻译


页面 32:Isaac ROS DetectNet — 目标检测

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

快速入门

设置开发环境
  1. 按照入门指南中的说明设置您的开发环境。
  2. (可选)按照传感器特定指南安装您想使用的任何传感器的依赖项。

注意:我们强烈建议在开始任何快速入门之前安装所有传感器依赖项。某些传感器依赖项需要在安装期间重新启动开发环境,这会中断快速入门过程。

下载快速入门资源
  1. 从 NGC 下载快速入门数据:

确保安装了所需的库。

sudo apt-get install -y curl jq tar

然后,运行以下命令从 NGC 下载资源:

NGC_ORG="nvidia"
NGC_TEAM="isaac"
PACKAGE_NAME="isaac_ros_detectnet"
NGC_RESOURCE="isaac_ros_detectnet_assets"
NGC_FILENAME="quickstart.tar.gz"
MAJOR_VERSION=4
MINOR_VERSION=6
VERSION_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/versions"
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" ]; then
       echo "No corresponding version found for Isaac ROS $MAJOR_VERSION.$MINOR_VERSION"
       echo "Found versions:"
       echo $AVAILABLE_VERSIONS | jq -r '.recipeVersions[].versionId'
else
       mkdir -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
构建 isaac_ros_detectnet
  1. 激活 Isaac ROS 环境:
isaac-ros activate
  1. 安装预构建的 Debian 包:
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-detectnet ros-jazzy-isaac-ros-dnn-image-encoder ros-jazzy-isaac-ros-triton
运行启动文件
  1. 在 Isaac ROS 环境内,运行快速入门设置脚本,该脚本将从 NVIDIA GPU Cloud (NGC) 下载 PeopleNet 模型:
ros2 run isaac_ros_detectnet setup_model.sh --config-file quickstart_config.pbtxt --eula
  1. 在 Isaac ROS 环境内,安装以下依赖:
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-examples
  1. 运行以下启动文件以使用快速入门 rosbag 启动此包的演示:
ros2 launch isaac_ros_examples isaac_ros_examples.launch.py launch_fragments:=detectnet interface_specs_file:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_detectnet/quickstart_interface_specs.json
  1. 在 Isaac ROS 环境内打开第二个终端:
isaac-ros activate
  1. 运行 rosbag 文件以模拟图像流:
ros2 bag play -l ${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_detectnet/rosbags/detectnet_rosbag --remap image:=image_rect camera_info:=camera_info_rect
可视化结果
  1. 在 Isaac ROS 环境内打开一个终端并运行 isaac_ros_detectnet_visualizer
isaac-ros activate
  1. 安装 cv_bridge
sudo apt-get install -y ros-jazzy-cv-bridge
  1. 运行可视化工具:
cd ${ISAAC_ROS_WS} && \
source install/setup.bash && \
ros2 run isaac_ros_detectnet isaac_ros_detectnet_visualizer.py --ros-args --remap image:=detectnet_encoder/resize/image
  1. 打开一个新终端并安装 rqt_image_view
isaac-ros activate
sudo apt-get install -y ros-jazzy-rqt-image-view
  1. 运行 rqt_image_view 以可视化输出:
ros2 run rqt_image_view rqt_image_view /detectnet_processed_image
  1. 您应该看到如下所示的输出:
    (此处为 DetectNet 检测行人并绘制绿色边界框的截图)

尝试更多示例

要继续探索,请查看以下建议的示例:

  • Isaac Sim 教程
  • 自定义模型教程

此包仅支持基于 Detectnet_v2 架构的模型。NGC 上提供的一些支持的 DetectNet 模型:

要了解如何使用这些模型,请点击此处。

ROS 2 图配置

要运行 DetectNet 目标检测推理,必须设置并运行以下 ROS 2 节点:

  1. Isaac ROS DNN Image Encoder:接收图像消息并将其转换为张量(TensorList isaac_ros_tensor_list_interfaces/TensorList),以便网络处理。

  2. Isaac ROS DNN Inference - Triton:执行 DetectNet 网络,并以 DNN Image Encoder 的张量作为输入。

注意:Isaac ROS TensorRT 包目前无法使用 DetectNet 模型执行推理。

输出是包含编码检测结果的 TensorList 消息。使用参数 model_namemodel_repository_paths 指向模型文件夹并设置模型名称。.plan 文件应位于 $model_repository_path/$model_name/1/model.plan

  1. Isaac ROS DetectNet Decoder:接收带有编码检测结果的 TensorList 作为输入,并为每帧输出 Detection2DArray 消息。

故障排除

Isaac ROS 故障排除

有关 Isaac ROS 问题的解决方案,请参阅故障排除。

深度学习故障排除

有关使用 DNN 模型的问题的解决方案,请参阅深度学习故障排除。

API

用法
ros2 launch isaac_ros_detectnet isaac_ros_detectnet.launch.py label_list:=<标签列表> enable_confidence_threshold:=<启用置信度阈值> enable_bbox_area_threshold:=<启用边界框面积阈值> enable_dbscan_clustering:=<启用 DBSCAN 聚类> confidence_threshold:=<最小置信度值> min_bbox_area:=<最小边界框面积值> dbscan_confidence_threshold:=<DBSCAN 算法最小置信度> dbscan_eps:=<epsilon 距离> dbscan_min_boxes:=<最小返回框数> dbscan_enable_athr_filter:=<面积命中比过滤器> dbscan_threshold_athr:=<面积命中比阈值> dbscan_clustering_algorithm:=<聚类算法选择> bounding_box_scale:=<边界框归一化值> bounding_box_offset:=<边界框 XY 偏移>
ROS 参数
ROS 参数 类型 默认值 描述
label_list string[] {"person", "bag", "face"} 标签列表。这些从 labels.txt 加载(随模型下载)
confidence_threshold double 0.35 用于在聚类前过滤检测的最小置信度值
min_bbox_area double 100 用于在聚类前过滤检测的最小边界框面积值
dbscan_confidence_threshold double 0.35 控制重叠框合并的 epsilon。有关 epsilon 的更多信息,请参阅 OpenCV groupRectangles 和 DBSCAN 文档。
dbscan_eps double 0.7 控制重叠框合并的 epsilon。有关 epsilon 的更多信息,请参阅 OpenCV groupRectangles 和 DBSCAN 文档。
dbscan_min_boxes int 1 要返回的最小框数。
dbscan_enable_athr_filter int 0 启用面积命中比 (ATHR) 过滤器。ATHR 计算为:ATHR = sqrt(clusterArea) / nObjectsInCluster。
dbscan_threshold_athr double 0.0 area-to-hit 比阈值。
dbscan_clustering_algorithm int 1 聚类算法选择。(1:启用 DBScan 聚类,2:启用混合聚类,产生更多框,需要使用 NMS 或其他方式减少重叠检测。
bounding_box_scale double 35.0 缩放参数,应与训练配置匹配。
bounding_box_offset double 0.0 X 和 Y 维度的边界框偏移。

页面 33:Isaac ROS RT-DETR — 实时检测 Transformer

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

快速入门

设置开发环境
  1. 按照入门指南中的说明设置您的开发环境。
  2. (可选)按照传感器特定指南安装您想使用的任何传感器的依赖项。

注意:我们强烈建议在开始任何快速入门之前安装所有传感器依赖项。某些传感器依赖项需要在安装期间重新启动开发环境,这会中断快速入门过程。

下载快速入门资源
  1. 从 NGC 下载快速入门数据:
sudo apt-get install -y curl jq tar

NGC_ORG="nvidia"
NGC_TEAM="isaac"
PACKAGE_NAME="isaac_ros_rtdetr"
NGC_RESOURCE="isaac_ros_rtdetr_assets"
NGC_FILENAME="quickstart.tar.gz"
MAJOR_VERSION=4
MINOR_VERSION=6
VERSION_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/versions"
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" ]; then
       echo "No corresponding version found for Isaac ROS $MAJOR_VERSION.$MINOR_VERSION"
       echo "Found versions:"
       echo $AVAILABLE_VERSIONS | jq -r '.recipeVersions[].versionId'
else
       mkdir -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
构建 isaac_ros_rtdetr
  1. 激活 Isaac ROS 环境:
isaac-ros activate
  1. 安装预构建的 Debian 包:
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-rtdetr && \
      sudo apt-get install -y ros-jazzy-isaac-ros-rtdetr-models-install
  1. 下载并设置(将 ONNX 转换为 TensorRT engine plan)预训练的 SyntheticaDETR 模型:
sudo apt-get update
ros2 run isaac_ros_rtdetr_models_install install_rtdetr_models.sh --eula

注意:本快速入门使用 NVIDIA 生产的 sdetr_grasp SyntheticaDETR 模型,但 Isaac ROS RT-DETR 与所有 RT-DETR 架构模型兼容。有关 SyntheticaDETR 和 RT-DETR 之间差异的更多信息,请参阅此处。

注意:将 ONNX 模型转换为 TensorRT engine plan 所需的时间因平台而异。例如,在 Jetson AGX Thor 上,engine 转换过程可能需要长达 10-15 分钟才能完成。

运行启动文件
  1. 在 Isaac ROS 环境内,安装以下依赖:
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-examples
  1. 运行以下启动文件以使用快速入门 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
  1. 在 Isaac ROS 环境内打开第二个终端:
isaac-ros activate
  1. 运行 rosbag 文件以模拟图像流:
ros2 bag play -l ${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_rtdetr/quickstart.bag
可视化结果
  1. 在 Isaac ROS 环境内打开一个终端:
isaac-ros activate
  1. 安装 cv_bridge
sudo apt-get install -y ros-jazzy-cv-bridge
  1. 运行 RT-DETR 可视化脚本:
ros2 run isaac_ros_rtdetr isaac_ros_rtdetr_visualizer.py
  1. 在 Isaac ROS 环境内打开另一个终端:
isaac-ros activate
  1. 安装 rqt_image_view
sudo apt-get install -y ros-jazzy-rqt-image-view
  1. 使用 rqt_image_view 可视化和验证包的输出:
ros2 run rqt_image_view rqt_image_view /rtdetr_processed_image

大约 1 分钟后,您的输出应如下所示:
(此处为 RT-DETR 在复杂场景中检测物体的截图,包括运动模糊、圆形物体、反光材质和光照反射)

尝试更多示例

要继续探索,请查看以下建议的示例:

  • Isaac Sim 教程

此包仅支持基于 RT-DETR 架构的模型。NGC 上提供的一些支持的 RT-DETR 模型:

模型名称 用例
sdetr_grasp 在 100% 合成数据上训练的模型,用于标准机械臂可抓取的目标类别
sdetr_amr 在 100% 合成数据上训练的模型,用于自主移动机器人 (AMR) 操作相关的目标类别

要了解如何使用这些模型,请点击此处。

故障排除

Isaac ROS 故障排除

有关 Isaac ROS 问题的解决方案,请参阅故障排除。

深度学习故障排除

有关使用 DNN 模型的问题的解决方案,请参阅深度学习故障排除。

API

用法
ros2 launch isaac_ros_rtdetr isaac_ros_rtdetr.launch.py model_file_path:=<.onnx 路径> engine_file_path:=<.plan 路径> input_tensor_names:=<输入张量名称> input_binding_names:=<输入绑定名称> output_tensor_names:=<输出张量名称> output_binding_names:=<输出绑定名称> verbose:=<TensorRT 详细程度> force_engine_update:=<强制 TensorRT 更新>
RtDetrPreprocessorNode
ROS 参数
ROS 参数 类型 默认值 描述
input_image_tensor_name string input_tensor 输入张量列表中编码图像张量绑定的名称。
output_image_tensor_name string images 输出张量列表中编码图像张量绑定的名称。
output_size_tensor_name string orig_target_sizes 输出张量列表中目标图像大小张量绑定的名称。
image_height int 480 原始图像的高度,用于将最终边界框调整大小以匹配原始尺寸。
image_width int 640 原始图像的宽度,用于将最终边界框调整大小以匹配原始尺寸。
RtDetrDecoderNode
ROS 参数
ROS 参数 类型 默认值 描述
labels_tensor_name string labels 输入张量列表中标签张量绑定的名称。
boxes_tensor_name string boxes 输入张量列表中框张量绑定的名称。
scores_tensor_name string scores 输入张量列表中分数张量绑定的名称。
confidence_threshold double 0.9 发布特定边界框所需的最低分数。

页面 34:Isaac ROS YOLOv8 — 目标检测

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

快速入门

设置开发环境
  1. 按照入门指南中的说明设置您的开发环境。
  2. (可选)按照传感器特定指南安装您想使用的任何传感器的依赖项。

注意:我们强烈建议在开始任何快速入门之前安装所有传感器依赖项。某些传感器依赖项需要在安装期间重新启动开发环境,这会中断快速入门过程。

下载快速入门资源
  1. 从 NGC 下载快速入门数据:
sudo apt-get install -y curl jq tar

NGC_ORG="nvidia"
NGC_TEAM="isaac"
PACKAGE_NAME="isaac_ros_yolov8"
NGC_RESOURCE="isaac_ros_yolov8_assets"
NGC_FILENAME="quickstart.tar.gz"
MAJOR_VERSION=4
MINOR_VERSION=5
VERSION_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/versions"
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" ]; then
       echo "No corresponding version found for Isaac ROS $MAJOR_VERSION.$MINOR_VERSION"
       echo "Found versions:"
       echo $AVAILABLE_VERSIONS | jq -r '.recipeVersions[].versionId'
else
       mkdir -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
  1. 激活 Isaac ROS 环境:
isaac-ros activate
  1. 创建一个临时虚拟环境并进入它。对于本示例,将其命名为 yolo
python3 -m venv yolo && source yolo/bin/activate
  1. 从 Ultralytics YOLOv8 下载您选择的模型。对于本示例,我们使用 YOLOv8s。
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s.pt
  1. 将 PyTorch 模型 (.pt) 转换为通用 ONNX 模型 (.onnx)。按照下面或此处的说明导出到 ONNX。

首先通过 pip 安装 ultralyticsonnx

pip3 install ultralytics
pip3 install onnx

sudo apt update
sudo apt install -y libgl1

然后,使用 ultralytics 将模型从 .pt 文件转换为 .onnx 模型。这可以通过运行以下命令完成:

python3

然后在 python3 中,将模型导出为 .onnx 格式:

>> from ultralytics import YOLO
>> model = YOLO('yolov8s.pt')
>> model.export(format='onnx')

然后退出交互式 Python shell,并停用虚拟环境:

deactivate

将生成的 .onnx 模型复制到 Isaac ROS 的指定位置 (${ISAAC_ROS_WS}/isaac_ros_assets/models/yolov8):

mkdir -p ${ISAAC_ROS_WS}/isaac_ros_assets/models/yolov8
cp yolov8s.onnx ${ISAAC_ROS_WS}/isaac_ros_assets/models/yolov8

退出 Isaac ROS 环境:

exit
构建 isaac_ros_yolov8
  1. 激活 Isaac ROS 环境:
isaac-ros activate
  1. 安装预构建的 Debian 包:
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-yolov8 ros-jazzy-isaac-ros-dnn-image-encoder ros-jazzy-isaac-ros-tensor-rt
将 ONNX 模型转换为 TensorRT
  1. 使用 trtexec 将 ONNX 模型转换为 TensorRT engine 文件 (.plan)。可以在此步骤中指定 FP16 量化参数。您可以使用 netron 可视化 ONNX 模型并记录输入和输出名称及维度。
/usr/src/tensorrt/bin/trtexec --onnx=${ISAAC_ROS_WS}/isaac_ros_assets/models/yolov8/yolov8s.onnx --saveEngine=${ISAAC_ROS_WS}/isaac_ros_assets/models/yolov8/yolov8s.plan
运行启动文件
  1. 在 Isaac ROS 环境内,安装以下依赖:
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-examples
  1. 运行以下启动文件以使用快速入门 rosbag 启动此包的演示:
cd /workspaces/isaac_ros-dev && \
ros2 launch isaac_ros_examples isaac_ros_examples.launch.py launch_fragments:=yolov8 interface_specs_file:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_yolov8/quickstart_interface_specs.json \
      engine_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/models/yolov8/yolov8s.plan
  1. 在 Isaac ROS 环境内打开第二个终端:
isaac-ros activate
  1. 运行 rosbag 文件以模拟图像流:
ros2 bag play -l ${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_yolov8/quickstart.bag
可视化结果
  1. 在 Isaac ROS 环境内打开一个终端:
isaac-ros activate
  1. 运行 YOLOv8 可视化脚本:
ros2 run isaac_ros_yolov8 isaac_ros_yolov8_visualizer.py
  1. 在 Isaac ROS 环境内打开另一个终端:
isaac-ros activate
  1. 安装 rqt_image_view
sudo apt-get install -y ros-jazzy-rqt-image-view
  1. 使用 rqt_image_view 可视化和验证包的输出:
ros2 run rqt_image_view rqt_image_view /yolov8_processed_image

您的输出应如下所示:
(此处为 YOLOv8 检测骑自行车的人和自行车的截图)

故障排除

Isaac ROS 故障排除

有关 Isaac ROS 问题的解决方案,请参阅此处。

深度学习故障排除

有关使用 DNN 模型的问题的解决方案,请参阅此处。

API

用法
ros2 launch isaac_ros_yolov8 isaac_ros_yolov8_visualize.launch.py model_file_path:=<model_file_path> engine_file_path:=<engine_file_path> input_binding_names:=<input_binding_names> output_binding_names:=<output_binding_names> network_image_width:=<network_image_width> network_image_height:=<network_image_height> force_engine_update:=<force_engine_update> image_mean:=<image_mean> image_stddev:=<image_stddev> confidence_threshold:=<confidence_threshold> nms_threshold:=<nms_threshold>
Yolov8DecoderNode
ROS 参数
ROS 参数 类型 默认值 描述
tensor_name string "output_tensor" Managed NITROS Publisher 发布的推断输出张量的名称。解码器使用此名称获取输出张量。
confidence_threshold float 0.25 检测置信度阈值。用于在非最大抑制 (NMS) 期间过滤候选检测。
nms_threshold float 0.45 NMS IOU 阈值。

页面 35:Isaac ROS FoundationPose — 基础姿态估计

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

重要:本教程中 isaac_ros_foundationpose (FP32) 管线的峰值 GPU 显存使用量约为 7 GB。因此,我们建议使用至少 8 GB 显存的 GPU。

快速入门

设置开发环境
  1. 按照入门指南中的说明设置您的开发环境。
  2. (可选)按照传感器特定指南安装您想使用的任何传感器的依赖项。

注意:我们强烈建议在开始任何快速入门之前安装所有传感器依赖项。某些传感器依赖项需要在安装期间重新启动开发环境,这会中断快速入门过程。

下载快速入门资源
  1. 从 NGC 下载快速入门数据:
sudo apt-get install -y curl jq tar

NGC_ORG="nvidia"
NGC_TEAM="isaac"
PACKAGE_NAME="isaac_ros_foundationpose"
NGC_RESOURCE="isaac_ros_foundationpose_assets"
NGC_FILENAME="quickstart.tar.gz"
MAJOR_VERSION=4
MINOR_VERSION=6
VERSION_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/versions"
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" ]; then
       echo "No corresponding version found for Isaac ROS $MAJOR_VERSION.$MINOR_VERSION"
       echo "Found versions:"
       echo $AVAILABLE_VERSIONS | jq -r '.recipeVersions[].versionId'
else
       mkdir -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
  1. 从 NGC 下载预训练的 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.1_onnx/files/refine_model.onnx' -O refine_model.onnx && \
      wget 'https://api.ngc.nvidia.com/v2/models/nvidia/isaac/foundationpose/versions/1.0.1_onnx/files/score_model.onnx' -O score_model.onnx
构建 isaac_ros_foundationpose
  1. 激活 Isaac ROS 环境:
isaac-ros activate
  1. 安装预构建的 Debian 包:
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-foundationpose
运行启动文件
  1. 在容器内,将 .onnx 模型转换为 TensorRT engine plans:

转换 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

转换 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

注意:由于 FP16 精度损失,FoundationPose TensorRT engines 在 TensorRT 10.3+ 版本中以 FP32 精度运行。

注意:模型转换时间因平台而异。在 Jetson AGX Thor 上,engine 转换过程需要约 10-15 分钟才能完成。

  1. 完成 Isaac ROS RT-DETR 教程。

  2. 在容器内,安装以下依赖:

sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-examples
  1. 运行以下启动文件以启动此包的演示:

启动 isaac_ros_foundationpose

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 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
  1. 打开第二个终端并激活 Isaac ROS 环境:
isaac-ros activate
  1. 播放 rosbag:
ros2 bag play -l  ${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_foundationpose/quickstart.bag/
可视化结果
  1. 打开一个终端并激活 Isaac ROS 环境:
isaac-ros activate
  1. 安装 RViz 和 vision_msgs RViz 插件:
sudo apt-get install -y ros-jazzy-rviz2 ros-jazzy-vision-msgs-rviz-plugins
source /opt/ros/jazzy/setup.bash
  1. 启动 RViz2 以可视化输出
rviz2 -d  $(ros2 pkg prefix isaac_ros_foundationpose --share)/rviz/foundationpose.rviz
  1. 您应该看到打开的 RViz2 窗口,如下所示,显示叠加在输入图像上的 3D 边界框

注意:FoundationPose 旨在对先前未见过的对象执行姿态估计,无需模型重新训练。因此,首次检测需要大量 GPU 计算。然而,一旦确定了初始姿态估计,跟踪可以显著更快。请参阅目标平台的模型性能以确定使用哪个模型。更强大的独立 GPU 可以在此任务中优于所有其他平台,如果需要更高性能,应优先选择。将姿态估计与其他任务交错运行而不是连续运行也可以是更有效的解决方案。最后,如果运行时性能至关重要且离线训练资源可用,开发者可以使用合成数据生成和/或真实世界数据为 CenterPose 训练自己的目标对象以实现更快的姿态估计。

尝试更多示例

要继续探索,请查看以下建议的示例:

  • Isaac Sim 教程
  • 启动 FoundationPose 跟踪教程
  • 创建您自己的 .obj 3D 对象网格教程
  • 使用 Isaac Sim 将 3D 网格从 .usd 转换为 .obj 教程
  • 使用 Meshlab 简化 3D 网格教程
  • 在运行时切换网格教程

Isaac ROS 故障排除

有关 Isaac ROS 问题的解决方案,请参阅此处。

深度学习故障排除

有关使用 DNN 模型的问题的解决方案,请参阅此处。

API

用法
ros2 launch isaac_ros_foundationpose isaac_ros_foundationpose.launch.py refine_engine_file_path:=<refine 模型 .plan 路径> score_engine_file_path:=<score 模型 .plan 路径> mesh_file_path:=<对象网格文件路径> launch_rviz:=<启用 rviz> launch_bbox_to_mask:=<启用边界框到掩码转换器> mask_height:=<转换后的掩码高度> mask_width:=<转换后的掩码宽度>
FoundationPose Node
ROS 参数
ROS 参数 类型 默认值 描述
mesh_file_path string textured_simple.obj 目标对象网格文件的绝对路径。
min_depth float 0.1 点云的最小允许 Z 轴值。
max_depth float 2.0 点云的最小允许 X,Y,Z 轴值,用于阈值处理。
refine_iterations int 3 应用于优化模型的迭代次数可以提高精度。但是,更多迭代将需要更长的处理时间。
symmetry_axes string [''] 围绕轴的旋转对称性,角度格式为 ‘axis_angle’(例如,‘x_30’ 表示围绕 x 轴旋转 30 度)。有效轴为 [x, y, z]。角度必须明确指定(例如,‘x_180’)或使用 ‘full’ 表示完整旋转(以 30° 增量评估)。
symmetry_planes string [''] 已弃用:请改用 symmetry_axes。添加围绕指定轴的 180 度旋转对称性。格式:‘axis’(例如,‘x’ 表示围绕 x 轴旋转 180 度)。有效轴为 [x, y, z]。
fixed_axis_angles string [''] 固定姿态通过在姿态估计期间指定轴角对(例如 x_30, y_45)来约束方向角,强制围绕特定轴的旋转保持给定值(度)。
fixed_translations string [''] 固定平移分量,格式为 ‘axis_value’(例如,‘x_0.1’, ‘y_0.2’, ‘z_0.3’)。有效轴为 [x, y, z],分别表示 x, y, z 方向的平移。如果提供,这些将覆盖初始估计的平移。
refine_input_tensor_names string ['input_tensor1', 'input_tensor2'] 用于渲染/观察 refine 输入的张量名称,发布到单独的 TensorRT 节点。
score_input_tensor_names string ['input_tensor1', 'input_tensor2'] 用于渲染/观察 score 输入的张量名称,发布到单独的 TensorRT 节点。
tf_frame_name string fp_object 将姿态发布到 TF 树时使用的坐标系名称。
pose_estimation_timeout_ms int 5000 姿态估计处理看门狗使用的超时时间,单位为毫秒。
color_qos / depth_qos / color_info_qos / segmentation_qos string DEFAULT RGB、深度、相机信息和分割输入的输入 QoS 配置文件。
color_qos_depth / depth_qos_depth / color_info_qos_depth / segmentation_qos_depth int 10 RGB、深度、相机信息和分割输入的输入 QoS 队列深度。
output_qos string DEFAULT 检测和姿态矩阵输出的输出 QoS 配置文件。
output_qos_depth int 10 检测和姿态矩阵输出的输出 QoS 队列深度。
FoundationPose Tracking Node
ROS 参数
ROS 参数 类型 默认值 描述
mesh_file_path string textured_simple.obj 目标对象网格文件的绝对路径。
min_depth float 0.1 点云的最小允许 Z 轴值。
max_depth float 2.0 点云的最小允许 X,Y,Z 轴值,用于阈值处理。
refine_input_tensor_names string ['input_tensor1', 'input_tensor2'] 用于渲染/观察 refine 输入的张量名称,发布到单独的 TensorRT 节点。
tf_frame_name string fp_object 将姿态发布到 TF 树时使用的坐标系名称。
enable_auto_reset bool true 启用时,跟踪器检查每个优化后的姿态与输入点云,如果对象似乎已漂移出可见点云(请参阅 min_pointcloud_support),则要求选择器重置为姿态估计。如果下游消费者想自行处理漂移,或者点云太嘈杂而无法进行支持检查,请禁用此功能。
min_pointcloud_support int 50 必须位于预测姿态中心 mesh_diameter / 2 范围内的输入点云点的最小数量,姿态才被视为有效。未通过此检查的帧不会被发布,并且(当 enable_auto_reset 为 true 时)触发选择器重置。增加以严格防止漂移,减少以容忍更稀疏的点云。
color_qos / depth_qos / color_info_qos string DEFAULT RGB、深度和相机信息输入的输入 QoS 配置文件。
color_qos_depth / depth_qos_depth / color_info_qos_depth int 10 RGB、深度和相机信息输入的输入 QoS 队列深度。
output_qos string DEFAULT 检测和姿态矩阵输出的输出 QoS 配置文件。
output_qos_depth int 10 检测和姿态矩阵输出的输出 QoS 队列深度。
FoundationPose Selector Node
ROS 参数
ROS 参数 类型 默认值 描述
reset_period int 20000 重置周期,单位为毫秒。
FoundationPose Detection2DToMask Node
ROS 参数
ROS 参数 类型 默认值 描述
mask_width int 640 输出掩码宽度。FoundationPose 期望掩码与 RGB 图像具有相同的尺寸。
mask_height int 480 输出掩码高度。FoundationPose 期望掩码与 RGB 图像具有相同的尺寸。
ROS 主题发布
ROS 主题 接口 描述
segmentation sensor_msgs/Image 输出二值分割掩码。

页面 36:Isaac ROS NITROS Bridge — NITROS 桥接

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

概述

Isaac ROS NITROS Bridge 通过实现不同 ROS 消息类型之间的高效数据传输和转换,为 Isaac ROS 包提供 NITROS 增强性能。

Isaac ROS 通过 NITROS 在 ROS 2 中为机器人开发提供加速计算 ROS 包;这得益于 ROS 2 Humble 中类型适配 (REP-2007) 和类型协商 (REP-2009) 的添加。

Isaac ROS NITROS Bridge 通过将数据从 CPU 移动到 GPU 来避免 CPU 内存拷贝,从而提高性能。这显著提高了跨进程的性能,并使 GPU 内存中的数据能够被加速计算就地使用。

NITROS Bridge 实现不同 ROS 消息类型之间的高效数据传输和转换,将数据移动到 GPU 加速内存以避免 CPU 内存拷贝。NITROS 转换器使 GPU 内存中的数据适配用于加速计算。

此原理可应用于 ROS 2,例如在不同的 ROS 2 发行版之间,以利用在不同版本中开发的应用程序中的 Isaac ROS 功能,而无需完全迁移。

通过避免不必要的 CPU 内存拷贝,Isaac ROS NITROS Bridge 提高了加速计算性能,并减少了不同 ROS 消息类型之间的端到端延迟。

性能

Isaac ROS NITROS Bridge 为 NITROS 启用包提供高效的数据传输,与标准 ROS 消息传递相比显著提高了性能。请参阅 Isaac ROS Benchmark 脚本以测量 NITROS Bridge 性能。

  • isaac_ros_nitros_bridge_ros2
    • API

快速入门

设置开发环境
  1. 按照入门指南中的说明设置您的开发环境。
下载快速入门资源
  1. 从 NGC 下载快速入门数据:
sudo apt-get install -y curl jq tar

NGC_ORG="nvidia"
NGC_TEAM="isaac"
PACKAGE_NAME="isaac_ros_nitros_bridge_ros2"
NGC_RESOURCE="isaac_ros_nitros_bridge_ros2_assets"
NGC_FILENAME="quickstart.tar.gz"
MAJOR_VERSION=4
MINOR_VERSION=6
VERSION_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/versions"
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" ]; then
       echo "No corresponding version found for Isaac ROS $MAJOR_VERSION.$MINOR_VERSION"
       echo "Found versions:"
       echo $AVAILABLE_VERSIONS | jq -r '.recipeVersions[].versionId'
else
       mkdir -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
构建 isaac_ros_nitros_bridge_ros2
  1. 添加 --pid=host Docker 参数(如果尚未存在),然后启动 Docker 容器:
grep -qxF -- '--pid=host' ~/.isaac_ros_dev-dockerargs 2>/dev/null || echo "--pid=host" >> ~/.isaac_ros_dev-dockerargs
  1. 为 NITROS Bridge 设置 ptrace_scope
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
  1. 激活 Isaac ROS 环境:
isaac-ros activate
  1. 安装预构建的 Debian 包:
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-nitros-bridge-ros2
运行启动文件
  1. 运行以下启动文件以启动此包的演示:
cd /workspaces/isaac_ros-dev && \
     source install/setup.bash && \
     ros2 launch isaac_ros_nitros_bridge_ros2 isaac_ros_nitros_bridge_quickstart.launch.py rosbag_path:=${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_nitros_bridge_ros2/quickstart.bag
  1. 打开第二个终端并激活 Isaac ROS 环境:
isaac-ros activate
  1. 安装 RViz:
sudo apt-get install -y ros-jazzy-rviz2
source /opt/ros/jazzy/setup.bash
  1. 在 RViz 中可视化输出主题 /r2b/ros2_output_image
cd /workspaces/isaac_ros-dev/ && \
     source install/setup.bash && \
     rviz2

尝试另一个示例

有关运行 Isaac Sim 与 NITROS Bridge 的示例,请参阅此处。

故障排除

Isaac ROS NITROS Bridge ROS 2 构建问题
症状

构建 ROS 2 包时可能会遇到构建问题。

解决方案

构建前必须从 ROS 2 安装中 source setup.bash

source /opt/ros/jazzy/setup.bash

更新日志

日期 变更
2026-07-06 Isaac ROS 4.5.0 版本的兼容性和集成更新
2026-04-30 Isaac ROS 4.4.0 版本的兼容性和集成更新
2024-09-26 Isaac ROS 3.1 更新
2024-05-30 兼容 JetPack 6.0
2023-10-18 初始版本

Logo

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

更多推荐