Jetson nano开发笔记jetson nano 环境搭建与常见软件安装

Posted 与光同程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jetson nano开发笔记jetson nano 环境搭建与常见软件安装相关的知识,希望对你有一定的参考价值。

开发板

看看他香不香

Jetson Nano 2GB是一款单板计算机,具有四核1.4GHz ARM CPU和内置的Nvidia Maxwell GPU。它是最便宜的Nvidia Jetson机型,针对的是购买树莓派的业余爱好者。

那里有很多AI开发板和加速器模块,但Nvidia拥有一大优势——它与桌面AI库直接兼容,不需要你将深度学习模型转换为任何特殊格式即可运行他们。

它使用几乎所有每个基于Python的深度学习框架都已使用的相同的CUDA库进行GPU加速。这意味着你可以采用现有的基于Python的深度学习程序,几乎无需修改就可以在Jetson Nano 2GB上运行它,并且仍然可以获得良好的性能(只要你的应用程序可以在2GB的RAM上运行)。

它将为强大的服务器编写的Python代码部署在价格为59美元的独立设备上的能力非常出色。

这款新的Jetson Nano 2GB主板也比Nvidia以前的硬件版本更加光鲜亮丽。

第一个Jetson Nano机型莫名其妙地缺少WiFi,但该机型随附一个可插入的WiFi模块,因此你不必再加上杂乱的以太网电缆了。他们还将电源输入升级到了更现代的USB-C端口,并且在软件方面,一些粗糙的边缘已被磨掉。例如,你无需执行诸如启用交换文件之类的基本操作。

Nvidia积极地推出了一款价格低于60美元的带有真实GPU的简单易用的硬件设备。似乎他们正以此为目标瞄准树莓派,并试图占领教育/爱好者市场。看看市场如何反应将是很有趣的。

根据NVIDIA官方提供的性能对照表,2GB版在不同AI软件的性能表现能达到Raspberry Pi 4的数十倍之谱。(图中将Raspberry Pi 4的性能表现标准化为1)

在操作系统部分,笔者使用NVIDIA提供的最新版本Jetson Nano镜像文件,安装完成后会发现它的桌面环境改为LXDE18.04,与先前的Ubuntu接口有些许不同,但是整体操作仍相当接近。

值得注意的是,在第一次开机的初始设置过程中,系统会建议用户激活Swap功能,若选择默认选项,系统则会自动创建容量约为4.95GB的换置空间,以在主内存容量不足的时候存储资料,发挥虚拟内存的功效。不过由于Swap的实际路径为microSD内存卡,所以带宽与访问性能将受到很大的限制,而且反复访问也可能会加速耗损内存卡寿命。

