极客秀
搜索

极客小电脑Jetson Nano评测

大家好, Jetson Nano是英伟达发布的一款小型人工智能(AI)计算主板 ,最大亮点是带
有嵌入式领域相对高端的GPU,并且提供AI和计算机视觉(Computer Vision)的应用程序编程接口(API),
可以直接用于注重低功耗的AI应用场景。
Jetson Nano自发布以来 ,在开源硬件圈子里的热度一向很高。当然,网上也已经有不少关于Jetson
Nano的微博文章,然而大伙儿对那些营销号的文章不太感冒。毕竟,那些吸睛的夸张文字看多了也会腻。近期Nvidia官方代理商Seeed
Studio请芯板坊小编做一期客观的评测,于是便有了今天这篇文章。
作为一个服务平台,芯板坊的评测相对来说会比较实事求是、视角也更客观 ,对各个产品也更公平,这也是Seeed Studio选择芯板坊的原因。
本篇评测除了实事求是地展示Jetson Nano的各项性能特点,还将从入门指导角度尽力地为大家排除各种使用障碍。
1、硬件概况
GPU | NVIDIA Maxwell™ 架构 , 128 个 NVIDIA CUDA® 核心
—|—
CPU | 四核 ARM® Cortex®-A57 处理器
内存 | 4 GB 64 位 LPDDR4
存储 | Micro SD 卡卡槽( 小编推荐 3 2 GB 以上 SD 卡)
视频编码 | 一路 4K@ 30 、或 4 路 1 080 p@ 30 、或两路 1 080 p@ 60
视频解码 | 一路 4K@ 60 、或两路 4K@ 30 、或 8 路 1 080 p@ 30
摄像头 | 2 x MIPI CSI – 2 或 USB 摄像头
网络 | 千兆以太网
显示器 | HDMI 2.0 或 DP1.2
高速接口 | 1 x PCI e 、 4 x USB 3.0
I/O | UART 、 2x SPI 、 3 x I2C 、 I2S 、 GPIO s
Jetson Nano开发套件由核心板和载板组成,它们通过SO-DIMM接口连接,这种接口常见于笔记本内存。

包装内包含一个Jetson
Nano模块带散热片、载板(载板与模块已组装)、一张快速入门说明卡。附送的散热片推荐在10W热功耗下工作,如果需要更高性能还要加风扇。板子上有4Pin风扇接口,支持PWM调速。
套件分A02和B01两个版本,这3个字符位于产品编号的最后3位。我们拿到的是B01版本。开发套件编号见包装盒,载板的部件编号印刷在载板背面。

小编今天拿到的Jetson Nano开发套件来自Seeed Studio,拿到的是正常的国行版本(并且是Made in
China),载板背面与包装盒有一致的序列号。本次测试的样品与大家从正常渠道购买到的商品一致,非测试版、流出版或工包产品。

