Jetson Orin Nano robot vision setup guide

Flash the board, verify CUDA and OpenCV, build a TensorRT engine, capture with GStreamer and manage power and thermals for a working vision pipeline.

Reference
RE-1454
Published
Read
7 min

About the author · Sources, testing and AI policy

Jetson Orin Nano developer board with heatsink fan and CSI camera module on a workbench

A Jetson turns a robot from something that sees into something that understands. The Orin Nano is the usual entry point, and most first builds fail on power, thermals or software versions rather than on the model.

This guide covers what the Orin Nano is good at, how to flash and set it up, how to run a vision model with TensorRT, and the practical limits you hit on a battery-powered robot in India.

Jetson or Raspberry Pi

A Raspberry Pi is a general computer with a GPU that is not designed for neural networks. A Jetson has an embedded GPU with tensor cores and a software stack built for inference. That difference decides what is possible.

TaskRaspberry Pi 5Jetson Orin Nano
Camera streaming, simple OpenCVFineOverkill
ArUco, colour thresholdingFine at low resolutionComfortable
YOLO at 30 fpsNot realistic at useful resolutionRealistic with TensorRT
Multiple cameras plus SLAMVery limitedPossible with care
Power budget5 to 15 W7 to 25 W modes
CostLowSeveral times higher

If the robot only needs to follow a line or detect a marker, a Pi or even a microcontroller is cheaper and easier. The Jetson earns its price when the robot must run a learned model continuously, or fuse several camera streams.

Which Orin variant to buy

NVIDIA’s naming is confusing: Orin Nano and Orin NX are modules, and the developer kit bundles a module with a carrier board. For a first robot, buy the developer kit, because the carrier board, power supply and flashing path are already solved.

OptionSuited toNotes
Orin Nano 4 GB kitOne camera, small modelsMemory is the first limit
Orin Nano 8 GB kitMost robot vision projectsThe usual starting point
Orin NX 8 or 16 GBMultiple cameras, larger modelsMore compute and memory, more power
Industrial module plus custom carrierProduction unitsLongevity and certification, higher NRE

Memory matters more than benchmark TOPS for robotics. A model that fits in 8 GB runs; a pipeline with two cameras, a detector and a tracker can exhaust 4 GB quickly. Check current specifications and pricing with the supplier, because NVIDIA revises both.

Flashing and first boot

The developer kit can be flashed from an SD card or over USB from an Ubuntu host using SDK Manager. The SD card route is faster to start, the host route gives you more control and is required for eMMC modules.

  • Use a good quality SD card or an NVMe drive; cheap cards cause random boot failures.
  • Install the latest JetPack release that matches your ROS 2 distribution.
  • Set the power mode deliberately instead of leaving the default.
  • Update packages before installing anything else, then take an image of the working system.
  • Record the exact versions of CUDA, cuDNN, TensorRT and OpenCV in the project notes.

The last point saves days later. A TensorRT engine built against one version does not load against another, and “it worked last month” is usually a version drift problem.

OpenCV with CUDA, and why it matters

The OpenCV that ships with JetPack is not built with CUDA by default in every release. If your pipeline resizes and converts frames on the CPU, you lose much of the Jetson’s advantage before the model even runs.

import cv2
print(cv2.getBuildInformation())   # look for CUDA and cuDNN entries

# check the CUDA device count from Python
import torch
print(torch.cuda.is_available(), torch.cuda.device_count())

If CUDA is missing, either rebuild OpenCV with the CUDA flags or move preprocessing into the model graph. Many vision pipelines are dominated by resize and colour conversion, so this is not a detail.

Running a detector with TensorRT

PyTorch on the Jetson works, but TensorRT is what makes real-time inference possible. The usual path is to export the trained model to ONNX, then build a TensorRT engine on the target device.

# on the Jetson, after exporting model.onnx
trtexec --onnx=model.onnx --saveEngine=model.engine --fp16

# then load the engine in Python with the TensorRT runtime
# allocate bindings once, reuse buffers for every frame

Build the engine on the device that will run it. Engines are specific to the TensorRT version, the GPU and sometimes the power mode. Keep the ONNX file in the repository and treat the engine as a build artifact.

  • Use FP16 first; INT8 gives more speed but needs a calibration set and careful validation.
  • Batch size one is normal for robots; do not optimise for throughput you will not use.
  • Pin the input resolution to what the task needs, not to the training default.
  • Pre-allocate buffers and avoid per-frame allocations in Python.
  • Measure end-to-end latency, including capture and decode, not just inference.

