Skip to content

Quick Start Guide

Platform Compatibility

This guide is designed for setting up Arducam cameras on NVIDIA Jetson Nano, Xavier NX, Orin Nano, and Orin NX.

For AGX Orin, please refer to the AGX Orin Quick Start Guide.


1. Hardware Connection

Please select your Jetson platform below to view the specific connection instructions and diagrams.

Step-by-step Connection:

  1. Locate the CSI port: Find the camera connector on the carrier board, opposite the GPIO pins.

  2. Open the connector: Gently pull up the plastic edges of the port to avoid damaging it.

  3. Insert the ribbon cable: Ensure the silver contacts are facing downward toward the carrier board (PCB). Push the cable firmly into the bottom of the connector without bending it.

  4. Lock it in place: Push the plastic connector down while holding the cable steady.

Connection Diagrams:

  • For Orin Nano:

    • 15pin to 22pin FPC Cable: Orin Nano 15-22pin
    • 22pin to 22pin FFC Cable: Orin Nano 22-22pin
  • For Orin NX:

    • 15pin to 22pin FPC Cable: Orin NX 15-22pin
    • 22pin to 22pin FFC Cable: Orin NX 22-22pin

Step-by-step Connection:

  1. Locate the CSI port: Find the camera connector on the carrier board, opposite the GPIO pins.

  2. Open the connector: Gently pull up the plastic edges of the port to avoid damaging it.

  3. Insert the ribbon cable: Ensure the silver contacts are facing inward toward the heatsink. Push it firmly into the bottom of the connector. Do not bend the flex cable.

  4. Lock it in place: Push the plastic connector down while holding the cable steady.

Reference Images:

1. Pull up the plastic edges


2. Ribbon Cable Contacts (15pin-15pin)


3. Silver Contacts facing inside to the heatsinks


4. Cable fully inserted into the bottom of the CSI connector


2. Software Setup

Crucial Prerequisites

To successfully install the camera driver on your Jetson, please ensure the following:

  1. Use the Official Developer Kit: You must use the official NVIDIA carrier board. Third-party carrier boards are not supported and will cause driver installation failures.
  2. Check JetPack Version: Ensure your current JetPack version is on our Supported JetPack List.

Driver Installation

Choose your camera model below. The installation script will automatically configure the driver for your specific sensor.

Plug and Play!

The IMX219 camera module is natively supported by the NVIDIA Jetson platform. You do not need to install any additional drivers. Simply connect the hardware and you are ready to go.

Run the following commands in your terminal to download and install the driver for the IMX477:

cd ~
wget https://github.com/ArduCAM/MIPI_Camera/releases/download/v0.0.3/install_full.sh
chmod +x install_full.sh
./install_full.sh -m imx477

Run the following commands in your terminal to download and install the driver for the IMX708:

cd ~
wget https://github.com/ArduCAM/MIPI_Camera/releases/download/v0.0.3/install_full.sh
chmod +x install_full.sh
./install_full.sh -m imx708

Run the following commands in your terminal to download and install the driver for the IMX519:

cd ~
wget https://github.com/ArduCAM/MIPI_Camera/releases/download/v0.0.3/install_full.sh
chmod +x install_full.sh
./install_full.sh -m imx519

Autofocus Feature

If you want to explore and test the autofocus capabilities of the IMX519, check out our Jetson IMX519 Focus Example repository.

Use GStreamer to Access the Camera

1. Check Supported Pixel Formats

Before running GStreamer pipelines, you can check the supported formats and resolutions of your camera using the following command:

v4l2-ctl --list-formats-ext

2. Camera Operations

Running via SSH

If you are accessing the Jetson board remotely via SSH, you must set the display environment variable before executing any visual commands:

export DISPLAY=:0

To preview the camera feed, you can use the following GStreamer command. Replace <width> and <height> with your desired resolution (e.g., 1920 and 1080 for 1080p):