2、供电与系统启动指导
首先,套件里没有包含显示器、TF卡和电源等部件,这些需要用户自己准备或购买。小编是特邀评测,Seeed Studio为了小编测试方便,在Jetson
Nano开发套件外,额外地提供了TF卡和电源。
TF卡需要16G或更高容量且速度UHS-1以上。小编觉得16GB做人工智能应用时存放图片视频素材有些不够用,推荐闪迪的32GB以上TF卡(比如64GB),技术指标上符合要求。电源可以通过DC接口或MicroUSB接口输入。笔者认为,DC接口供电是比较推荐的,连接稳定,接口电阻小,且成本低。市场上很容易买到5V2A的DC电源,即使更高规格的5V4A也不贵。
其中MicroUSB比较方便,可以使用手机充电器供电,要求是5V2A以上,这个前几年的安卓手机充电器就能胜任。只是要注意MicroUSB线要用大电流的。笔者测试过Firefly给arduino单片机配的1A线材,在Jetson
Nano上能启动但系统会提示输入电压低,所以还是建议使用大电流的线材。
另外,USB电源要考虑到大电流下会有压降,建议使用大品牌的正品充电器,2A输出时的实际电压必须超过4.75V。如果怕压降导致电压过低,你可以使用DELL、Lenovo的5.25V的平板电脑充电器。或者直接购买Seeed
Studio提供的规格5V3A的电源适配器。
板子上有个供电选择跳帽,编号J48。当通过Micro-USB供电时,需要保证J48上的跳帽断开,Micro-
USB电源导通,DC电源切断;当通过DC接口供电时,需要保证跳帽接上,Micro-
USB电源切断,DC电源导通。照片中J48接口上的跳帽是断开状态的,注意细节!!!
题外话,小编收到过很多用户在使用中遇到的问题,有的用户反馈板子收到后点不亮,但是已经使用了正品手机充电器,可以排除供电不足。小编详细询问使用场景后,发现都是虚惊一场,只是J48跳帽的设置问题。这里小编再次强调一下,英伟达的Jetson官网上的用户手册(NV_Jetson_Nano_Developer_Kit_User_Guide.pdf),大家一定要仔细阅读,遇到英文读不懂可以问SeeedStudio的在线技术客服。
有的卖家不懂产品,也没有技术支持,一旦你说板子点不亮,板子就返厂了,然后两个月后检测没有故障又被退回来,这样就白白浪费你运费和时间了。只有靠谱的卖家可以用丰富的项目经验帮你规避这些不必要的挫折。
Jetson
Nano的显示器支持HDMI接口和DP接口。目前市场上HDMI显示器已经比较普及,如果你的显示器只支持VGA的话,得考虑新买一台显示器。如果使用电视机做显示器用,现在市场上主流品牌的液晶电视都同时支持HDMI和DP。

摄像头模块可以使用JetsonNano推荐的LI-IMX219-MIPI-FF-NANO摄像头模块;也支持第三方的树莓派的Pi Camera
V2模块。如果你已经有树莓派V2摄像头,可以直接使用。摄像头接到下图CAM0和CAM1接口。

初次开机使用的步骤比较简单,1、给TF烧写原厂镜像;2、把TF卡插入Jetson Nano;3、接上鼠标键盘显示器和网线;4、从Micro-
USB接口给板子供电;然后就自动启动了。
烧写软件可以用balenaEtcher或Win32 Disk Imager

又一个题外话,小编还收到有用户反馈说闪迪TF卡“无法识别”的情况。这时候,很大概率,卡是正常的。往往地,你遇到的实际问题,准确的说,是“卡未挂载”,而不是“卡无法识别”。如果你的是windows系统电脑,请点开磁盘管理,你应该能看到这个TF卡,且卡内有分区。无法挂载的原理其实很简单,因为windows不认识Linux的ext4分区,实际上卡是正常的。再次提醒,如果遇到问题一定要来问芯板坊小编,以免盲目寄回厂家最后检查结果产品正常而又浪费运费。
接线可以参考下面这个链接里的动图
https://developer.nvidia.com/sites/default/files/akamai/embedded/images/jetsonNano/gettingStarted/Jetbot_animation_500x282_2.gif
首次启动会让你输入初始配置信息,主要是键盘布局、用户名、密码,这个跟正常的桌面Ubuntu系统的用法一样。
考虑到目前的手机已经普遍把USB接口升级到Type-C,如果你手头实在没有Micro-
USB供电线,可以考虑一下通过DC接口供电。DC接口的尺寸是外5.5,内2.1;你可以使用原厂DC电源,或兼容的国产的内2.1的弹簧口的DC接口电源。
板子上有一组40Pin排针接口,40Pin排针接口包含两个3.3V输出引脚和两个5V引脚。5V引脚可以作为5V输出,也可以作为板子的5V电源输入。如果你有母头杜邦线,可以自己DIY电源线从这个接口供电,每个5Vpin支持最大2.5A输入,使用两组就可以达到5V5A的大功率输入,这在带大量负载时候会有优势,推荐骨灰级老鸟通过这个方案供电(新手不要自己DIY供电以免电压参数不对或接错线而造成损坏)。芯板坊的淘宝小二给小白们准备了兼容的国产5V4A以上的DC电源,内2.5mm弹簧口可以兼容2.1接口,大厂出品质量可靠又价格低廉。
3、远程操作方法
在Linux系统下,最常用的远程命令行服务是Open SSH,Jetson
Nano的官方系统已经开启了SSH服务,可以在局域网内用putty软件登录。如果你想往Jetson
Nano拷贝文件或修改文件,可以用winscp软件。如果你的上级路由器开启了DHCP服务,并把Jetson
Nano的网口接到了路由器LAN口,路由器会自动为Jetson分配IP地址。
默认只能普通用户登录,你可以登录后设置root密码。命令:
sudo passwd

其中,输入密码过程中是没有显示的,这是正常的,为了防止密码被窥探。
ssh服务配置文件在/etc/ssh/sshd_config
这个文件属于root用户,普通用户想修改,先要设置读写权限,命令:
chmod 666 /etc/ssh/sshd_config
下面,举个例子,比如我们想允许root用户远程ssh登录,可以用普通用户修改/etc/ssh/sshd_config文件内的PermitRootLogin的值为yes

要设置生效,需要重启ssh服务,命令:
sudo service ssh restart

然后可以试一下用root用户登录,应该没问题了。

开启远程桌面的vnc server软件有很多,比如tiger
vnc、vnc4server、x11vnc等。如果想要远程观看图形应用,建议用x11vnc。x11vnc直接传输本地桌面图像,并且能正常显示OpenGL应用。安装并启动vnc服务的命令如下:
sudo apt-get install x11vnc
x11vnc -storepasswd
x11vnc
4、增加虚拟内存(交换空间)
合理设置Swap(虚拟内存),可以提高系统性能。非活动进程的内存占用可以放入虚拟内存,这样可以腾出更多物理内存空间。虚拟内存可以通过配置Swap分区或Swap文件为内存提供交换空间。其中Swap文件的方案,配置时无需重新修改分区,性能上也与Swap分区差不多,实际应用时更加灵活。
以新建一个2GB虚拟内存为例。首先,新建一个2GB文件到方便的目录。
sudo dd if=/dev/zero of=/mnt/2GB.swap bs=1024 count=2097148

格式化这个文件
sudo mkswap /mnt/2GB.swap
然后,把格式化好的文件以Swap文件的形式加入系统
sudo swapon /mnt/2GB.swap
默认文件权限是644,会有警告。原因是有可能因其他用户程序误读写了交换分区文件而出错。这个问题不大。如果怕出错可以用chmod命令设置成600权限。以上操作截图如下:

以上操作对虚拟内存的设置会在重启后失效。众所周知,/etc/fstab文件设置了文件系统的挂载,如果希望这个swap文件被自动挂载,可以把下面命令添加到fstab文件
/mnt/2GB.swap none swap sw00

交换空间的使用策略配置文件在/etc/sysctl.conf
如果希望系统尽量使用物理内存,少用虚拟内存,那么把vm.swappiness=10这句话加入上面这个文件。如果希望系统尽可能地多使用虚拟内存,可以vm.swappiness=100。如果你只是希望在物理内存耗尽时才使用交换空间,那么请设置vm.swappiness=0。
查看系统当前的交换空间的命令
sudo swapon -s

5、增加虚拟内存(交换空间)
5.1 JetPack
如果使用的是官方系统镜像,已经集成了基本的开发环境JetPack。官方镜像是基于linux发行版Ubuntu Bionic做的,即Ubuntu 18.04
LTS。Ubuntu安装软件的命令是apt。ARM64和ARMhf架构使用的是Ubuntu Ports源,正好国内有Ubuntu-
ports的源且速度较快,小编推荐使用中科大的源替换原apt配置文档里的ubuntu海外源。
划重点,替换源地址前记得先以默认源把apt-transport-
https包装上解决现有鸡还是先有蛋的问题(别改完https源以后发现无法下载)。由于国内宽带运营商普遍使用缓存劫持技术来提高网络性能,这个技术是把双刃剑,有可能导致你通过HTTP站点更新软件时下载到缓存服务器上较旧的文件从而引起软件依赖关系发生严重错误,小编强烈建议使用HTTPS以避免缓存劫持。
sudo apt-get update
sudo apt-get install apt-transport-https
然后编辑/etc/apt/sources.list文件,把软件源地址修改为中科大Ubuntu
Ports源地址https://mirrors.ustc.edu.cn/ubuntu-ports/
下图中划红线位置标记了apt安装源的设置细节:

