- 1 The Jetson Family
- 2 JetPack
- 3 Setting Up SSH
- 4 SSH Login Over WiFi Connection
- 5 Preventing the Graphical User Interface From Being Loaded
- 6 Power Modes
- 7 Camera
- 8 Jetson Model Specifics
The Jetson Family
Nvidia's Jetson family of products are compact Tegra computers, which feature a large number of parallel computation units that are suitable for hardware-accelerated machine learning applications. The various models differ in their computational performance.
JetPack is Nvidia's name for a software bundle that contains development software and a modified version of Ubuntu Linux with a custom kernel for the Tegra hardware.
Setting Up SSH
The developer kit features HDMI and DisplayPort outputs for connecting to a display. In a robot, the control interface for the Jetson Nano will be a terminal session via SSH. To set up the SSH service on the Nano first make sure that the ssh package is installed:
sudo apt install ssh openssh-server
You can now start the SSH service like this:
sudo service ssh start
and stop it like this:
sudo service ssh stop
To make the SSH service start automatically at each boot, type
sudo systemctl enable ssh sudo systemctl enable ssh.service sudo systemctl start ssh
To prevent the system from starting the SSH service at each boot, type
sudo systemctl stop ssh sudo systemctl disable ssh sudo systemctl disable ssh.service
SSH Login Over WiFi Connection
The Jetson Nano and the Jetson Xavier developer kit boards come without WiFi connectivity. You can use a USB WiFi adaptor stick (e.g., Edimax ) to add WiFi connectivity. On Ubuntu, you will need to give permission to the system to make the WiFi connection available to all other users, which includes the SSH daemon, in order to enable remote logins over WiFi without requiring an active local login session (via connected peripherals or Ethernet connection).
To give permission,
- open the "System Settings" application,
- go to "Network",
- make sure "Wireless" is selected on the left panel,
- on the right side panel, next to the SSID of the WLAN server, click on the arrow icon,
- click on the "Settings..." button on the bottom right corner,
- in the window that opens, go to the tab "General",
- check the "All users may connect to this network" option
Preventing the Graphical User Interface From Being Loaded
Ubuntu uses systemd to control whether the graphical user interface is loaded and shown. To turn off the graphical desktop immediately enter
sudo systemctl isolate multi-user.target
To prevent the GUI from being loaded during the system startup, type
sudo systemctl set-default multi-user.target
To return to the graphical desktop, type
sudo systemctl isolate graphical.target
and to make the graphical desktop the default again, type
sudo systemctl set-default graphical.target
Use the nvpmodel command line tool for selecting or configuring the performance level of a Jetson device. You can query the current mode via
sudo nvpmodel -q --verbose
and switch between modes with the "-m" option like this
sudo nvpmodel -m 1
Create your custom power mode by editing "/etc/nvpmodel.conf"
sudo vim /etc/nvpmodel.conf
Cameras can be connected to Jetson Nano over USB or over the CSI connector. In case of a CSI camera, the image sensor must be a Sony IMX219, such as the Raspberry Pi Camera v2.
Use the Video For Linux utilityv4l2-ctl to list all video inputs that are available to the system and what type of image frames they provide.
sudo apt install v4l-utils v4l2-ctl --list-devices v4l2-ctl --list-formats
You can view the video stream from the CSI camera using GStreamer
gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=1920, height=1080, framerate=30/1' ! nvvidconv flip-method=0 ! nvegltransform ! nveglglessink -e
where nvarguscamerasrc is a Gstreamer plugin for Nvidia's proprietary Argus Camera API for Linux on Tegra devices, and nveglglessink is a better-performing OpenGL sink than glimagesink. Curiously, nvarguscamerasrc will show up in the GStreamer element list when searching for elements of type video but not when searching for source/video.
gst-inspect-1.0 -t video
Streaming Images Over The Network
To stream the camera images over the network via UDP, run the following script on the Jetson
GST_LAUNCH="gst-launch-1.0 -v" GST_DEBUG="--gst-debug=3" INPUT="nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=1280,height=720,framerate=30/1,format=(string)NV12' ! nvvidconv ! 'video/x-raw(memory:NVMM),format=(string)I420'" # Stream via RTP over UDP STREAM_OUTPUT="omxh264enc bitrate=8000000 ! 'video/x-h264, stream-format=byte-stream' ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink host=<host address> port=<port number>" # Show in local GL window VIEW_OUTPUT="nvegltransform ! nveglglessink -e" eval $GST_LAUNCH $INPUT ! $STREAM_OUTPUT
where <host address> and <port number> need to be replaced with the IP address and port of the receiving application.
Run the following script on the client machine to receive and display the video stream in a GStreamer pipeline.
UNPACK_RTP_H264_PAYLOAD="'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=H264, payload=96' ! rtph264depay ! avdec_h264" GST_UDPSRC="gst-launch-1.0 -v --gst-debug=3 udpsrc port=<port number>" VIDEO_SINK="videoconvert ! autovideosink" eval $GST_UDPSRC ! $UNPACK_RTP_H264_PAYLOAD ! $VIDEO_SINK
where you need to replace <port number> with the same port number used by the sender. Check the receiver's firewall settings to make sure the port is not blocked!
The order in which the Gstreamer pipelines are launched is irrelevant because of the connectionless data transmission via UDP. The receiver will be continuously waiting for incoming UDP packets, and the sender will be sending out packets even if there is no receiver.
- example GStreamer pipelines (RidgeRun)
Jetson Model Specifics
The Nano is the Jetson with the smallest footprint and lowest performance. It features 128 compute units based on the Maxwell architecture. The developer kit comes with host circuit board that provides connection ports like USB, Ethernet, HDMI and DisplayPort.
Power Supply and OS Installation
The Nano Developer Kit requires a power supply that can deliver 5 V and at least 2 A, either over the micro USB port, or via a standard 5.5/2.1mm barrel power jack, which requires bridging the J48 header pins with a jumper. When operated via the power jack, the micro USB port can be used to install the Nano operating system from an external computer. Otherwise, the OS image needs to be written to a micro-SD card that is inserted into the card slot of the developer kit.
Preconfigured Power Modes
- MAXN (mode #0): the default mode with maximum performance
- 5W (mode #1): low-power mode where only two out of four CPU core are working and the GPU clock frequency is constrained.