Nano forum links
nano-compatible-i2s-soundcard/
1. 如何下载镜像软件到Jetson Nano
Step1. 进入Recovery mode
- 找到J40和J48 跳PIN, 将J48跳线帽接起,再将J40 3和4Pin接起,这样Nano在上电后就会进入Force Recovery Mode
2.Jetson Nano核心板插入micro-SD卡,插入micro-USB线,再接上电源 - 运行sdkmanager 或 Linux_for_Tegra
Step2. Flash 全部镜像文件
sudo ./flash.sh jetson-nano-qspi-sd mmcblk0p1
或(已生成system.img)
sudo ./flash.sh -r jetson-nano-qspi-sd mmcblk0p1
Step3. Flash DTB文件
cp ~/jetson/nano/r32.out/kernel_out/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-a02.dtb kernel/dtb/
sudo ./flash.sh -r -k DTB jetson-nano-qspi-sd mmcblk0p1
Jetson Nano Flash u-boot.bin
sudo ./flash.sh -k LNX jetson-nano-qspi-sd mmcblk0p1
cp ~/jetson/nano/r32.out/kernel_out/arch/arm64/boot/Image kernel/
scp kernel/Image [email protected]:Downloads
Jetson Nano DTS 源码文件:(详细参考)
/nvidia_sdk/JetPack_4.2_Linux_P3448/Linux_for_Tegra/sources/hardware/nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a02.dts
2. 如下Samples 软件运行在32GB SanDisk UHS-I/U3 MicroSD Card上
CUDA 10(路径:/usr/local/cuda/,默认系统未加入到环境变量)
运行如下命令添加环境变量:
export PATH=${PATH}:/usr/local/cuda/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
Tegra Multimedia API :
tegra_multimedia_api(路径:/usr/src/nvidia/tegra_multimedia_api)
$sudo make -j4 (编译)
高频运行模式
$sudo nvpmodel -m 0 (5V 2A Mode)
$sudo nvpmodel -m 1 (5V 1A Mode)
$sudo tegrastats (CPU/GPU/EMC/Temperature Status)
安装的三方工具或软件列表
sudo apt-get update
sudo apt-get install samba
sudo apt-get install python3-pip
Tensorflow 1.13.1
pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.3 --user
安装过程若报错hdf5,请安装:
sudo apt-get install libhdf5-serial-dev
2. GPIO for Nano
Jetson.GPIO库 已经预装在Nano,无需再安装其他GPIO Python库,如果安装了其他GPIO库需先卸载方可以正常适用Jetson.GPIO, 预安装路径:
/opt/nvidia/jetson-gpio
运行Jetson.GPIO前需运行以下步骤,建立GPIO 运行环境
步骤一 - 设置运行权限Setup permissions
$sudo groupadd -f -r gpio
$sudo usermod -a -G gpio $USER
$sudo cp /opt/nvidia/jetson-gpio/etc/99-gpio.rules /etc/udev/rules.d/
$sudo udevadm control --reload-rules && sudo udevadm trigger
$sudo reboot now
步骤二 - Python 代码引用
添加如下Python 代码后,才可以调用 import the RPi.GPIO (或者 motorhat library等)
import sys
sys.path.append('/opt/nvidia/jetson-gpio/lib/python/')
sys.path.append('/opt/nvidia/jetson-gpio/lib/python/Jetson/GPIO')
import Jetson.GPIO
或
import RPi.GPIO
Jetson.GPIO doesn't support PWM.
However, the following I2C controlled board can generate PWM signals up to ~1.6kHz and should have Python libraries available.
https://www.adafruit.com/product/815
You could potentially connect this to whatever H-Bridge meets the power requirements of your application. The motor driver we used for JetBot actually combines this chip and multiple H-bridge on the same board.
https://www.adafruit.com/product/2927
3. MXNET for Nano
Python2.7
下载Wheel file here.
sudo apt-get install -y git build-essential libatlas-base-dev libopencv-dev graphviz python-pip
sudo pip install mxnet-1.4.0-cp27-cp27mu-linux_aarch64.whl
Python3.7
下载Wheel file here.
sudo apt-get install -y git build-essential libatlas-base-dev libopencv-dev graphviz python3-pip
sudo pip install mxnet-1.4.0-cp36-cp36m-linux_aarch64.whl
4. Nano 运行Darknet (本案例采用 Alexey_Darknet)
下载源码:
$git clone https://github.com/AlexeyAB/darknet.git
编译源码:
修改Makefile内容,添加GPU/CUDNN/OPENCV 支持:
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
$make -j4
Darknet运行时Nano 电流较大,实测5V 瞬间电流有达到2.5A,也就是说普通的5V-2A MicroUSB 供电是无法满足的,此时需要提供5V-2A AC Adapter或者5V-4.5A MicroUSB 供电,以满足正常运行Darknet Yolo。
下载对应weight就可以运行了, 比如自带的
compute_capability = 530, cudnn_half = 0
5. Nano 运行 Camera (案例采用 Raspberry Pi Camera v2)**
Nano 已支持Camera列表
- e-con Systems e-CAM30_CUNANO (3.4 MP MIPI Camera)
- Logitech C920 (USB webcam)
- Leopard Imaging LI-IMX219-MIPI-FF-NANO (IMX219 sensor)
- Raspberry Pi Camera v2 (IMX219 sensor)
- Stereolabs ZED (stereo camera)
相机安装后,以RAW 格式打开并预览:
$nvgstcapture-1.0 -m 2
附录 代码及终端信息
$nvgstcapture-1.0 -m 2
nvidia@tw-Nano:~$ nvgstcapture-1.0 -m 2
Encoder null, cannot set bitrate!
Encoder Profile = High
Supported resolutions in case of ARGUS Camera
(2) : 640x480
(3) : 1280x720
(4) : 1920x1080
(5) : 2104x1560
(6) : 2592x1944
(7) : 2616x1472
(8) : 3840x2160
(9) : 3896x2192
(10): 4208x3120
(11): 5632x3168
(12): 5632x4224
Runtime ARGUS Camera Commands:
Help : 'h'
Quit : 'q'
Set Capture Mode:
mo:
(1): image
(2): video
Get Capture Mode:
gmo
Set sensor orientation:
so:
(0): none
(1): Rotate counter-clockwise 90 degrees
(2): Rotate 180 degrees
(3): Rotate clockwise 90 degrees
Get sensor orientation:
gso
Set Whitebalance Mode:
wb:
(0): off
(1): auto
(2): incandescent
(3): fluorescent
(4): warm-fluorescent
(5): daylight
(6): cloudy-daylight
(7): twilight
(8): shade
(9): manual
Get Whitebalance Mode:
gwb
Set Saturation (0 to 2):
st: e.g., st:1.25
Get Saturation:
gst
Set Exposure Compensation (-2 to 2):
ec: e.g., ec:-2
Get Exposure Compensation:
gec
Set Auto Whitebalance Lock:
awbl: e.g., awbl:0
Get Auto Whitebalance Lock:
awbl
Set Auto Exposure Lock:
ael: e.g., ael:0
Get Auto Exposure Lock:
gael
Set TNR Mode:
tnrm: e.g., tnrm:1
(0): OFF
(1): FAST
(2): HIGH QUALITY
Get TNR Mode:
gtnrm
Set TNR Strength (-1 to 1):
tnrs: e.g., tnrs:0.5
Get TNR Strength:
gtnrs
Set EE Mode:
eem: e.g., eem:1
(0): OFF
(1): FAST
(2): HIGH QUALITY
Get EE Mode:
geem
Set EE Strength (-1 to 1):
ees: e.g., ees:0.5
Get EE Strength:
gees
Set Auto Exposure Anti-Banding (0 to 3):
aeab: e.g., aeab:2
(0): OFF
(1): MODE AUTO
(2): MODE 50HZ
(3): MODE 60HZ
Get Auto Exposure Anti-Banding:
gaeab
Set Gain Range:
gr: e.g., gr:1 16
Get Gain Range:
ggr
Set Exposure Time Range:
etr: e.g., etr:34000 35000
Get Exposure Time Range:
getr
Set ISP Digital Gain Range:
dgr: e.g., dgr:2 152
Get ISP Digital Gain Range:
gdgr
Capture: enter 'j' OR
followed by a timer (e.g., jx5000, capture after 5 seconds) OR
followed by multishot count (e.g., j:6, capture 6 images)
timer/multihot values are optional, capture defaults to single shot with timer=0s
Start Recording : enter '1'
Stop Recording : enter '0'
Video snapshot : enter '2' (While recording video)
Get Preview Resolution:
gpcr
Get Image Capture Resolution:
gicr
Get Video Capture Resolution:
gvcr
Runtime encoder configuration options:
Set Encoding Bit-rate(in bytes):
br: e.g., br:4000000
Get Encoding Bit-rate(in bytes):
gbr
Set Encoding Profile(only for H.264):
ep: e.g., ep:1
(0): Baseline
(1): Main
(2): High
Get Encoding Profile(only for H.264):
gep
Force IDR Frame on video Encoder(only for H.264):
Enter 'f'
bitrate = 4000000
Encoder Profile = High
Encoder control-rate = 1
Encoder EnableTwopassCBR = 0
** Message: 15:36:22.464: iterating capture loop ....
Framerate set to : 30 at NvxVideoEncoderSetParameterNvMMLiteOpen : Block : BlockType = 4
===== NVMEDIA: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 4
H264: Profile = 100, Level = 40
GST_ARGUS: Creating output stream
CONSUMER: Waiting until producer is connected...
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 3280 x 2464 FR = 21.000000 fps Duration = 47619048 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 3280 x 1848 FR = 28.000001 fps Duration = 35714284 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1920 x 1080 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1280 x 720 FR = 59.999999 fps Duration = 16666667 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1280 x 720 FR = 120.000005 fps Duration = 8333333 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: Running with following settings:
Camera index = 0
Camera mode = 4
Output Stream W = 1280 H = 720
seconds to Run = 0
Frame Rate = 120.000005
GST_ARGUS: PowerService: requested_clock_Hz=2016000
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.