官方镜像集成的JetPack开发环境已经包含了TensorRT、cuDNN、CUDA、多媒体API库、OpenCV等库,它们的例程的路径在/usr/src目录。JetPack开发环境还集成一些必要的开发与调试工具,如支持GPU加速应用的Nsight
Eclips Edition、用于应用调试的CUDA-GDB等;以及性能分析工具如Nsight Systems、nvprof、Visual
Profiler等。
5.2 安装pip3和TensoFlow(可选)
前面提到,JetPack已经包含了基本的开发环境,以及TensorRT等库。
Python3已经安装,pip等都可以很方便地安装。
apt-get install python3-pip python3-dev
JetPack没有包含hdf5等常用软件包,可以用下面命令装上(下面这些都是TensorFlow的依赖包)
apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip
libjpeg8-dev liblapack-dev libblas-dev gfortran
当用pip install安装软件时,如果网速慢,可以加上-i选项,使用国内阿里云的pip源地址,这样速度可以快一点。以安装scrapy为例,命令:
python3 -m pip install scrapy -i https://mirrors.aliyun.com/pypi/simple/
升级pip3: sudo pip3 install -U pip testresources setuptools
查看pip版本:

如果pip3 install命令总是失败,并提示Requirement already
satisfied,这时候需要指定安装路径,路径参考pip版本命令的输出路径。
以我们的JetsonNano为例,可以在pip3 install命令加上指定安装路径的参数:
–target=/usr/local/lib/python3.6/dist-packages
举个例子,安装numpy可以用下面命令:
pip3 install numpy –target=/usr/lib/python3/dist-packages
JetsonNano安装TensorFlow还需要一系列python依赖包,可以一个命令一起安装(如果安装失败,就分解一下,一个个装)
pip3 install -U numpy==1.16.1 future==0.17.1 mock==3.0.5 h5py==2.9.0
keras_preprocessing==1.0.5 keras_applications==1.0.8 gast==0.2.2 futures
protobuf pybind11
其中,如果提示cryptography安装失败,可以换个方法,用apt安装
apt-get install python3-cryptography
最后,去Nvidia官网下载 tensorflow_gpu-1.14.0+nv19.10-cp36-cp36m-linux_aarch64.whl
文件。然后安装,命令:
pip3 install tensorflow_gpu-1.14.0+nv19.10-cp36-cp36m-linux_aarch64.whl
小编也发现安装TensorFlow过程挫折很多。相对来说,后面那个jetson-inference库更容易安装。
TensorFlow安装的具体教程见:
https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-
platform/index.html
6、快速入门AI
英伟达厂家提供了一些方便大家入门的DEMO,小编花了大约两小时时间做了一下初步的测试,试验了Hello
AI项目(github地址见后文)的几个DEMO,主要是推理运算,所以速度比较快。这些DEMO包含了图像分类(ImageNet)、目标检测(DetecNet)、图像语义分割(SegNet),以及摄像头实时处理例程(Live
Camera)。
6.1 Jetson-Inference库下载与编译
先从ubuntu源里下载安装编译环境。并把git装上,一会儿从github上下载源码要用到。例程是通过Python的扩展模块实现的,其中C++项目使用了Python
C API提供绑定到本机C++代码。Ubuntu只预装了Python2.7的libpython-dev和python-
numpy包。而Python3.6的libpython-dev和numpy包是使用Python C API构建绑定所必不可少的,因此需要安装上。
安装命令如下:
sudo apt-get install git cmake libpython3-dev python3-numpy
使用git命令把源码下载到本地,git命令里可以用recursive选项把子模块一并下载
git clone –recursive https://github.com/dusty-nv/jetson-inference
上面这步如果失败了,一般是github站点限速导致的。这里介绍个国内的“github”(其实也不能叫“国内的github”),应该叫码云(不是马云),站点名为gitee。建议先fork到你的仓库后转gitee,然后去gitee站点clone项目,然后再git
submodule update –init
如果接下来还继续失败,说明你与github的网速实在是太慢了。如果下一级文件夹依赖了其它项目,在fork时并不会自动把文件夹里的内容一并复制过去。你只能手动把各个代@符号的文件夹点开,找到github上的路径,然后一个个都转到gitee去再下载。
配置CMake,注意要用sudo权限执行,该脚本会从网上下载预先训练好的神经网络文件。文件很大,执行下面脚本要保证网络顺畅并且TF卡剩余容量充足。
cd jetson-inference
mkdir build
cd build
cmake ../
可选安装PyTorch。如果需要重新训练网络就装一下。cmake时,安装PyTorch的设置会自动执行,如果你点错了,装完还能手动执行下面这个脚本补救一下
cd jetson-inference/build
./install-pytorch.sh
喜闻乐见的编译。make然后make install,其中make那步可以加入-j4选项,其中make install需要sudo权限。
cd jetson-inference/build
make
sudo make install
sudo ldconfig
安装完成后可以用Python的import测试一下安装情况,测试命令:
import jetson.inference
import jetson.utils
测试截图如下:

