Isaac ROS 4.5 pins TensorRT 10.13.3, which has no sm_87 cubin — TensorRT inference is broken on Jetson Orin / JetPack 7.2
Problem
isaac-ros-cli 2.4.0 ships an exact-version apt pin:
/etc/apt/preferences.d/isaac-ros-tensorrt-13-0.pref (owned by isaac-ros-cli)
Package: libnvinfer* tensorrt* libnvonnxparsers* python3-libnvinfer*
Pin: version 10.13.3.9-1+cuda13.0
Pin-Priority: 1001
TensorRT 10.13.3 has no sm_87 cubin, and sm_87 is Jetson Orin. Any TensorRT engine build inside the container fails:
Target GPU SM 87 is not supported by this TensorRT release.
(in checkCurrentSMEnabled at optimizer/common/builderHelpers.cpp:707)
The same apt repo already serves 10.16.1.11-1+cuda13.2, which includes sm_87 and is what JetPack 7.2 installs on the host. The pin (priority 1001) overrides it.
Environment
Jetson Orin Nano (p3767-0005, sm_87) · JetPack 7.2 GA / L4T R39.2.0 · Isaac ROS 4.5 (release-4.5 noble-jetpack) · isaac-ros-cli 2.4.0-1.20260707043405
Host: CUDA 13.2.1 / TensorRT 10.16.2.10+cuda13.2 — Container: CUDA 13.0.3 / TensorRT 10.13.3.9+cuda13.0
Evidence
sm_87 missing from the pinned build (sm_86 and sm_89 are present, 87 is skipped):
container, TensorRT 10.13.3
$ cuobjdump --list-elf libnvinfer.so.10.13.3 | grep -oiE 'sm_[0-9]+' | sort -u | tr '\n' ' '
sm_100 sm_103 sm_110 sm_120 sm_121 sm_75 sm_80 sm_86 sm_89 sm_90
host, TensorRT 10.16.2
$ cuobjdump --list-elf libnvinfer.so.10.16.2 | grep -oiE 'sm_[0-9]+' | sort -u | tr '\n' ' '
sm_100 sm_103 sm_110 sm_120 sm_121 sm_75 sm_80 sm_86 sm_87 sm_89 sm_90
No PTX fallback — shipped PTX stops at sm_86, and PTX cannot JIT forward to a newer arch.
Host TensorRT is not reachable from the container — the container runtime injects no libnvinfer, and ldconfig resolves to the container's own 10.13.3.
Reproduction (ZED SDK Camera::open() with DEPTH_MODE::NEURAL, which builds a TRT engine for the local GPU):
[ZED][WARNING] IBuilder::buildSerializedNetwork: Error Code 9: API Usage Error
(Target GPU SM 87 is not supported by this TensorRT release. ...)
[ZED][ERROR] NEURAL CORRUPTED MODEL
[ZED][ERROR] CORRUPTED SDK INSTALLATION
The same call with DEPTH_MODE::PERFORMANCE (no TensorRT) succeeds and returns depth, and CUDA reports devices=1, dev0: Orin, compute capability sm_87 — so camera, CUDA and GPU access are all healthy. Only the TensorRT path fails.
Scope
Only TensorRT-backed inference. Exactly one shared object under /opt/ros/jazzy/lib links TensorRT (libtensor_rt_node.so); the rest link libcudart directly. nvblox_node and isaac_ros_apriltag start normally.
Affected: isaac_ros_tensor_rt, isaac_ros_triton, DNN inference nodes, and third-party SDKs that build a TRT engine at runtime (e.g. ZED neural depth).
Possibly a stale pin
The isaac-ros-cli changelog shows TensorRT pinning is maintained per JetPack release:
isaac-ros-cli (2.2.0-1) * Align TensorRT pinning with JetPack 7.1.
The 2.4.0 entry (Isaac ROS 4.5) has no corresponding re-alignment, and JetPack 7.2 moved the Jetson stack to CUDA 13.2 / TensorRT 10.16. The sibling isaac-ros-cuda-13-0.pref has a 2026 header and explanatory comments; isaac-ros-tensorrt-13-0.pref has a 2025 header and no rationale.
If the pin is intentional for Orin, a comment saying why would help.
Suggested fix
Re-align the TensorRT pin to 10.16.x+cuda13.2 for noble-jetpack, as 2.2.0 did for JetPack 7.1. A floor rather than an exact pin would also avoid this on future JetPack bumps.
ABI note
The exact pin looks stricter than TensorRT's soname policy requires: both versions export soname libnvinfer.so.10, and libtensor_rt_node.so links only that major soname. Comparing exported symbols, none were removed — 10.16.2 adds setInternalLibraryPath and updates version markers.
Link-level observation only; it says nothing about serialized engine format or plugin behaviour (cf. isaac_ros_common#223). We are testing an override to 10.16.1.11+cuda13.2 and will report runtime results.
Workaround
Package: libnvinfer* tensorrt* libnvonnxparsers* python3-libnvinfer*
Pin: version 10.16.1.11-1+cuda13.2
Pin-Priority: 1002
Package: libnvinfer11 libnvinfer-11 libnvonnxparsers11 tensorrt11
Pin: version *
Pin-Priority: -1
Deleting NVIDIA's pin files alone is not sufficient — apt then jumps to TensorRT 11.2.1+cuda13.3. With the replacement pin, apt-get -s install resolves cleanly to 10.16.1.11+cuda13.2 with no Isaac ROS packages removed.
Isaac ROS 4.5 pins TensorRT 10.13.3, which has no sm_87 cubin — TensorRT inference is broken on Jetson Orin / JetPack 7.2
Problem
isaac-ros-cli 2.4.0 ships an exact-version apt pin:
/etc/apt/preferences.d/isaac-ros-tensorrt-13-0.pref (owned by isaac-ros-cli)
Package: libnvinfer* tensorrt* libnvonnxparsers* python3-libnvinfer*
Pin: version 10.13.3.9-1+cuda13.0
Pin-Priority: 1001
TensorRT 10.13.3 has no sm_87 cubin, and sm_87 is Jetson Orin. Any TensorRT engine build inside the container fails:
Target GPU SM 87 is not supported by this TensorRT release.
(in checkCurrentSMEnabled at optimizer/common/builderHelpers.cpp:707)
The same apt repo already serves 10.16.1.11-1+cuda13.2, which includes sm_87 and is what JetPack 7.2 installs on the host. The pin (priority 1001) overrides it.
Environment
Jetson Orin Nano (p3767-0005, sm_87) · JetPack 7.2 GA / L4T R39.2.0 · Isaac ROS 4.5 (release-4.5 noble-jetpack) · isaac-ros-cli 2.4.0-1.20260707043405
Host: CUDA 13.2.1 / TensorRT 10.16.2.10+cuda13.2 — Container: CUDA 13.0.3 / TensorRT 10.13.3.9+cuda13.0
Evidence
sm_87 missing from the pinned build (sm_86 and sm_89 are present, 87 is skipped):
container, TensorRT 10.13.3
$ cuobjdump --list-elf libnvinfer.so.10.13.3 | grep -oiE 'sm_[0-9]+' | sort -u | tr '\n' ' '
sm_100 sm_103 sm_110 sm_120 sm_121 sm_75 sm_80 sm_86 sm_89 sm_90
host, TensorRT 10.16.2
$ cuobjdump --list-elf libnvinfer.so.10.16.2 | grep -oiE 'sm_[0-9]+' | sort -u | tr '\n' ' '
sm_100 sm_103 sm_110 sm_120 sm_121 sm_75 sm_80 sm_86 sm_87 sm_89 sm_90
No PTX fallback — shipped PTX stops at sm_86, and PTX cannot JIT forward to a newer arch.
Host TensorRT is not reachable from the container — the container runtime injects no libnvinfer, and ldconfig resolves to the container's own 10.13.3.
Reproduction (ZED SDK Camera::open() with DEPTH_MODE::NEURAL, which builds a TRT engine for the local GPU):
[ZED][WARNING] IBuilder::buildSerializedNetwork: Error Code 9: API Usage Error
(Target GPU SM 87 is not supported by this TensorRT release. ...)
[ZED][ERROR] NEURAL CORRUPTED MODEL
[ZED][ERROR] CORRUPTED SDK INSTALLATION
The same call with DEPTH_MODE::PERFORMANCE (no TensorRT) succeeds and returns depth, and CUDA reports devices=1, dev0: Orin, compute capability sm_87 — so camera, CUDA and GPU access are all healthy. Only the TensorRT path fails.
Scope
Only TensorRT-backed inference. Exactly one shared object under /opt/ros/jazzy/lib links TensorRT (libtensor_rt_node.so); the rest link libcudart directly. nvblox_node and isaac_ros_apriltag start normally.
Affected: isaac_ros_tensor_rt, isaac_ros_triton, DNN inference nodes, and third-party SDKs that build a TRT engine at runtime (e.g. ZED neural depth).
Possibly a stale pin
The isaac-ros-cli changelog shows TensorRT pinning is maintained per JetPack release:
isaac-ros-cli (2.2.0-1) * Align TensorRT pinning with JetPack 7.1.
The 2.4.0 entry (Isaac ROS 4.5) has no corresponding re-alignment, and JetPack 7.2 moved the Jetson stack to CUDA 13.2 / TensorRT 10.16. The sibling isaac-ros-cuda-13-0.pref has a 2026 header and explanatory comments; isaac-ros-tensorrt-13-0.pref has a 2025 header and no rationale.
If the pin is intentional for Orin, a comment saying why would help.
Suggested fix
Re-align the TensorRT pin to 10.16.x+cuda13.2 for noble-jetpack, as 2.2.0 did for JetPack 7.1. A floor rather than an exact pin would also avoid this on future JetPack bumps.
ABI note
The exact pin looks stricter than TensorRT's soname policy requires: both versions export soname libnvinfer.so.10, and libtensor_rt_node.so links only that major soname. Comparing exported symbols, none were removed — 10.16.2 adds setInternalLibraryPath and updates version markers.
Link-level observation only; it says nothing about serialized engine format or plugin behaviour (cf. isaac_ros_common#223). We are testing an override to 10.16.1.11+cuda13.2 and will report runtime results.
Workaround
Package: libnvinfer* tensorrt* libnvonnxparsers* python3-libnvinfer*
Pin: version 10.16.1.11-1+cuda13.2
Pin-Priority: 1002
Package: libnvinfer11 libnvinfer-11 libnvonnxparsers11 tensorrt11
Pin: version *
Pin-Priority: -1
Deleting NVIDIA's pin files alone is not sufficient — apt then jumps to TensorRT 11.2.1+cuda13.3. With the replacement pin, apt-get -s install resolves cleanly to 10.16.1.11+cuda13.2 with no Isaac ROS packages removed.