Cameras and GStreamer

CSI cameras connect directly and are efficient; USB cameras are easier to source in India and more flexible. Either way, capture through GStreamer rather than a naive read loop, so frames are decoded in hardware where possible.

gst = ("nvarguscamerasrc ! video/x-raw(memory:NVMM),width=1280,height=720,"
       "framerate=30/1 ! nvvidconv ! video/x-raw,format=BGRx ! "
       "videoconvert ! appsink")
cap = cv2.VideoCapture(gst, cv2.CAP_GSTREAMER)

For USB cameras, MJPG at 30 fps is often faster than raw YUYV because the USB bandwidth, not the sensor, is the limit. Test both and measure, rather than assuming.

Power and thermals on a moving robot

A Jetson that runs at 25 W needs a supply that can deliver it continuously, with headroom for the camera and peripherals. Motor startup on the same battery causes voltage dips that reset the board, and a reset mid-move is dangerous.

  • Power the Jetson from a regulated rail, not directly from a sagging battery pack.
  • Use a separate DC-DC converter with enough current, and add bulk capacitance at the board.
  • Add a small UPS or a supervised shutdown so the board does not lose power while writing storage.
  • Fit the heatsink and fan that the power mode requires; passive cooling is for 7 W modes only.
  • Keep the Jetson out of the hot enclosure corner, and measure the temperature under load.
# check thermal zone temperatures under load
cat /sys/devices/virtual/thermal/thermal_zone*/type
cat /sys/devices/virtual/thermal/thermal_zone*/temp

# set a power mode
sudo nvpmodel -q
sudo nvpmodel -m 0

What to expect in practice

The numbers below are realistic starting points, not specifications. Measure on your own model, resolution and power mode; the same board can differ by a factor of three between a small detector at 640 pixels and a large model at 1280.

PipelineOrin Nano 8 GB, realistic expectation
Small detector, 640 px, FP16Comfortably real time
Medium detector, 640 px, FP16Real time with a tuned pipeline
Large detector, 1280 pxMarginal; expect to reduce resolution or frame rate
Detector plus tracker plus depthPossible, but power and thermal budget matter
Two cameras plus detector plus SLAMOrin NX territory

Buying a Jetson in India

  • Buy the developer kit from an authorised distributor with a warranty you can claim locally.
  • Budget for a heatsink and fan, a good power supply, an NVMe SSD and a spare SD card.
  • Check the module’s longevity if you plan production; consumer kits are for development.
  • Keep one spare kit for the team; a dead board should not stop a project for a month.
  • Confirm the JetPack version supports the ROS 2 release you plan to use before committing to a stack.

Related: Raspberry Pi versus Jetson, YOLO object detection for robots, depth cameras for robot vision, ROS 2 for beginners, OpenCV on Raspberry Pi.

Do I need a Jetson for a simple robot vision project?

No. ArUco detection, colour tracking and line following run on a Raspberry Pi or even a microcontroller. A Jetson makes sense when you need a learned detector running continuously at usable frame rates.

Can I run ROS 2 on a Jetson Orin Nano?

Yes. Install a ROS 2 release that matches the Ubuntu version in your JetPack, or run it in a container. Building from source works but takes time and disk space.

Why is my TensorRT engine not loading?

Engines are tied to the TensorRT version, GPU and often the power mode. Rebuild the engine on the target device after any JetPack update instead of copying engines between boards.

How do I stop the Jetson resetting when the motors start?

Power it from a regulated DC-DC converter with adequate current and add bulk capacitance. Motor startup current dips the battery rail, and a brownout resets the board mid-move.

Is the Orin Nano enough for YOLO at 30 fps?

Usually yes for small and medium models at 640 pixels in FP16 after TensorRT conversion, provided the rest of the pipeline is efficient. Large models at high resolution need an Orin NX or a smaller input size.

If inference happens at the line, size the compute with the inspection guide before buying an edge device.

Sources and further reading

Pass it onWhatsAppLinkedIn

Keep reading

Continue learning

The Build Note

One short email when something is worth your bench time.

A new build sheet, a part price that moved, or a mistake worth avoiding. No daily drip, no recycled news.

One short email when a build or a price is worth your time. Unsubscribe in one click.