如果python不提示缺少模块即正常。exit()回车推出python。
那么,接下来可以跑一些历程测试一下功能了。
6.2 图像识别测试
图像识别Image Recognition的python例程见python/examples/my-recognition.py
测试所用的图片在编译安装时会下载到data/images目录,可以进入对应目录找到。如果安装时因为网络原因没有完成下载,也可以在之后通过wget命令下载。这个测试里,我们用几个熊(bear)的照片。
wget https://github.com/dusty-nv/jetson-
inference/raw/master/data/images/black_bear.jpg
wget https://github.com/dusty-nv/jetson-
inference/raw/master/data/images/brown_bear.jpg
wget https://github.com/dusty-nv/jetson-
inference/raw/master/data/images/polar_bear.jpg
demo运行方法
./my-recognition.py polar_bear.jpg
./my-recognition brown_bear.jpg
./my-recognition.py black_bear.jpg
测试所用的北极熊(polar bear)的图片如下:

下图是polar bear图片例子的运行截图,可以看到图像识别没有问题,正确识别polar bear。

上面这个例子默认使用GoogleNet网络,如果想使用别的网络,可以在命令里加入—networl参数
./my-recognition.py –network=resnet-18 polar_bear.jpg
测试截图如下,正确识别了polar bear:

Nvidia提供了以下几组预先训练好的网络可以使用,在上一章的cmake时会自动下载。
Network | CLI argument | NetworkType enum
—|—|—
AlexNet | alexnet | ALEXNET
GoogleNet | googlenet | GOOGLENET
GoogleNet-12 | googlenet-12 | GOOGLENET_12
ResNet-18 | resnet-18 | RESNET_18
ResNet-50 | resnet-50 | RESNET_50
ResNet-101 | resnet-101 | RESNET_101
ResNet-152 | resnet-152 | RESNET_152
VGG-16 | vgg-16 | VGG-16
VGG-19 | vgg-19 | VGG-19
Inception-v4 | inception-v4 | INCEPTION_V4
如果因为网络原因,模型文件没有下载成功,可以去下面地址下载
https://github.com/dusty-nv/jetson-inference/releases
摄像头图像识别例程见imagenet-camera.py
可以用–camera指定使用什么摄像头。默认使用MIPI CSI
0,参数—camera=0。如果使用USB摄像头,可以指定参数为—camera=/dev/video0或1,具体编号看摄像头实际的系统文件名。其中,查看USB摄像头支持的分辨率的命令:
sudo apt-get install v4l-utils
v4l2-ctl –list-formats-ext
如果要指定图像分辨率,可以加入—width和—height选项。
命令举例(用管理员账号运行):
./imagenet-camera.py#using GoogleNet, default MIPI CSI camera (1280×720)
./imagenet-camera.py –network=resnet-18#using ResNet-18, default MIPI CSI
camera (1280×720)
./imagenet-camera.py –camera=/dev/video0#using GoogleNet, V4L2 camera
/dev/video0 (1280×720)
./imagenet-camera.py –width=640 –height=480#using GoogleNet, default MIPI
CSI camera (640×480)
6.3 目标检测测试
下面我们测试一个摄像头目标检测(Object Detection)程序,测试代码见python/examples/my-detection.py
这个代码默认使用USB摄像头,分辨率1280×720。网络默认使用mobilenet ssd V2
有以下几组预先训练好的网络可以使用
Model | CLI argument | NetworkType enum | Object classes
—|—|—|—
SSD-Mobilenet-v1 | ssd-mobilenet-v1 | SSD_MOBILENET_V1 | 91 ( COCO classes )
SSD-Mobilenet-v2 | ssd-mobilenet-v2 | SSD_MOBILENET_V2 | 91 ( COCO classes )
SSD-Inception-v2 | ssd-inception-v2 | SSD_INCEPTION_V2 | 91 ( COCO classes )
DetectNet-COCO-Dog | coco-dog | COCO_DOG | dogs
DetectNet-COCO-Bottle | coco-bottle | COCO_BOTTLE | bottles
DetectNet-COCO-Chair | coco-chair | COCO_CHAIR | chairs
DetectNet-COCO-Airplane | coco-airplane | COCO_AIRPLANE | airplanes
ped-100 | pednet | PEDNET | pedestrians
multiped-500 | multiped | PEDNET_MULTI | pedestrians, luggage
facenet-120 | facenet | FACENET | faces
运行这个测试的命令:
python my-detection.py
上面这个例子里的代码稍加改造就可以在图片和摄像头之间切换。识别已经存在的图片文件的例子见detectnet-console.py
测试命令的例子:
./detectnet-console.py–network=ssd-mobilenet-v2input.jpg output.jpg
其中—network参数根据你实际要用的网络来写。input.jpg是被识别图片的文件名(小编用来一张两个人踢球的图片),测试截图如下:

输出图像的截图如下,准确检测出了图像中的人和球:

6.4 图像语义分割
语义分割是建立在图像识别基础上的,可以像素级对物体进行识别。例子见segnet-console.py和segnet-camera.py
测试命令举例:
./segnet-console.py–network=fcn-resnet18-cityscapes images/city_1.jpg
output.jpg
测试截图:

输出图像如下所示:

也可以更换模型,用于别的场景的测试,比如:
./segnet-console.py –network=fcn-resnet18-deepscene –visualize=mask
images/trail_1.jpg output_mask.jpg
测试截图:

输入图像与输出图像见下图:


其中—network参数可以替换为具体的模型,实现不同物体的识别。下表是几种模型的测试结果,Jetson Nano和Xavier的比较。
Dataset | Resolution | CLI Argument | Accuracy | Jetson Nano | Jetson Xavier
—|—|—|—|—|—
Cityscapes | 512×256 | fcn-resnet18-cityscapes-512×256 | 83.3% | 48 FPS | 480 FPS
Cityscapes | 1024×512 | fcn-resnet18-cityscapes-1024×512 | 87.3% | 12 FPS | 175 FPS

命令里可以指定模型分辨率,以fcn-resnet18-pascal-voc为例,默认使用320×320,运行截图如下

我们可以指定512×320以提高准确性。命令例子如下(使用了前一小节两个人踢球的图片):
./segnet-console.py –network=fcn-resnet18-pascal-voc-512×320
images/humans_0.jpg output.jpg
运行截图如下:

运行结果输出图片截图如下:

我们可以发现,320×320分辨率时耗时24ms。当使用512×320时,虽然准确性提高,但耗时增加到38ms。
实际应用中,要根据具体的需要选择模型类型。当需要尽可能快地做人形检测时,建议用320×320
7、做个游戏机(可选)
Jetson Nano有高性能GPU,除了可以做计算,当然也能胜任它的老本行——跑游戏。在开源游戏机模拟器中,有一个叫PPSSPP的软件。
PPSSPP(PlayStation Portable Simulator Suitable for Playing
Portably)是一款跨平台开放源码的PSP模拟器。
这段文章,芯板坊的小伙伴们期待很久了。最近开源掌机界出来了老张ZPG、老周350、OGA和RK2020,各路玩家都疯了。大家都想知道,下一代开源掌机会是什么硬件呢?到底是RK3326,还是RK3399?
有小伙伴想测试一下Jetson
Nano跑PPSSPP,但碍于技术而做不了。小编的计算机是在重点大学学的,电脑技术也属于大虾级别。而且,小编又非常愿意帮助大家,所以就有了这段教程。小编近期还准备在非商业视频站上做一个免费的Jetson
Nano编译PPSSPP的视频教程。
今天,小编先把教程的文档给大家放出来了。一来是让大家满足在Jetson
Nano上玩游戏的心愿;二是想通过这个免费的教程,转移大家的兴趣,让OGA与RK2020掌机的粉丝们停止掐架。既然开源界的好东西那么多,那么千万不要把时间浪费在那些无意义的对喷上哦(来自芯板坊小编的关怀)。
7.1 编译安装SDL2
PPSSPP依赖SDL库,然而软件源的libsdl2-dev在编译安装PPSSPP时会报错,你需要源码编译安装一下SDL2。github站下载SDL2比较慢,可以用国内的gitee。命令:
git clone https://gitee.com/QiangGeGit/SDL2.git
cd SDL2
mkdir build
cd build
../configure
make
sudo make install
以上命令会下载源码,在SDL项目目录里建立build输出目录,并把编译文件输出到此文件夹,截图如下:

7.2 下载PPSSPP源码
PPSSPP的编译可以参考
https://github.com/hrydgard/ppsspp/wiki/Build-instructions
但是要注意,树莓派4的那个例子是不适用Jetson Nano的。Jetson Nano需要在本地按正常linux的编译命令来编译。
下载源码
git clone –recurse-submodules https://github.com/hrydgard/ppsspp.git
进入项目目录:
cd ppsppp
但是,cd
ppsspp后,你会发现里面的文件很多是空的。这是因为ppspp的目录里包含了许多子模块,它们来自其他项目。可以用下面命令把各个子项目下载到对应目录
git submodule update –init –recursive
注意,这步很关键。ppsspp的wiki里,提到要用命令安装一堆包,原命令如下:
sudo apt install build-essential cmake libgl1-mesa-dev libsdl2-dev libvulkan-
dev
前面提到apt源里的SDL有问题,我们已经源码编译过了。所以,实际的命令应该是:
sudo apt install build-essential clang cmake libgl1-mesa-dev libvulkan-dev
libzip-dev
7.3 使用Clang编译器
细心的你会发现我们在上一小节的最后一个命令里装了个Clang,这个编译可以比GCC更快一点。
默认编译器是GCC,我们修改使用Clang,命令分别如下(注意,每一次回车后会让你选择编译器,要选Clang所在的选项):
sudo update-alternatives –config cc
sudo update-alternatives –config c++
或者也可以这样修改:
export CC=clang
export CXX=clang++
你可以把它们添加进环境变量,以后make时候就指定clang和clang++代替gcc和g++了。
更或者,你可以再编译时候再指定。小编研究编译脚本,发现了官方wiki里没提到的细节(后一小节会教你怎么做)。
7.4 PPSSPP编译
细心的你应该还发现,我在上上小节的apt命令里还多装了个libzip-
dev,这个也是编译依赖包。小编已经翻过一次车了,编译半天突然报错找不到zip,心态都快爆炸了。这次特地加上,以免大家继续掉进坑里。
最后,编译ppsspp,命令(注意是两横):
./b.sh –release
如果前一小节没配置过Clang,上面这个命令会用GCC编译,那样编译速度就慢了。小编上一小节答应要教大家的。其实b.sh脚本里加入了临时修改编译器环境变量的语句,你可以再多加个clang参数,命令如下:
./b.sh –release –clang
这里也给大家展示了一个正确使用开源项目的思路。你要认识到,wiki是用来给你指导的,但是一个大项目往往会有多人同时参与,wiki的编写往往是滞后的。而作为开源项目,会把所有代码都给你,你需要根据具体的代码来确定使用方法。虽然很多时候因为代码太大,不可能全部都读,但是最外层的封装或者编译脚本读一遍应该是有必要的。
编译完成后会在build目录生成PPSSPPSDL文件,这个就是程序可执行文件,如下图所示:

