因为目前业务方向逐渐偏向硬件嵌入部署,所以最近搞了一个jetson nano和rk3399的板子来上手,之前没搞过硬件开发板,刚开始配置的时候遇到了很多坑,写篇博客记录一下过程。
Jetson Nano 是一款小型,功能强大的单板计算机,配备了1.4 GHz四核ARM A57 CPU,128核Nvidia Maxwell GPU和4 GB RAM。它具有四个USB A型端口,包括一个USB 3.0端口,用于视频输出的HDMI和DisplayPort端口以及一个千兆位以太网连接器。板载CSI摄像头插槽,也可以通过USB连接摄像头。
此外,微型USB端口用于将其连接到电源,但也可以使用桶形连接器,该桶形连接器可与可选的大功率电源配合使用,该大功率电源可提供4安培的电流来执行更繁重的任务,CPU的顶部配有散热器,但如果要执行需要大量散热的处理器密集型任务,则可以在水槽顶部安装一个可选风扇。
介绍一下nano的必备套件:
选配套件:
可根据自己需求进行选配购买,如果怕麻烦也可以选择全套套餐,当然会贵一些。
Jetson Nano刷系统的方式直接把镜像写入SD文件即可。首先去官网下载最新的镜像,我的板子是b01 4G版本,所以下载了这个,整个文件6G多,很考验网速,建议将下载链接复制到迅雷中下载:
镜像选择刚才下载的好的镜像文件即可,盘符现在刚才格式化后的SD卡即可,然后点击Flash,等待差不多半个钟。Etcher官方链接:https://www.balena.io/etcher/
烧录完成后取出SD卡,插到板子上,接通电源开机,,插上鼠标键盘,连接HDMI线和显示屏。进去后大概会看到以下界面,系统会给出相应配置引导,自行配置即可,包括用户名和语言、时区等等:
最后登录系统,进到如下界面,系统烧录就大功告成了。
这时候可以插入网线,或者带有wifi模块的可以连接无线网络,通过右上角设置-网络-有线连接(无线连接)查看本机IP地址,用于在其他电脑上ssh连接调试。
在本地局域网的电脑上打开终端,使用SSH连接jetson nano,连接上之后就可以摆脱屏幕调试了:
ssh <name>@192.168.233.135
系统安装完成后需要检查安装的组件,因为网上说更新源会有很多问题,所以我这里就先不更新,直接使用默认的源安装更新,输入以下命令,linux小白可以看下这篇文章的介绍:
sudo apt-get update
sudo apt-get full-upgrade
过程比较漫长,慢慢等待即可,一般不会出什么问题。
jetson-nano的系统镜像中已经自带了cuda、cudnn、TensorRT等组件
最新版的nano系统安装的是cuda10.2版本,如果直接运行nvcc -V的话是不会成功的,还需要把cuda的路径写入到环境变量里面。运行以下命令编辑环境变量:
sudo vim ~/.bashrc
光标划到最底下,按i进入编辑模式,将下面命令添加上去:
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
最后按Esc退出编辑,按 :qw 保存退出。如果是遇到权限问题无法保存的话,需要su 到root用户执行。最后再source一下这个文件:
source ~/.bashrc
这时候运行nvcc -V后就会显示版本信息了:
2. 检查cdDNN
通过官方提供的例子验证cuDNN:
cd /usr/src/cudnn_samples_v8/mnistCUDNN #进入例子目录
sudo make #编译一下例子
sudo chmod a+x mnistCUDNN # 为可执行文件添加执行权限
./mnistCUDNN # 执行
终于到了本文的重点,首先需要安装pip:
sudo apt-get install python3-pip python3-dev
安装后pip是9.01版本,需要把它升级到最新版,升级后pip版本为20.3.2
python3 -m pip install --upgrade pip #升级pip
升级后运行pip -V成功后显示
root@cai-desktop:/# pip -V
pip 20.3.2 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)
安装pytorch环境:需要下载jetson nano对应的torch-aarch64包(之前我一直以为直接用linux下的whl离线包安装即可,下了大半天结果不支持),这里安装的是torch1.6版本,建议直接下载whl,然后再进行安装。
在命令行依次执行,这里的whl包使用了aarch64区别于linux版本的包:
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
pip3 install Cython
pip3 install torch-1.6.0a0+b31f58d-cp36-cp36m-linux_aarch64.whl
安装完后,进行验证,在终端中输入:
可以看到torch已经安装完成,但是还需要安装对应的torchvivision 0.7.0的包,这里的0.7.0是torch1.6对应的版本。
sudo apt-get install libjpeg-dev zlib1g-dev
git clone --branch v0.7.0 https://github.com/pytorch/vision torchvision
#这行命令是将源代码下载到了用户目录下的torchvision,如果torchvision已经存在,需要删除,如果提示permission denied
#命令行使用sudo su 进入管理员模式, 执行 rm -r torchvision ,或者也可以自行查找更安全的删除方法
cd torchvision
#进入用户目录下的torchvision,执行源代码编译工作,需要一定的时间,大概十多分钟
sudo python3 setup.py install
cd ../ # attempting to load torchvision from build dir will result in import error
pip3 install 'pillow<7' # always needed for Python 2.7, not needed torchvision v0.5.0+ with Python 3.6
但是编译的时候遇到一个很头疼的问题,在网上找了大半天终于找到解决的方法了,这里给个链接:
解决方法:vi setup.py文件,修改如下:
if has ffmpeg 改为if False即可
安装完成后,进行验证,在终端中输入python3,进入3.6.9的环境,依次验证:
>>> import torch
>>> print(torch.__version__)
# 输出 1.6.0
>>> print('CUDA available: ' + str(torch.cuda.is_available()))
>>> print('cuDNN version: ' + str(torch.backends.cudnn.version()))
>>> a = torch.cuda.FloatTensor(2).zero_()
>>> print('Tensor a = ' + str(a))
>>> b = torch.randn(2).cuda()
>>> print('Tensor b = ' + str(b))
>>> c = a + b
>>> print('Tensor c = ' + str(c))
>>>> import torchvision
>>> print(torchvision.__version__)
# 输出 0.7.0
sudo apt-get install python3-scipy
sudo apt-get install python3-pandas
sudo apt-get install python3-sklearn
sudo apt-get install python3-matplotlib
困扰了一整天,后来在opencv的issues里找到了答案
意思就是把/build/samples/gpu/CMakeFiles/example_gpu_surf_keypoint_matcher.dir/link.txt修改一下,在CMakeFiles/example_gpu_surf_keypoint_matcher.dir/surf_keypoint_matcher.cpp.o后添加
../build/modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/surf.cuda.cpp.o ../build/modules/xfeatures2d/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_surf.cu.o
这两行信息,…/为你自己的build路径前缀。修改后保存,再次编译,大功告成!!
卸载旧版opencv,安装新版
# 卸载
cd opencv-4.1.1/build
sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv
cd /usr
sudo find . -name "*opencv*" | xargs sudo rm -rf
# 安装
unzip 4.3.1.zip
cd opencv-4.3.1
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install
———————————————————————————————————————
参考文章: