How PandaI uses NVIDIA Isaac
Warning
The AI Accelerator requires ROS 2 Humble, so PolyScope X 10.12.1 is the latest compatible release. PolyScope X 10.13 and later use ROS 2 Jazzy and are not currently supported.
Why read this guide?
This page is the mental model for the AI Accelerator (PandaI): what Universal Robots owns, what NVIDIA Isaac ROS runs on the Jetson GPU, and how a PolyScope program gets a part pose or a collision-aware path. Read it before the examples if you need to know why the launch files start so many nodes.
PandaI is the software name for the perception and planning stack that ships with the UR AI Accelerator. On disk and in ROS it is pandai_ark (the ARK stack). NVIDIA Isaac ROS / Isaac Manipulator supplies the GPU models and planners. UR supplies the camera/calibration URCapX, the Docker workspace, the glue nodes, and the ark_* URScript API.
PandaI is built as detect → pose → plan → move.
The robot never loads a .onnx file itself. A PolyScope program calls ROS 2 services. Those services run inside the SDK container on the NVIDIA Jetson Orin AGX 64GB.
What runs where
Layer |
Software |
Machine |
|---|---|---|
Teach pendant / robot OS |
PolyScope X 10.12.1, URCaps ( |
UR controller |
Camera control and hand-eye |
Jetson (containers) + pendant UI |
|
RGB-D driver |
Orbbec Gemini 335Lg ROS 2 node |
Jetson |
GPU AI + planning |
NVIDIA Isaac ROS (RT-DETR, SAM/Triton, FoundationPose, cuMotion) |
Jetson, container |
Glue, world model, URScript |
|
Same SDK container |
Host workspace: ~/aia_sdk/ros/
Inside the container: /workspaces/isaac_ros-dev/
Start / enter the container: cd ~/aia_sdk/ros then ./scripts/run_sdk_setup.sh (see SDK).
flowchart LR
cam["Orbbec Gemini 335Lg<br/>RGB + depth"]
isaac["<b>NVIDIA Isaac ROS</b><br/>RT-DETR · SAM · FoundationPose · cuMotion"]
ark["<b>pandai_ark</b><br/>pipeline + world model + URScript services"]
psx["PolyScope X<br/>ark_infer_* / ark_move_path_plan"]
cam --> isaac
isaac --> ark
ark --> psx
classDef n fill:#EDF1F2,stroke:#002B39,stroke-width:1.5px,color:#002B39
class cam,isaac,ark,psx n
NVIDIA pieces PandaI actually uses
These are Isaac / Isaac Manipulator building blocks, compiled to TensorRT on first SDK setup (MAXN power mode — see Jetson compute utilities and Model restore failed).
Isaac capability |
What it does in PandaI |
Typical assets |
|---|---|---|
RT-DETR |
2D object detection (bounding boxes + class) |
Fine-tuned checkpoint under |
SAM (Segment Anything, Triton) |
Turns each box into a pixel mask |
ONNX / engine under |
FoundationPose |
6DOF pose from RGB-D + mask + textured mesh |
|
cuMotion |
Collision-aware motion planning |
Collision YAML ( |
Isaac ROS camera / NITROS |
GPU-friendly image types between Isaac nodes |
Used inside SAM / FoundationPose launches |
Classification and AprilTags are ARK nodes, not FoundationPose. Classification trains a small ONNX classifier on cropped ROIs. Tags use a tag detector and TF, not a CAD mesh.
PandaI is built as detect → pose → plan → move. It is not a vision–language–action policy (Groot / π₀). Those would be a separate inference service, not ark_load_detection_model.
UR glue on top of Isaac
pandai_ark does not replace Isaac. It orchestrates Isaac and talks to PolyScope.
ARK piece |
Role |
|---|---|
|
Freezes a synced RGB-D frame; calls RT-DETR; for pose estimation prompts SAM then FoundationPose ( |
|
Loads your checkpoint; |
|
Tracks parts in the cell after 2D or 3D detection |
|
Wraps cuMotion as |
Overlay, Console UI, logging |
Desktop and pendant visualization |
|
Relays ROS to the pendant |
PolyScope calls (after ark_init()), documented under URScript API:
URScript |
Isaac-side effect |
|---|---|
|
Load RT-DETR weights ( |
|
Trigger + wait; with FoundationPose context this is a 3D pose, not only a 2D box |
|
Crop ROI, run classifier |
|
Tag pipeline + TF |
|
cuMotion plan, then the robot executes the trajectory |
Perception pipeline (Isaac in the loop)
Used by Detection, Pose Estimation, and Dynamic Picking.
flowchart TB
rgb["RGB + depth<br/>Camera Creator topics"]
det["<b>RT-DETR</b><br/>2D boxes"]
sam["<b>SAM</b><br/>mask from box"]
fp["<b>FoundationPose</b><br/>6DOF vs textured mesh"]
wait["wait_detection<br/>ark_infer_detection"]
move["PolyScope move_frame / pick"]
rgb --> det
det --> sam
sam --> fp
fp --> wait
wait --> move
classDef i fill:#FFFFFF,stroke:#002B39,stroke-width:1.5px,color:#002B39
class rgb,det,sam,fp,wait,move i
Camera Creator publishes
color/image_raw, depth, andcamera_info(after AIA Core has selected and started the Gemini).Hand-eye from AIA Core (
/etc/aix_cameras/camera.yaml) puts those poses in robot base.RT-DETR needs a COCO-trained detector. Train it with Auto Annotation (SAM2 helps label video; training still produces RT-DETR checkpoints).
SAM is a frozen Isaac model. You do not train SAM for a new part.
FoundationPose does not read COCO. It matches live RGB-D + mask to a dimensionally accurate textured mesh (centered
.obj+ one texture image). Weak texture or a wrong mesh scale shows up as bad orientation, not as a missing box.The robot uses the returned pose (
poses[0]in base) plus a taught grasp offset.
Path planning (basic / advanced) is a second Isaac path: cuMotion uses the UR model + collision YAML. Dynamic picking runs both pose estimation and cuMotion.
Training vs Isaac factory models
You train / provide |
Isaac restores / compiles (do not delete) |
|---|---|
RT-DETR checkpoint ( |
|
Classification ONNX ( |
SAM ONNX + TensorRT |
Textured part mesh ( |
FoundationPose |
Collision file + gripper STL |
cuMotion / robot description |
First run_sdk_setup.sh restore/compile is GPU-heavy. If it fails, later starts keep a bad models_backup — see Model restore failed.
What is not NVIDIA Isaac
Keep these separate when debugging:
PolyScope X and URCaps — robot OS,
ark_*preamble, application nodes.AIA Core — camera pick, exposure, chessboard hand-eye. No RT-DETR.
Camera Creator — Orbbec lifecycle. If Viewer or ROS cannot see the camera, fix this (and udev / USB vs GMSL) before blaming Isaac.
Orbbec Viewer — host GUI, not ROS. Stop
isaac_pkgs_appwhile using it.
Only one SDK session should own the GPU: docker stop isaac_pkgs_app before starting a second example or Viewer (Existing container not stopped).
How an example maps to Isaac
Each v2 script is ros2 launch launch/aia_example_*.launch.py inside the container.
Example |
Isaac used |
What you prepare |
|---|---|---|
AprilTags |
(tag detector; no FP) |
Printed 36h11 tags |
Classification |
— (ARK classifier) |
ROI + labeled crops |
Detection |
RT-DETR |
COCO / auto-annotation |
Pose estimation |
RT-DETR + SAM + FoundationPose |
Detector + textured mesh |
Path planning |
cuMotion |
Collision YAML |
Dynamic picking |
All of the above |
Pose assets + collision file |
Launch files include Isaac launches such as isaac_ros_segment_anything_triton.launch.py and isaac_ros_foundationpose.launch.py. ARK nodes (rtdetr_node, pipeline_image_node) sit beside them.