Difference between revisions of "Jetson Nano"

From BATC Wiki
Jump to navigation Jump to search
(25 intermediate revisions by 6 users not shown)
Line 1: Line 1:
This page is a starting point for resources for using the Jetson Nano to drive a LimeSDR to transmit DATV.
+
This page is a starting point for resources for using the Jetson Nano (with ot without a Portsdown) to drive a LimeSDR to transmit DATV.
 +
 
 +
John G7JTT has written up his experiences on the BATC forum: https://forum.batc.org.uk/viewtopic.php?t=6402&p=21487#p21487
 +
 
 +
The control of the Jetson Nano from the Portsdown is an "Unsupported Feature".  This means that we will make best efforts to keep it working, but it is still somewhat experimental.
  
 
===G8GKQ's Installation Procedure===
 
===G8GKQ's Installation Procedure===
Line 5: Line 9:
 
To start with, you need a Jetson Nano, a 32 GB SD Card (Sandisk Ultra 10 recommended), a 4A 5V PSU with a 2.1mm power plug, a 0.1 inch jumper, an HDMI monitor, a USB Mouse and a USB keyboard.
 
To start with, you need a Jetson Nano, a 32 GB SD Card (Sandisk Ultra 10 recommended), a 4A 5V PSU with a 2.1mm power plug, a 0.1 inch jumper, an HDMI monitor, a USB Mouse and a USB keyboard.
  
Download the Jetson Nano disk image to a PC and unzip it.  Use Win32 Disk Imager or Etcher to write it to your SD Card.
+
Download the Jetson Nano disk image to a PC and unzip it.  Use Win32 Disk Imager or Etcher to write it to your SD Card.  These instructions are based on the jetson-nano-sd-r32.1-2019-03-18 image and will not work with later images.  An updated set of instructions is being prepared.
  
Fit the jumper link to the Nano PCB to select the use of the 2.1mm power socket, insert the SD Card, connect the monitor, keyboard and mouse.  Connect the Nano to your home network and then connect the power and turn it on.  Go through the NVIDIA start up routine so that you have a working Nano connected to your network.  I used the username "nano" and the password "jetson".  These are weak and obvious and should only be used on private networks, but make scripting easy.
+
Fit the jumper link to the Nano PCB at J48 to select the use of the 2.1mm power socket, insert the SD Card, connect the monitor, keyboard and mouse.  Connect the Nano to your home network and then connect the power and turn it on.  Go through the NVIDIA start up routine so that you have a working Nano connected to your network.  I used the username "nano" and the password "jetson".  These are weak and obvious and should only be used on private networks, but make scripting easy.
 +
 
 +
Note that the process may seem to freeze on "waiting for unattended-upgr to exit" for around 30 minutes, this is expected, the system is automatically updating software in the background.
  
 
Right-click on the desktop and open a terminal window.  Run the following commands.  You will need to enter the password occasionally.
 
Right-click on the desktop and open a terminal window.  Run the following commands.  You will need to enter the password occasionally.
Line 13: Line 19:
 
  sudo apt-get update
 
  sudo apt-get update
 
  sudo apt-get -y dist-upgrade
 
  sudo apt-get -y dist-upgrade
  sudo apt-get -y install git htop nano vlc
+
  sudo apt-get -y install git htop nano vlc v4l-utils
  
 
You are now ready to install the DATV software.
 
You are now ready to install the DATV software.
Line 25: Line 31:
 
  ./install.sh
 
  ./install.sh
  
===Current Limitations===
+
===Preparing the LKV373A HDMI Device===
  
The only input devices that work with this script are the LKV373A, and the Pi Cam when connected to the Jetson board.  The PiCam will not work without a USB microphobe dongle connected to the Jetson board- without this it never transmits a picture.
+
The LKV373A should be a transmitter (Sender) and of hardware version 3.0 as shown here:
  
The C920, although referenced in some of the code, does not work with this configuration.
+
[[File:LKV373A Topside.jpg|246px]] [[File:LKV373A Underside.jpg|200px]]
  