7.5 PPSSPP测试
Ubuntu系统下双击运行,PPSSPP界面如下。小编已经载入了一个游戏镜像,所以最近游戏里有一个游戏图标。

第一次启动时,要做一些设置,不然运行会卡。渲染引擎可以选Vulkan或OpenGL,小编建议用性能较好的Vulkan。

渲染分辨率开到3倍PSP。开越大,画面越精细,但是过大会卡。小编测试发现3倍是比较合适的,画面很清晰,且速度依然不卡。

纹理过滤不要开太高,4倍就足够了。这个对画质的贡献不高,激烈的游戏中你关注着角色和剧情。你往往看不出4X和16X的区别,但是开高了却很浪费显示资源。

测试需要,我们把分辨率和运行速度都显示。

下图是《战神-斯巴达幽灵》的测试截图,可以60帧跑满速。考虑到前面的画质设置也不低,这个成绩在市面上的各种开源游戏机里应该是鹤立鸡群了!

好了,Jetson nano开发板的测评就到此为止。Seeed Studio天猫店特价促销,送丰富教程,有需要可以进店选购~
8、更高性能的Jetson Xavier NX
另外,小编不得不提一下Nvidia新出的Jetson Xavier NX。它可以作为AI edge应用中的cloud-
native服务器,即部署于本地的为边缘AI应用提供计算服务的计算服务器。别小瞧它长得像Jeston
Nano,其实它的性能与前几代产品相比提升巨大;它具有高达21TOPS的算力。
据Seeed Studio透露,Jetson Xavier NX的性能是Jetson TX2的十倍多,然而功耗仅仅10瓦。当然,实际工程应用上,Jetson
Xavier NX最大的亮点还是在可以并行运行神经网络,同时处理来自多个传感器的高分辨率数据;这使它可以满足一个完整AI系统的需求。

Jetson Xavier NX之所以性能相较于Jetson Nano或Jetson TX2能提高那么多,主要是因为Jetson Xavier
NX支持INT8模式。总所周知,Jetson Nano的AI计算性能是0.5 TFOPS(FP16);Jetson Nano的是1.3
TFOPS(FP16);Jetson Xavier NX是1.3 TFOPS(FP16)或21
TOPS(INT8)。正式支持INT8模式,使其性能遥遥领先。
在GPU方面,Jetson Xavier NX有巨大的进步。Jetson Nano是128 CUDA核心的 NVIDIA
Maxwel架构,前面章节已经提到过;Jetson TX2是256 CUDA核心的NVIDIA Pascal架构;到了Jetson Xavier
NX,则是的384 CUDA核心+48 Tensor 核心的NVIDIA Volta架构。
Volta架构是老黄的“新核弹”,首款产品是Tesla
V100计算卡。Volta架构带入了创新性的Tensor核心,这是最大亮点。现在,相同的架构,我们有了个缩小版的“核弹”,就是Jetson Xavier
NX,性能超强,同时高效且省电。
Jetson Xavier NX采用核心板+载板的设计,其中核心板的硬件细节如下:

Seeed Studio评测视频,可以欣赏下。
Seeed Studio天猫店现货销售,有兴趣可以关注下。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容