Nvidia Jetson: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
=== The Jetson Family === | |||
Nvidia's Jetson family of products are compact [https://www.nvidia.com/object/tegra.html 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. | |||
<br /> | <br /> | ||
<br /> | <br /> | ||
=== JetPack === | === JetPack === | ||
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. | 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. | ||
<br /> | <br /> | ||
* [https://developer.nvidia.com/embedded/jetpack JetPack download page] | |||
<br /> | <br /> | ||
=== 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: | 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: | ||
<pre class="terminal"> | <pre class="terminal"> | ||
Line 41: | Line 36: | ||
</pre> | </pre> | ||
<br /> | <br /> | ||
=== SSH Login Over WiFi Connection === | |||
The Jetson Nano | 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). | ||
<br /> | <br /> | ||
To give permission, | To give permission, | ||
Line 53: | Line 48: | ||
* check the "All users may connect to this network" option | * check the "All users may connect to this network" option | ||
<br /> | <br /> | ||
=== 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 | Ubuntu uses systemd to control whether the graphical user interface is loaded and shown. To turn off the graphical desktop immediately enter | ||
<pre class="terminal"> | <pre class="terminal"> | ||
Line 72: | Line 67: | ||
</pre> | </pre> | ||
<br /> | <br /> | ||
=== Power Modes === | |||
Use the | Use the '''nvpmodel''' command line tool for selecting or configuring the performance level of a Jetson device. | ||
You can query the current mode via | You can query the current mode via | ||
<pre class="terminal"> | <pre class="terminal"> | ||
Line 94: | Line 83: | ||
</pre> | </pre> | ||
<br /> | <br /> | ||
=== Camera === | |||
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. | 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 [https://www.raspberrypi.org/products/camera-module-v2/ Raspberry Pi Camera v2]. | ||
<br /> | <br /> | ||
Use the ''Video For Linux'' utility''v4l2-ctl'' to list all video inputs that are available to the system and what type of image frames they provide. | Use the ''Video For Linux'' utility''v4l2-ctl'' to list all video inputs that are available to the system and what type of image frames they provide. | ||
Line 103: | Line 92: | ||
v4l2-ctl --list-formats | v4l2-ctl --list-formats | ||
</pre> | </pre> | ||
<br /> | |||
You can view the video stream from the CSI camera using [[GStreamer]] | |||
<pre class="terminal"> | |||
gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=1920, height=1080, framerate=30/1' ! nvvidconv flip-method=0 ! nvegltransform ! nveglglessink -e | |||
</pre> | |||
where ''nvarguscamerasrc'' is a Gstreamer plugin for Nvidia's proprietary [https://docs.nvidia.com/jetson/l4t-multimedia/group__LibargusAPI.html 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''. | |||
<pre class="terminal"> | |||
gst-inspect-1.0 -t video | |||
</pre> | |||
<br /> | |||
==== Streaming Images Over The Network ==== | |||
To stream the camera images over the network via UDP, run the following script on the Jetson | |||
<pre class="code"> | |||
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 | ||
</pre> | |||
where ''<host address>'' and ''<port number>'' need to be replaced with the IP address and port of the receiving application. | |||
<br/> | |||
<br/> | |||
Run the following script on the client machine to receive and display the video stream in a GStreamer pipeline. | |||
<pre class="code"> | |||
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 | |||
</pre> | |||
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! | |||
<br /> | |||
<br /> | |||
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. | |||
<br /> | |||
<br /> | |||
=== Jetson Model Specifics === | |||
==== Jetson Nano ==== | |||
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. | |||
* [https://developer.download.nvidia.com/assets/embedded/secure/jetson/Nano/docs/Jetson_Nano_Developer_Kit_User_Guide.pdf Jetson Nano Developer Kit User Guide] | * [https://developer.download.nvidia.com/assets/embedded/secure/jetson/Nano/docs/Jetson_Nano_Developer_Kit_User_Guide.pdf Jetson Nano Developer Kit User Guide] | ||
<br /> | |||
===== 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. | |||
<br /> | |||
<br /> | |||
===== 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. | |||
<br/> |
Revision as of 2019-04-13T08:24:02
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
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
Power Modes
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
Camera
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.
Jetson Model Specifics
Jetson Nano
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.