===Preparing the LKV373A HDMI Device===
+
This is probably the most difficult part of the software installation.  More details to follow in CQ-TV, but I upgraded the firmware (not encoder) to 20160427 using the instructions here: https://www.yodeck.com/docs/display/YO/Creating+a+Video-Wall+with+Yodeck#CreatingaVideo-WallwithYodeck-J.ConfiguringtheLKV373ASenderunit . These are at the end of the very long web page.  The firmware is here [[:File:IPTV_TX_PKG_v4_0_0_0_20160427.zip]]
 +
 
 +
Dave also set the unit to factory defaults, but did not change any other settings. The PuTTy settings to carry out the factory reset per Yodeck.com instructions with your own device IP address look like the following:-
 +
 
 +
[[File:PuTTy_for_HDMI_sender_reset.PNG|300px]] [[File:IPTV_server_web_page_at_completion.PNG|300px]]
 +
 
 +
After the firmware upgrade, the username and password for the LKV373A is admin/123456. Then the IP address webpage of the device will look like the top right image.
  
This is probably the most difficult part of the installation.  More details to follow, but I upgraded the firmware (not encoder) to 20160427 using the instructions here: https://www.yodeck.com/docs/display/YO/Creating+a+Video-Wall+with+Yodeck#CreatingaVideo-WallwithYodeck-J.ConfiguringtheLKV373ASenderunit .  I also set the unit to factory defaults, but did not change any other settings.
+
If you have issues with the firmware upgrade, recovery might be possible using the IPV Tools application found here: https://drive.google.com/drive/u/0/folders/0B3mWuDyxrXyKSTZZZlRESlpBZmM.
  
 
At various times during the LKV373A set-up, it had the following IP addresses: 192.168.1.238, 10.1.0.99, 10.1.2.99, and 169.254.113.227.
 
At various times during the LKV373A set-up, it had the following IP addresses: 192.168.1.238, 10.1.0.99, 10.1.2.99, and 169.254.113.227.
  
The address for the stream is almost always udp://@239.255.42.42:5004 (you can paste this into VLC on a PC and watch the stream).  Note that you cannot paste it into VLC on the Jetson Nano - for some reason it does not work.
+
The address for the stream is almost always udp://@239.255.42.42:5004 (you can paste this into VLC on a PC and watch the stream).  Note that you cannot view the stream using VLC on the Jetson Nano - for some reason it does not work.
  
 +
For more information about the LKV373A [https://www.youtube.com/watch?v=SAvGylthpkU try this video from OpenTechLabs on YouTube].
  
 
===Modifying the Scripts===
 
===Modifying the Scripts===
  
To transmit using the Nano, you will need to plug a LimeSDR Mini into it.  You will also need to modify the script ~/dvbsdr/scripts/jetson_nano.sh.  The working script is here:
+
To transmit using the Nano and this script, you will need to plug a LimeSDR Mini into it.  '''If you are NOT controlling it from the Portsdown, you will also need to modify the script ~/dvbsdr/scripts/jetson_nano.sh.'''  Note that if you are using Portsdown control, you can skip this step.   
 +
 
 +
The only input devices that work with this script are the LKV373A, and the Pi Cam when connected to the Jetson board.  The PiCam will not work without a USB microphone dongle connected to the Jetson board - without this it never transmits a picture.
 +
 
 +
The C920, although referenced in some of the code, does not work with this script.
 +
 
 +
The working script is here:
  
 
  #!/bin/bash
 
  #!/bin/bash
Line 130: Line 149:
 
  ;;
 
  ;;
 
  esac
 
  esac
 
 
 
   
 
   
  
 
Most of this is self-explanatory.  Note that "short frames" do not work.
 
Most of this is self-explanatory.  Note that "short frames" do not work.
  
===Transmitting===
+
===Transmitting using the Script===
  
 
  cd ~/dvbsdr/scripts
 
  cd ~/dvbsdr/scripts
Line 145: Line 162:
 
===Update - Control from Portsdown Touchscreen===
 
===Update - Control from Portsdown Touchscreen===
  
Version 201905070 of the Portsdown Software (currently only available as a Development Release) introduces Control of a Jetson Nano set up as above from the Portsdown touchscreen in H265 HDMI mode ONLY.
+
Version 201906060 of the Portsdown Software (currently only available as a Development Release) introduces experimental control of a Jetson Nano set up as above from the Portsdown touchscreen.
 +
 
 +
To set this up, load the development release, and then go to Menu 3, Jetson Config.
 +
On the Jetson Configuration Menu, you need to set up:
 +
* The Jetson username
 +
* The Jetson password
 +
* The Jetson root password
 +
* The Jetson IP Address
 +
* The LKV373A UDP broadcast address
 +
* The LKV373A UDP port
 +
 
 +
If you have used the setup instructions above, you should only need to change the Jetson IP Address.
 +
 
 +
Once the IP Address is correct, the Shutdown and Reboot buttons should turn from Grey to Green indicating that the Raspberry Pi can ping the Jetson.
 +
 
 +
After you have done this, use the touchscreen to select:
 +
* Output to: Jetson Lime
 +
* Encoder: H264 or H265
 +
* Source: HDMI, Pi Cam or C920 (note that the Pi Cam OR the C920 should be connected to the Jetson, not the RPi)
 +
 
 +
'''Note that only one of the C920 or Pi Cam should be connected at any time.  Connecting both at once disables both.'''
 +
 
 +
Then you can select other settings (Modulation, Frequency, Symbol Rate, FEC and Lime Gain) as required.  Testing has only been conducted over a narrow range of SRs and FECs.  500KS, FEC 1/2 is a good starting point.
 +
 
 +
When you shut down your Portsdown using the touchscreen ShutDown button, it will send a ShutDown signal to the Jetson as well, allowing a graceful shutdown of the Jetson without the use of a screen and keyboard.
 +
 
 +
The GPIO pin 40 on the Jetson can be used to key PAs as it is programmed to go high 15 seconds after TX selection and go low at the end of the transmission.  However, please see the warning about GPIO behaviour below.
 +
 
 +
===Portsdown Control Problems===
 +
 
 +
If you have trouble controlling the Nano from the Portsdown, try a manual ssh session from the Pi to the Jetson.  You may find that you have to update the trust certificate.  Thanks to G0MJW for suggesting this one!
 +
 
 +
== Hardware ==
 +
 
 +
=== Power Draw ===
 +
 
 +
Measured at a supply of 5.1V into the DC barrel jack connector. >5V measured on the GPIO header.
 +
 
 +
* CPU Frequencies at deafult: 0.3 - 0.6A depending on CPU & Network load
 +
* CPU Frequencies at max: 0.45 - 0.9A depending on CPU & Network load
 +
* CPU at max, LimeSDR Mini & C920 at 1MS 1080p H.265 DVB-S2 transmit: 1.8 - 1.9A
 +
 
 +
=== GPIO ===
 +
 
 +
The GPIO pinout of the Jetson Nano can be found here: https://www.jetsonhacks.com/nvidia-jetson-nano-j41-header-pinout/
 +
 
 +
Note that when not initialised in sysfs (ie. straight after power-on), the GPIO pins appear to be able to be latched up from their default 0V state to a 3.3V high, or an unstable ~1.4V state by simply touching a scope or multimeter probe to the pin. The exact characteristic of this behaviour isn't yet understood but it is worrying for PA PTT control and similar applications.
 +
 
 +
=== Fan ===
 +
 
 +
PWM fans are available however the use of a non-PWM 5V fan will cause the fan to simply run all the time (including when the Jetson is shutdown), removing the requirement for the fan to be manually started in software after boot. When using PWM, set a value where the fan runs slowly but reliably to minimise noise. There is some code here https://github.com/Pyrestone/jetson-fan-ctl or here https://github.com/hooperbill/fan-daemon for automatic fan speed control. Manually:
 +
 
 +
sudo sh -c 'echo XXX > /sys/devices/pwm-fan/target_pwm'  where XXX is a number between 0 and 255 setting the PWM speed.
  
To set this up, load the development release, and then edit the file
+
The holes in the heatsink can be tapped for M3 bolts, or can be drilled out. Note that the fins below the holes prevent more than ~3mm of the bolt from protruding below.
/home/pi/scripts/jetson_config.txt
 
with your settings:
 
jetsonip=192.168.2.113
 
jetsonuser=nano
 
jetsonpw=jetson
 
jetsonrootpw=jetson
 
lkvudp=239.255.42.42
 
lkvport=5004
 
tsoutip=192.168.2.177
 
tsoutport=10000
 
You will probably only need to change the 4 jetson lines.  After you have done this, you should select:
 
Output to: Jetson Lime
 
Encoder: H265
 
Source: HDMI
 
Then you can select other settings as required.  Testing has only been conducted over a narrow range of SRs and FECs.  500KS, FEC 1/2 is a good starting point.
 

Revision as of 17:01, 24 August 2020

This page is a starting point for resources for using the Jetson Nano (with ot without a Portsdown) to drive a LimeSDR to transmit DATV.

John G7JTT has written up his experiences on the BATC forum: https://forum.batc.org.uk/viewtopic.php?t=6402&p=21487#p21487

The control of the Jetson Nano from the Portsdown is an "Unsupported Feature". This means that we will make best efforts to keep it working, but it is still somewhat experimental.

G8GKQ's Installation Procedure

To start with, you need a Jetson Nano, a 32 GB SD Card (Sandisk Ultra 10 recommended), a 4A 5V PSU with a 2.1mm power plug, a 0.1 inch jumper, an HDMI monitor, a USB Mouse and a USB keyboard.

Download the Jetson Nano disk image to a PC and unzip it. Use Win32 Disk Imager or Etcher to write it to your SD Card. These instructions are based on the jetson-nano-sd-r32.1-2019-03-18 image and will not work with later images. An updated set of instructions is being prepared.

Fit the jumper link to the Nano PCB at J48 to select the use of the 2.1mm power socket, insert the SD Card, connect the monitor, keyboard and mouse. Connect the Nano to your home network and then connect the power and turn it on. Go through the NVIDIA start up routine so that you have a working Nano connected to your network. I used the username "nano" and the password "jetson". These are weak and obvious and should only be used on private networks, but make scripting easy.

Note that the process may seem to freeze on "waiting for unattended-upgr to exit" for around 30 minutes, this is expected, the system is automatically updating software in the background.

Right-click on the desktop and open a terminal window. Run the following commands. You will need to enter the password occasionally.

sudo apt-get update
sudo apt-get -y dist-upgrade
sudo apt-get -y install git htop nano vlc v4l-utils

You are now ready to install the DATV software.

Installing DATV Software

Download and install the software from F5OEO's repository:

git clone https://github.com/F5OEO/dvbsdr
cd dvbsdr
./install.sh

Preparing the LKV373A HDMI Device

The LKV373A should be a transmitter (Sender) and of hardware version 3.0 as shown here:

LKV373A Topside.jpg LKV373A Underside.jpg

This is probably the most difficult part of the software installation. More details to follow in CQ-TV, but I upgraded the firmware (not encoder) to 20160427 using the instructions here: https://www.yodeck.com/docs/display/YO/Creating+a+Video-Wall+with+Yodeck#CreatingaVideo-WallwithYodeck-J.ConfiguringtheLKV373ASenderunit . These are at the end of the very long web page. The firmware is here File:IPTV_TX_PKG_v4_0_0_0_20160427.zip

Dave also set the unit to factory defaults, but did not change any other settings. The PuTTy settings to carry out the factory reset per Yodeck.com instructions with your own device IP address look like the following:-

PuTTy for HDMI sender reset.PNG IPTV server web page at completion.PNG

After the firmware upgrade, the username and password for the LKV373A is admin/123456. Then the IP address webpage of the device will look like the top right image.

If you have issues with the firmware upgrade, recovery might be possible using the IPV Tools application found here: https://drive.google.com/drive/u/0/folders/0B3mWuDyxrXyKSTZZZlRESlpBZmM.

At various times during the LKV373A set-up, it had the following IP addresses: 192.168.1.238, 10.1.0.99, 10.1.2.99, and 169.254.113.227.

The address for the stream is almost always udp://@239.255.42.42:5004 (you can paste this into VLC on a PC and watch the stream). Note that you cannot view the stream using VLC on the Jetson Nano - for some reason it does not work.

For more information about the LKV373A try this video from OpenTechLabs on YouTube.

Modifying the Scripts

To transmit using the Nano and this script, you will need to plug a LimeSDR Mini into it. If you are NOT controlling it from the Portsdown, you will also need to modify the script ~/dvbsdr/scripts/jetson_nano.sh. Note that if you are using Portsdown control, you can skip this step.

The only input devices that work with this script are the LKV373A, and the Pi Cam when connected to the Jetson board. The PiCam will not work without a USB microphone dongle connected to the Jetson board - without this it never transmits a picture.

The C920, although referenced in some of the code, does not work with this script.

The working script is here:

#!/bin/bash

# *********************************************************************
# ************** ENCODE AND MODULATE FOR JETSON NANO ******************
# ************** (c)F5OEO April 2019                 ******************
# *********************************************************************

CALL=G8GKQ
# ------- MODULATION PARAMETERS --------
# 1/4,1/3,2/5,1/2,3/5,2/3,3/4,4/5,5/6,8/9,9/10 for DVB-S2 QPSK.
# 3/5,2/3,3/4,5/6,8/9,9/10 for DVB-S2 8PSK
source ./include/modulateparam.sh
FREQ=2409.25
SYMBOLRATE=500
FECNUM=1
FECDEN=2
#DVBS,DVBS2
MODE=DVBS2
#QPSK,8PSK,16APSK,32APSK
CONSTELLATION=QPSK
GAIN=0.8
# $LONG_FRAME,$SHORT_FRAME
TYPE_FRAME=$LONG_FRAME
# $WITH_PILOTS,WITHOUT_PILOTS
PILOTS=$WITHOUT_PILOTS
# Upsample 1,2 or 4 : 4 delivers the best quality but should not be up to 500KS
UPSAMPLE=2

# ------- ENCODER PARAMETERS --------

VIDEO_RESX=1280
# 16:9 or 4:3
RATIO=16:9
case "$RATIO" in
"16:9")
let VIDEO_RESY=VIDEO_RESX*9/16 ;;
"4:3")
let VIDEO_RESY=VIDEO_RESX*3/4 ;;
esac

#Uncomment if don't want to use ratio calculation
#VIDEO_RESY=1080

#Only 25 is working well with audio
VIDEO_FPS=25
#Gop Size 1..400 (in frame) 
VIDEO_GOP=100
PCR_PTS=200000
#VIDEO INPUT

#Could be  VIDEOSOURCE_PICAMERA, VIDEOSOURCE_USB_CAM , VIDEOSOURCE_IP
VIDEOSOURCE=VIDEOSOURCE_IP
#VIDEOSOURCE=VIDEOSOURCE_PICAMERA
VIDEOSOURCE_IP_ADRESS=239.255.42.42
VIDEOSOURCE_IP_PORT=5004

# H264 or H265
CODEC=H265

#AUDIO INPUT

# NO_AUDIO,USB_AUDIO,FILE_WAV,BEEP
AUDIOSOURCE=USB_AUDIO
AUDIO_BITRATE=20000

# Bitrate
source ./include/getbitrate.sh
let TS_AUDIO_BITRATE=AUDIO_BITRATE*14/10
let VIDEOBITRATE=(BITRATE_TS-12000-TS_AUDIO_BITRATE)*650/1000
let VIDEOPEAKBITRATE=VIDEOBITRATE*110/100
#OUTPUT TYPE LIME or IP
OUTPUT=LIME
OUTPUT_NETWORK="230.0.0.10:10000"
# Launch processes
echo 
echo VideoBitrate = $VIDEOBITRATE
echo VideoPeakBitrate = $VIDEOPEAKBITRATE

case "$OUTPUT" in
"LIME")
source ./include/nanoencode.sh | source ./include/limerf.sh
;;
"IP")
source ./include/nanoencode.sh
;;
esac

Most of this is self-explanatory. Note that "short frames" do not work.

Transmitting using the Script

cd ~/dvbsdr/scripts
./jetson_nano.sh

To stop transmitting, simply press ctrl-c.

Update - Control from Portsdown Touchscreen

Version 201906060 of the Portsdown Software (currently only available as a Development Release) introduces experimental control of a Jetson Nano set up as above from the Portsdown touchscreen.

To set this up, load the development release, and then go to Menu 3, Jetson Config. On the Jetson Configuration Menu, you need to set up:

  • The Jetson username
  • The Jetson password
  • The Jetson root password
  • The Jetson IP Address
  • The LKV373A UDP broadcast address
  • The LKV373A UDP port

If you have used the setup instructions above, you should only need to change the Jetson IP Address.

Once the IP Address is correct, the Shutdown and Reboot buttons should turn from Grey to Green indicating that the Raspberry Pi can ping the Jetson.

After you have done this, use the touchscreen to select:

  • Output to: Jetson Lime
  • Encoder: H264 or H265
  • Source: HDMI, Pi Cam or C920 (note that the Pi Cam OR the C920 should be connected to the Jetson, not the RPi)

Note that only one of the C920 or Pi Cam should be connected at any time. Connecting both at once disables both.

Then you can select other settings (Modulation, Frequency, Symbol Rate, FEC and Lime Gain) as required. Testing has only been conducted over a narrow range of SRs and FECs. 500KS, FEC 1/2 is a good starting point.

When you shut down your Portsdown using the touchscreen ShutDown button, it will send a ShutDown signal to the Jetson as well, allowing a graceful shutdown of the Jetson without the use of a screen and keyboard.

The GPIO pin 40 on the Jetson can be used to key PAs as it is programmed to go high 15 seconds after TX selection and go low at the end of the transmission. However, please see the warning about GPIO behaviour below.

Portsdown Control Problems

If you have trouble controlling the Nano from the Portsdown, try a manual ssh session from the Pi to the Jetson. You may find that you have to update the trust certificate. Thanks to G0MJW for suggesting this one!

Hardware

Power Draw

Measured at a supply of 5.1V into the DC barrel jack connector. >5V measured on the GPIO header.

  • CPU Frequencies at deafult: 0.3 - 0.6A depending on CPU & Network load
  • CPU Frequencies at max: 0.45 - 0.9A depending on CPU & Network load
  • CPU at max, LimeSDR Mini & C920 at 1MS 1080p H.265 DVB-S2 transmit: 1.8 - 1.9A

GPIO

The GPIO pinout of the Jetson Nano can be found here: https://www.jetsonhacks.com/nvidia-jetson-nano-j41-header-pinout/

Note that when not initialised in sysfs (ie. straight after power-on), the GPIO pins appear to be able to be latched up from their default 0V state to a 3.3V high, or an unstable ~1.4V state by simply touching a scope or multimeter probe to the pin. The exact characteristic of this behaviour isn't yet understood but it is worrying for PA PTT control and similar applications.

Fan

PWM fans are available however the use of a non-PWM 5V fan will cause the fan to simply run all the time (including when the Jetson is shutdown), removing the requirement for the fan to be manually started in software after boot. When using PWM, set a value where the fan runs slowly but reliably to minimise noise. There is some code here https://github.com/Pyrestone/jetson-fan-ctl or here https://github.com/hooperbill/fan-daemon for automatic fan speed control. Manually:

sudo sh -c 'echo XXX > /sys/devices/pwm-fan/target_pwm' where XXX is a number between 0 and 255 setting the PWM speed.

The holes in the heatsink can be tapped for M3 bolts, or can be drilled out. Note that the fins below the holes prevent more than ~3mm of the bolt from protruding below.