性能表:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YPSNVHXF-1621171965108)(https://pics5.baidu.com/feed/f636afc379310a555619aba4fab2cbae8326109b.jpeg?token=f1b5a967f7a80b08688e33bb7c8062d1)]

在这里插入图片描述

在这里插入图片描述

最新版操作系统将桌面环境改为LXDE 18.04,与先前的Ubuntu接口有些不同。
我感觉用这个桌面系统主要原因就是在不用到桌面很多功能的时候可以减少系统开销

55美元在某宝上大概420元左右就可以搞一手,和最新的树莓派4价格差不多。可以接触一些树莓派根本学不到的东西比如 cuda ,和一堆需要用到GPU的功能,你说香不香呢。

但是也有缺点:

  1. 资料很少,仅有非常少的开发文档,而官方给的一些东西都是英文,我这个英语菜鸡表示有点难受。
  2. 支持的系统有限,只有ubuntu
  3. 没有自带的WIFI和蓝牙如果不想拉网线的话只能多买一个适配器了。

IO定义

设置一下root密码吧

登录以后只是一般用户一些东西并不是非常方便。

sudo passwd root

更换源

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe

apt-get update

赶紧配置VNC

在开发之前首先需要配置一下VNC,不然你会在电脑键盘和jetson 的键盘之间切来切去非常麻烦。

如何安装

jetson nano官方镜像中已安装有vnc软件vino-server,只需进行一些配置即可使用。

1、确认系统已经安装好后打开系统设置,找到桌面共享,你会发现打不开,据说这是个bug。

解决方法:
第一步:在终端输入这句指令编辑此文件

sudo gedit /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml

第二步:滑到最后面文末的位置,将下面这段内容全部粘贴进去

<key name='enabled' type='b'>
      <summary>Enable remote access to the desktop</summary>
      <description>
        If true, allows remote access to the desktop via the RFB
        protocol. Users on remote machines may then connect to the
        desktop using a VNC viewer.
      </description>
      <default>false</default>
    </key>


第三步:输入以下指令编译一下刚才编辑过的文件

sudo glib-compile-schemas /usr/share/glib-2.0/schemas

2、打开桌面共享设置后按照如下配置即可,密码不用太复杂,好像不设置也可以。

3、 开机设置

4、 配置VNC设置

gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false

已安装组件的使用

Jetson-nano的OS镜像已经自带了JetPack,cuda,cudnn,opencv等都已经安装好,并有例子,这些例子安装路径如下所示

TensorRT/usr/src/tensorrt/samples/
CUDA/usr/local/cuda-/samples/
cuDNN/usr/src/cudnn_samples_v7/
Multimedia API/usr/src/tegra_multimedia_api/
VisionWorks/usr/share/visionworks/sources/samples/ /usr/share/visionworks-tracking/sources/samples/ /usr/share/visionworks-sfm
OpenCV/usr/share/OpenCV/samples/

cuda

Jetson-nano中已经安装了CUDA10.2版本,但是此时你如果运行 nvcc -V是不会成功的,需要你把CUDA的路径写入环境变量中。OS中自带Vim工具 ,所以运行下面的命令编辑环境变量

sudo vim ~/.bashrc

在最后添加

export CUDA_HOME=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.2/bin:$PATH

然后保存退出

对了最后别忘了source一下这个文件。

source ~/.bashrc

source后,此时再执行nvcc -V执行结果如下
nvcc: NVIDIA ® Cuda compiler driver
Copyright © 2005-2018 NVIDIA Corporation
Built on Sun_Sep_30_21:09:22_CDT_2018
Cuda compilation tools, release 10.0, V10.0.166
beckhans@Jetson:~$

OpenCV

Jetson-nano中已经安装了OpenCV4.1版本,可以使用命令检查OpenCV是否安装就绪

但是比较可惜的是这些库没有CUDA以及扩展模块如果需要的话需要自己编译

pkg-config opencv4 --modversion

编译
g++ xxx.cpp -o xxx -L /usr/lib/aarch64-linux-gnu/libopencv* -I /usr/include/opencv4/

cuDNN

cd /usr/src/cudnn_samples_v7/mnistCUDNN #进入例子目录
sudo make #编译一下例子
sudo chmod a+x mnistCUDNN # 为可执行文件添加执行权限
./mnistCUDNN # 执行

cudnnGetVersion() : 7301 , CUDNN_VERSION from cudnn.h : 7301 (7.3.1)
Host compiler version : GCC 7.3.0
There are 1 CUDA capable devices on your machine :
device 0 : sms  1  Capabilities 5.3, SmClock 921.6 Mhz, MemSize (Mb) 3964, MemClock 12.8 Mhz, Ecc=0, boardGroupID=0
Using device 0
 
Testing single precision
Loading image data/one_28x28.pgm
Performing forward propagation ...
Testing cudnnGetConvolutionForwardAlgorithm ...
Fastest algorithm is Algo 1
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.325104 time requiring 3464 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.387500 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.540729 time requiring 57600 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 4.965156 time requiring 207360 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 5.201146 time requiring 2057744 memory
Resulting weights from Softmax:
0.0000000 0.9999399 0.0000000 0.0000000 0.0000561 0.0000000 0.0000012 0.0000017 0.0000010 0.0000000 
Loading image data/three_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 0.9999288 0.0000000 0.0000711 0.0000000 0.0000000 0.0000000 0.0000000 
Loading image data/five_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 0.9999820 0.0000154 0.0000000 0.0000012 0.0000006 
 
Result of classification: 1 3 5
 
Test passed!
 
Testing half precision (math in single precision)
Loading image data/one_28x28.pgm
Performing forward propagation ...
Testing cudnnGetConvolutionForwardAlgorithm ...
Fastest algorithm is Algo 1
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.113750 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.119792 time requiring 3464 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.236198 time requiring 28800 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 1.031719 time requiring 207360 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 5.049948 time requiring 203008 memory
Resulting weights from Softmax:
0.0000001 1.0000000 0.0000001 0.0000000 0.0000563 0.0000001 0.0000012 0.0000017 0.0000010 0.0000001 
Loading image data/three_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000714 0.0000000 0.0000000 0.0000000 0.0000000 
Loading image data/five_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 1.0000000 0.0000154 0.0000000 0.0000012 0.0000006 
 
Result of classification: 1 3 5
 
Test passed!

jetson nano 安装 TensorFlow GPU

安装pip

因为Jetson Nano中已经安装了Python3.6版本,所以安装pip还是比较简单的

sudo apt-get install python3-pip python3-dev

安装后pip是9.01版本,需要把它升级到最新版,升级后pip版本为19.0.3。这里面升级后会有一个小Bug,需要手动改一下

python3 -m pip install --upgrade pip #升级pip

sudo vim /usr/bin/pip3 #打开pip3文件

将原来的

from pip import main
if __name__ == '__main__':
    sys.exit(main())

改成

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

修改结束后保存。运行pip3 -V成功后显示

pip 21.1.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)