SENSOR_ID=0
FRAMERATE=30 
gst-launch-1.0 nvarguscamerasrc sensor_id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=1920,height=1080,framerate=$FRAMERATE/1,format=NV12" ! nvvidconv flip-method=0 ! "video/x-raw,width=960,height=720" ! nvvidconv ! nvegltransform ! nveglglessink -e

Record video from the camera and save it locally.

1. General Case (Standard H.264 Pipeline)

For all L4T versions older than 39.2.0, or when your target resolution is less than 4096, use the standard H.264 pipeline below. You can simply modify the width, height, and framerate values to match your specific needs.

SENSOR_ID=0
FRAMERATE=30
gst-launch-1.0 -e nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=1920,height=1080,framerate=$FRAMERATE/1" ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=rpi_v3_imx477_cam$SENSOR_ID.mp4

2. Special Case (H.265 Pipeline)

For L4T 39.2.0+ and Resolution ≥ 4096

If you are using L4T 39.2.0 or newer AND your target resolution is 4096 or higher, you must use the H.265 pipeline to record video.

SENSOR_ID=0 
FRAMERATE=14
gst-launch-1.0 -e nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=4608,height=2592,framerate=$FRAMERATE/1" ! nvv4l2h265enc ! h265parse ! matroskamux ! filesink location=imx708_full.mkv

Set up a local video stream from the Jetson to another client device.

1. Start Server (On Jetson Board) Choose the appropriate command based on your L4T version to start the streaming server.

For Older L4T Versions (Before 39.2.0):

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=GRAY8,width=2560,height=800 ! nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! omxh264enc profile=high cabac-entropy-coding=true insert-sps-pps=true iframeinterval=60 ! 'video/x-h264, level=(string)4.2, stream-format=(string)byte-stream' ! tcpserversink host=0.0.0.0 port=5001 -v

For L4T 39.2.0 and Newer:

Resolution Matters

For L4T 39.2.0+, the pipeline changes depending on your target resolution.

  • Standard Resolution (< 4096):

    SENSOR_ID=0 
    FRAMERATE=55
    gst-launch-1.0 -e -v nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),format=(string)NV12,width=(int)2304,height=(int)1296,framerate=(fraction)$FRAMERATE/1" ! nvv4l2h264enc profile=4 disable-cabac=false insert-sps-pps=true iframeinterval=60 idrinterval=60 bitrate=8000000 ! h264parse config-interval=-1 ! "video/x-h264,stream-format=(string)byte-stream,alignment=(string)au" ! tcpserversink host=0.0.0.0 port=5001 sync=false sync-method=next-keyframe
    

  • High Resolution (≥ 4096):

    SENSOR_ID=0 
    FRAMERATE=14
    gst-launch-1.0 -e -v nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),format=(string)NV12,width=(int)4608,height=(int)2592,framerate=(fraction)$FRAMERATE/1" ! nvv4l2h265enc insert-sps-pps=true iframeinterval=60 idrinterval=60 bitrate=8000000 ! h265parse config-interval=-1 ! "video/x-h265,stream-format=(string)byte-stream,alignment=(string)au" ! tcpserversink host=0.0.0.0 port=5001 sync=false sync-method=next-keyframe
    


2. Start Client (On Receiving Device)

Conda Environment Conflict

If you are running a Conda virtual environment on your Client machine, please deactivate it first. Alternatively, install the required GStreamer library within Conda by running: conda install gst-libav -c conda-forge

Run one of the following commands to receive and display the video stream:

Option A: Standard display with FPS info

gst-launch-1.0 -v tcpclientsrc host=0.0.0.0 port=5001 ! decodebin ! fpsdisplaysink sync=false text-overlay=false

Option B: Auto video sink

Display Issues?

If the autovideosink fails to pop up a window, try replacing it with ximagesink, xvimagesink, glimagesink, or d3dvideosink (Windows).

gst-launch-1.0 -ve tcpclientsrc host=0.0.0.0 port=5001 ! decodebin ! autovideosink