VnRoboVnRobo
AboutPricingBlogContact
🇻🇳VISign InStart Free Trial
🇻🇳VI
VnRobo logoVnRobo logo

AI infrastructure for next-generation industrial robots.

Product

  • Features
  • Pricing
  • Knowledge Base
  • Services

Company

  • About Us
  • Blog
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 VnRobo. All rights reserved.

Made with♥in Vietnam
VnRoboVnRobo
AboutPricingBlogContact
🇻🇳VISign InStart Free Trial
🇻🇳VI
  1. Home
  2. Blog
  3. Installing cuRoboV2 on Jetson AGX Orin: CUDA and smoke tests
manipulationcurobojetsoncudainstallationtutorial

Installing cuRoboV2 on Jetson AGX Orin: CUDA and smoke tests

A reproducible Jetson setup for cuRoboV2 with JetPack, uv, Python 3.11, CUDA 12.x, PyTorch, and deployment-focused checks.

Nguyen Anh TuanMay 20, 20264 min readUpdated: Oct 9, 2026
Installing cuRoboV2 on Jetson AGX Orin: CUDA and smoke tests

Goal

This guide builds the Jetson AGX Orin 64GB runtime environment. The current cuRobo documentation recommends Ubuntu Linux, an NVIDIA GPU newer than Turing, Python 3.10 or newer while avoiding unvalidated versions above 3.13, a driver that supports CUDA 12+, and installation through uv. On Jetson, the driver and CUDA stack come from JetPack, so the real task is pinning JetPack before installing PyTorch and cuRobo.

Version matrix to write down first

Before installing packages, create deploy-matrix.md or deploy-matrix.yaml. This is what lets you debug two weeks later when planning gets slower or CUDA import starts failing.

yaml
target: jetson-agx-orin-64gb
l4t: "R36.x"
jetpack: "6.x"
cuda_runtime: "12.x"
python: "3.11"
torch: "aarch64 wheel matching JetPack"
curobo: "git sha or release tag"
install_mode: "uv pip install .[cu12] if torch already exists"
storage: "NVMe for repo, venv, torch cache, uv cache"
power_mode: "MAXN for benchmarking, production mode documented separately"

Do not mix three PyTorch sources: NVIDIA Jetson wheels, x86_64 PyPI wheels, and an NGC base image for a different JetPack release. If you use an l4t-pytorch base image, let the image define PyTorch and install cuRobo without pulling torch (.[cu12]). If you install bare-metal, validate the aarch64 PyTorch wheel first, then run cuRobo tests.

1. Inspect the Jetson

bash
sudo nvpmodel -q
tegrastats
nvcc --version
python3 --version
df -h /

If your root filesystem is on eMMC, move the workspace and caches to NVMe. cuRobo pulls PyTorch, Warp, and CUDA build caches; small eMMC storage makes builds slow and fragile.

bash
mkdir -p /mnt/nvme/robotics/{src,venvs,cache}
export UV_CACHE_DIR=/mnt/nvme/robotics/cache/uv
export TORCH_HOME=/mnt/nvme/robotics/cache/torch

2. Clone and create a venv

bash
cd /mnt/nvme/robotics/src
git clone https://github.com/NVlabs/curobo
cd curobo

uv venv --python 3.11
source .venv/bin/activate
python -V

The official CUDA 12 fresh-install command is:

bash
uv pip install .[cu12-torch]

If your Jetson already has a PyTorch wheel that matches its JetPack/CUDA version, prefer:

bash
uv pip install .[cu12]

On Jetson this is often safer because aarch64 PyTorch wheels must match the L4T stack. Do not force x86_64 wheels from PyPI onto Jetson.

3. Minimal smoke test

bash
python - <<'PY'
import torch
import curobo
print("torch", torch.__version__)
print("cuda", torch.version.cuda)
print("cuda available", torch.cuda.is_available())
print("device", torch.cuda.get_device_name(0))
print("curobo", curobo.__version__)
PY

Then run package tests if time allows:

bash
pytest --pyargs curobo.tests

If the full test suite is too expensive, at least run the getting-started examples that do not require real robot hardware.

4. Containerize the environment