安装那些机器学习领域的包

sudo apt-get install python3-scipy
sudo apt-get install python3-pandas
sudo apt-get install python3-sklearn

pip3 install CPython #必须有这一步,否则h5py编译会出错

安装TensorFlow GPU版

(1)确认CUDA已经被正常安装

nvcc -V

如果能看到CUDA版本号,即为正确安装

(2)安装所需要的包

sudo apt-get install python3-pip libhdf5-serial-dev hdf5-tools

sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
pip3 install -U pip
pip3 install -U CPython testresources setuptools

pip3 install -U numpy1.16.1 future0.17.1 mock3.0.5 h5py2.9.0 keras_preprocessing1.0.5 keras_applications1.0.8 gast==0.2.2 futures protobuf pybind11

(3)安装TensorFlow GPU版本

pip3 install /home/yuri/WorkSpace/TensorFlow/tensorflow-2.2.0+nv20.6-cp36-cp36m-linux_aarch64.whl

至于这个轮文件可以到英伟达官方下载链接下载

wget https://developer.download.nvidia.com/compute/redist/jp/v44/tensorflow/tensorflow-2.2.0+nv20.6-cp36-cp36m-linux_aarch64.whl

ROS安装

什么是ROS

ROS是一个机器人操作系统,大家可以想一想Windows操作系统,Windows系统可以打开文件夹,进行文件管理,播放多媒体,用户按照Windows系统开放的接口,可以编写Windows应用程序。ROS系统也是一样,它封装了一些对机器人控制的基本接口,只要我们遵循这些接口制定的规则,我们也可以开发出机器人控制应用。

选用ROS系统

主流的ROS有Melodic Morenia,ROS Kinetic Kame等等,大家可以理解为Liunx系统平台下也分为Ubuntu,CentOS等等。由于主流系统中目前只有Melodic Morenia支持Ubuntu18.04,所以也没得选,就Melodic Morenia了。

准备工作

其实也没啥准备的,这里有个小建议,就是准备一张新的SD卡安装ROS,一是因为ROS挺大,二是如果装了ROS,又拿同一套系统建立模型,会影响速度。SD卡建议32G以上。

开始安装

将安装源添加到source.list

sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’

添加公钥和更新系统

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
 
sudo apt update

安装ROS

sudo apt install ros-melodic-desktop-full

上面的命令是把ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators一起安装了,你也可以单独安装,我就懒得写了,自己查官网去吧。

初始化ROS

sudo rosdep init
rosdep update

将ROS配置信息写入环境变量,保证每一个终端启动时,都会自动执行setup.bash

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

安装一些依赖包

sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

测试一下ROS是否正确安装,输入下面的命令

roscore

如果没有访问外服的能力一定会遇到的问题

说白了就是在DNS解析的时候,直接访问127.0.0.1
可以自己ping 一下试试

解决方案0x01

如果你正遇到这个问题,那么第一个解决方案就是,更换网络,你可以尝试使用你的手机热点,然后继续尝试以下指令。

sudo rosdep init
rosdep update

解决方案0x02

该解决方案是针对由于以下两个无法正常访问,但可以ping通,于是修改hosts文件,加入以下两个网址的IP地址实现访问。

sudo gedit /etc/hosts

199.232.28.133 raw.githubusercontent.com
151.101.228.133 raw.github.com

修改完成后,在终端执行

sudo rosdep init
rosdep update

掉坑经验

经过测试用校园网访问不超过,移动手机热点访问不成功,电信手机热点访问成功

安装pygame

$ sudo apt-get install libsdl-image1.2-dev ffmpeg libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsmpeg-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev

$ sudo apt-get -y install libfreetype6-dev

$ pip3 install pygame

增加SWAP

Nano入门教程基础篇-增加swap空间

说明:

介绍如何增加swap空间

步骤:

生成swapfile文件

sudo fallocate -l 4G /var/swapfile
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile

设置为自动启用swapfile

sudo bash -c ‘echo “/var/swapfile swap swap defaults 0 0” >> /etc/fstab’

以上是关于Jetson nano开发笔记jetson nano 环境搭建与常见软件安装的主要内容,如果未能解决你的问题,请参考以下文章

[Jetson Nano]Jetson Nano快速入门

jetson nano学习笔记1

jetson nano学习笔记1

Yolov5学习笔记——部署在jetson nano上

jetson TX2

Jetson Nano 配置40引脚扩展接头