A minimal shape:

dockerfile
FROM nvcr.io/nvidia/l4t-pytorch:r36.4.0-pth2.4-py3

RUN apt-get update && apt-get install -y git curl build-essential && rm -rf /var/lib/apt/lists/*
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:${PATH}"

WORKDIR /opt/curobo
COPY . /opt/curobo
RUN uv venv --python 3.11 /opt/curobo/.venv
RUN . /opt/curobo/.venv/bin/activate && uv pip install .[cu12]

Do not treat this Dockerfile as universal. Match the base image to the actual JetPack release, keep PyTorch compatible, then install cuRobo.

5. Common failures

Symptom Likely cause Fix
torch.cuda.is_available() == False Wrong PyTorch wheel for JetPack/CUDA Reinstall the correct aarch64 PyTorch wheel
Build runs out of disk Cache on eMMC Move UV_CACHE_DIR, TORCH_HOME, and workspace to NVMe
Import works but examples crash CUDA/Warp/PyTorch ABI mismatch Rebuild in a clean pinned environment
First planning call is slow CUDA graph/kernel warmup Call warmup() during startup

6. Smoke tests better than import curobo

After import succeeds, run three small checks:

bash
# 1) GPU tensor path
python - <<'PY'
import torch
x = torch.randn(1024, 1024, device="cuda")
print((x @ x).mean().item())
PY

# 2) cuRobo package tests, if time allows
pytest --pyargs curobo.tests -q

# 3) one example that does not need real hardware
python -m curobo.examples.getting_started.forward_kinematics --help

If the full package suite is too slow on Jetson, still run at least one FK/IK example after building the robot model in part 3. The goal is not exhaustive library certification; it is proving that CUDA/PyTorch/Warp work on the actual target runtime.

7. Checklist

  • python -c "import curobo" succeeds.
  • torch.cuda.is_available() is True.
  • nvidia-smi is not expected on Jetson; use tegrastats.
  • Repo and venv are on NVMe.
  • You logged JetPack, Python, PyTorch, CUDA, and cuRobo commit versions.

Conclusion

The hard part is not the install command; it is pinning the version matrix. Once the environment is reproducible, move to robot model generation: URDF, meshes, collision spheres, and the self-collision matrix.

NT

Nguyễn Anh Tuấn

Robotics & AI Engineer. Building VnRobo — sharing knowledge about robot learning, VLA models, and automation.

Explore VnRobo

Fleet MonitoringROS 2 IntegrationAMR Solutions
curobo-jetson-g1 — Part 2/10
← cuRobo on Jetson AGX Orin and Unitree G1: a 10-part roadmapBuilding a cuRobo robot model: URDF and collision spheres →

Related Posts

Tutorial
A ROS 2 bridge for cuRobo: from goal pose to JointTrajectory
curoboros2jetsonPart 6
manipulation

A ROS 2 bridge for cuRobo: from goal pose to JointTrajectory

Designing a ROS 2 wrapper around cuRobo with actions, lifecycle warmup, joint-state reordering, retiming, controller execution, and watchdogs.

6/5/20262 min read
NT
Tutorial
Motion planning and grasping with cuRobo: obstacles, seeds
curobomotion-planninggraspPart 5
manipulation

Motion planning and grasping with cuRobo: obstacles, seeds

Running pose-to-pose planning, obstacle collision, warmup, grasp approach-lift, and planner tuning for robot arms on Jetson.

6/1/20263 min read
NT
Tutorial
cuRobo on Jetson AGX Orin and Unitree G1: a 10-part roadmap
curobojetsonunitree-g1Part 1
manipulation

cuRobo on Jetson AGX Orin and Unitree G1: a 10-part roadmap

The opening guide for using cuRoboV2 on robot arms and Unitree G1, from Jetson runtime architecture to whole-body deployment boundaries.

5/16/20265 min read
NT
VnRobo logoVnRobo logo

AI infrastructure for next-generation industrial robots.

Product

  • Features
  • Pricing
  • Knowledge Base
  • Services

Company

  • About Us
  • Blog
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 VnRobo. All rights reserved.

Made with♥in Vietnam