1. 项目缘起:为什么从Jetson Nano开始?
如果你对边缘计算、嵌入式AI或者机器人项目感兴趣,那么Jetson Nano这个名字你一定不陌生。它就像是一个微型但功能齐全的AI大脑,价格亲民,功耗极低,却能在本地实时处理图像识别、语音交互这些复杂的任务。我第一次接触它,是为了一个智能巡检小车的项目,需要在移动端实时跑一个轻量化的YOLO模型。当时市面上选择不少,但综合考虑成本、社区支持和上手难度,Jetson Nano成了我的首选。
然而,和所有嵌入式开发板一样,拿到手的第一关往往不是写代码,而是“点亮”它。系统安装和环境部署,听起来像是按部就班的操作,但实际过程中任何一个环节的疏忽,都可能导致后续开发举步维艰。比如,烧录镜像时选错了版本,可能连基本的Python环境都装不上;环境变量配置不对,编译OpenCV能让你折腾一整天。网上的教程很多,但要么过于简略跳过了关键细节,要么版本老旧已经不适用。我把自己从零开始,多次重装、踩坑、最终稳定运行的完整过程记录下来,希望能帮你绕开那些“坑”,快速搭建一个坚实可靠的开发起点。
2. 核心准备:硬件清单与镜像选择
在按下电源键之前,充分的准备工作能避免一半的麻烦。Jetson Nano的部署,硬件是基础,软件镜像则是灵魂。
2.1 必不可少的硬件“全家福”
Jetson Nano开发板本身只是一个核心,要让它工作起来,你需要准备好以下配件,这就像给一台电脑主机配齐外设:
- 电源适配器:这是重中之重。Jetson Nano对电源要求比较严格。官方推荐使用5V/4A(20W)的Micro-USB电源(针对较早的版本)或5V/5A(25W)的桶形电源(针对带桶形电源接口的版本)。我强烈建议使用官方推荐或品质有保障的电源。电源功率不足是导致系统不稳定、随机重启甚至无法启动的最常见原因。我曾用一个普通的手机充电器(5V/2A)尝试,结果就是频繁死机,排查了半天才发现是电源的锅。
- MicroSD卡:这是Nano的“硬盘”。至少需要32GB容量,强烈建议选择UHS-1速度等级及以上(如Class 10, A1/A2)的知名品牌高速卡。烧录和系统运行速度直接与此相关。一张低速卡会让系统体验变得极其糟糕。我用的是一张128GB的A2级卡,为后续安装各种库和数据集留足空间。
- 读卡器:用于将镜像烧录到MicroSD卡中。
- 显示器与HDMI线:初次设置需要图形界面。任何支持HDMI输入的显示器或电视都可以。
- 键盘和鼠标:USB接口的即可。
- 网络连接:网线(以太网)是最稳定可靠的选择。虽然Nano也支持Wi-Fi,但需要额外配置USB无线网卡,在初始安装阶段,一根网线能省去很多麻烦。
- 可选但推荐的配件:
- 散热风扇与散热片:Nano在运行AI推理时发热量不小。良好的散热能保证其持续稳定工作在最高性能状态。很多套件会附带一个小风扇,务必装上。
- USB无线网卡:如果项目需要移动性,一个兼容性好的USB无线网卡是必需的。我使用的是常见的RTL8812BU芯片网卡,在Linux下驱动支持较好。
- CSI摄像头:如果你要做计算机视觉项目,官方或兼容的树莓派CSI摄像头是直接接入的最佳选择。
2.2 系统镜像下载:选对版本,事半功倍
NVIDIA为Jetson Nano提供了专门的系统镜像,基于Ubuntu 18.04或20.04,并深度集成了CUDA、cuDNN、TensorRT等AI计算库。选择正确的镜像至关重要。
- 访问官方下载页面:前往NVIDIA Jetson Nano开发者网站,找到“下载”或“SD卡镜像”部分。
- 选择镜像版本:你会看到类似
JetPack 4.6、JetPack 5.0/5.1这样的版本。JetPack是NVIDIA为Jetson系列提供的全栈开发套件版本号,它包含了操作系统、驱动、CUDA、AI库等所有组件。- JetPack 4.x系列:基于Ubuntu 18.04,生态非常成熟稳定,社区资源极其丰富。如果你是初学者,或者项目依赖的某些库对较新系统支持不佳,选择JetPack 4.6.1是一个稳妥的决定。
- JetPack 5.x系列:基于Ubuntu 20.04,内核和系统组件更新,支持更新的硬件特性(如某些Wi-Fi/蓝牙模块)。但早期版本可能遇到一些第三方库的兼容性问题。随着发展,现已非常稳定,是新项目的推荐选择。
- 如何抉择:对于绝大多数AI应用和教程(包括部署YOLO),JetPack 4.6.1因其无与伦比的稳定性,依然是目前最主流、最推荐的选择。本文后续操作也以JetPack 4.6.1为例。下载文件通常是一个扩展名为
.img或.zip的压缩包。
注意:务必核对下载镜像的MD5或SHA256校验和,确保文件在下载过程中没有损坏。文件损坏会导致烧录后系统无法启动。
3. 系统烧录与首次启动
有了镜像和硬件,接下来就是“灌装”系统。
3.1 使用Etcher进行镜像烧录
在Windows、macOS或Linux上,我都推荐使用Balena Etcher这款工具。它界面简洁,操作傻瓜化,自动完成校验和刷新,几乎不会出错。
- 插入MicroSD卡:通过读卡器将你的MicroSD卡连接到电脑。
- 打开Etcher:运行Balena Etcher。
- 选择镜像:点击“Flash from file”,选择你下载并解压后的
.img镜像文件。 - 选择目标驱动器:Etcher通常会自动识别插入的SD卡。请务必再三确认你选择的是SD卡,而不是电脑的硬盘!选错目标会清空你的电脑硬盘数据。
- 开始烧录:点击“Flash!”按钮。这个过程会持续10-20分钟,取决于你的SD卡速度和电脑性能。烧录完成后,Etcher会自动进行验证(Verify),确保数据写入正确。
- 安全弹出:验证成功后,从电脑上安全弹出SD卡。
3.2 上电启动与初始配置
将烧录好的MicroSD卡插入Jetson Nano底部的卡槽,连接好显示器、键盘、鼠标、网线,最后插上电源。
首次启动:上电后,你会看到NVIDIA的Logo,然后进入系统初始化过程。第一次启动会稍慢一些,因为它需要扩展文件系统以适应你的SD卡容量。
系统设置向导:跟随屏幕提示完成初始设置,包括:
- 语言和时区:选择中文或英文,以及你所在的时区(Asia/Shanghai)。
- 用户名和密码:创建一个非root的用户账户,并设置一个强密码。请牢记这个密码,后续的
sudo操作都需要它。 - 计算机名:给你的设备起个名字,比如
my-jetson-nano。 - 磁盘设置:通常使用默认的全盘选项即可。
- 安装完成:设置完成后,系统会重启,然后进入Ubuntu的图形桌面环境。
关键检查点:进入系统后,第一时间做以下几件事:
- 打开终端:按
Ctrl+Alt+T打开终端。 - 检查系统信息:输入
nvidia-smi命令。如果能看到JetPack版本、CUDA版本以及GPU(Jetson Nano)的信息,说明核心的NVIDIA驱动和CUDA已经正确安装。 - 检查CUDA:输入
nvcc -V或cat /usr/local/cuda/version.txt查看CUDA版本。对于JetPack 4.6.1,通常是CUDA 10.2。 - 更新软件源:为了获得更快的下载速度,可以将软件源替换为国内镜像(如清华、中科大源)。但对于Jetson Nano,需要谨慎操作,因为其ARM架构(aarch64)的源与普通x86电脑不同。一个更安全的方法是只更新
apt列表:sudo apt update。
- 打开终端:按
4. 基础环境部署与加固
系统跑起来了,但这是一个“干净”的系统。为了后续开发,我们需要搭建一个坚固的基础环境。
4.1 系统更新与基础工具安装
首先,进行一次全面的系统更新,并安装一些必不可少的开发工具。
# 更新软件包列表 sudo apt update # 升级所有已安装的软件包(这可能需要一些时间) sudo apt upgrade -y # 安装基础开发工具包 sudo apt install -y build-essential cmake git curl wget vim htop net-tools # 安装Python3开发环境(系统可能已预装python3,但需要pip和dev包) sudo apt install -y python3-dev python3-pip python3-venv实操心得:sudo apt upgrade可能会更新内核。更新后建议重启一次,以确保所有更新生效,系统处于最稳定的状态。build-essential包含了gcc, g++, make等编译工具,是后续从源码编译任何库的前提。
4.2 配置Python虚拟环境
强烈建议为不同的AI项目创建独立的Python虚拟环境。这可以避免包版本冲突,保持系统Python的洁净。
# 安装虚拟环境管理工具(如果pip3版本较旧,可以先升级pip) sudo pip3 install --upgrade pip sudo pip3 install virtualenv virtualenvwrapper # 将virtualenvwrapper配置添加到shell配置文件中(通常是~/.bashrc) echo -e "\n# Virtualenv Wrapper" >> ~/.bashrc echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc # 使配置立即生效 source ~/.bashrc现在,你可以轻松创建和管理虚拟环境了:
# 创建一个名为‘cv’的虚拟环境,用于计算机视觉项目 mkvirtualenv cv -p python3 # 进入该环境 workon cv # 退出环境 deactivate # 列出所有环境 lsvirtualenv # 删除环境 rmvirtualenv cv注意:每次打开新的终端窗口,如果需要使用虚拟环境,都需要先执行
workon cv来激活。你可以把常用命令写在~/.bashrc里,但激活环境这一步通常还是需要手动执行。
4.3 安装并验证关键AI库:OpenCV
OpenCV是计算机视觉的基石。虽然JetPack预装了OpenCV,但预装版本可能功能不全(比如缺少GUI模块highgui,因为嵌入式环境常以无头模式运行),或者你想安装带有额外贡献模块(如SIFT, SURF)的版本。从源码编译OpenCV是更可控的方式。
为什么选择编译安装?因为通过apt安装的python3-opencv包可能是一个精简版,且无法保证与CUDA的兼容性达到最佳。编译安装可以自定义模块,并确保与已安装的CUDA和cuDNN深度集成。
以下是编译安装OpenCV 4.5.0(一个与JetPack 4.6.1兼容的稳定版本)的步骤:
安装依赖项:这是一长串但必要的步骤。
sudo apt install -y libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt install -y libxvidcore-dev libx264-dev sudo apt install -y libgtk-3-dev sudo apt install -y libatlas-base-dev gfortran sudo apt install -y libhdf5-dev libhdf5-serial-dev libhdf5-103 sudo apt install -y libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5下载OpenCV源码:
cd ~ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.0.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.0.zip unzip opencv.zip unzip opencv_contrib.zip mv opencv-4.5.0 opencv mv opencv_contrib-4.5.0 opencv_contrib配置CMake:这是最关键的一步,决定了编译出的OpenCV具备哪些功能。
cd ~/opencv mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D WITH_OPENMP=ON \ -D WITH_OPENCL=OFF \ -D WITH_CUDA=ON \ -D CUDA_ARCH_BIN=5.3 \ -D CUDA_ARCH_PTX="" \ -D WITH_CUDNN=ON \ -D WITH_CUBLAS=ON \ -D OPENCV_DNN_CUDA=ON \ -D ENABLE_FAST_MATH=ON \ -D CUDA_FAST_MATH=ON \ -D WITH_LIBV4L=ON \ -D WITH_GSTREAMER=ON \ -D WITH_GTK=ON \ -D WITH_QT=OFF \ -D BUILD_opencv_python3=ON \ -D BUILD_TESTS=OFF \ -D BUILD_PERF_TESTS=OFF \ -D BUILD_EXAMPLES=OFF \ -D PYTHON3_EXECUTABLE=/usr/bin/python3 \ -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6 \ -D PYTHON3_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \ -D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.6/dist-packages \ ..关键参数解释:
WITH_CUDA=ON,WITH_CUDNN=ON,WITH_CUBLAS=ON: 启用CUDA、cuDNN和cuBLAS加速,这是让OpenCV在Nano上飞起来的关键。CUDA_ARCH_BIN=5.3: 指定Nano的GPU计算能力(Compute Capability)。Jetson Nano是5.3,这个参数必须正确,否则CUDA代码无法编译或运行。OPENCV_DNN_CUDA=ON: 启用OpenCV DNN模块的CUDA后端,对于用OpenCV运行深度学习模型至关重要。ENABLE_NEON=ON: 启用ARM NEON指令集优化,提升CPU性能。BUILD_opencv_python3=ON: 编译Python3绑定。
编译与安装:编译过程非常漫长,在Nano上可能需要2-4个小时。建议使用
make的-j4参数(4个线程)来加速,但要注意Nano的散热。# 使用4个线程编译,根据系统负载调整。监控温度,必要时加强散热。 make -j4 # 编译完成后安装 sudo make install sudo ldconfig # 更新动态链接库缓存验证安装:
# 进入Python3,尝试导入cv2并查看版本 python3 -c "import cv2; print(cv2.__version__)" # 应该输出 4.5.0 # 检查CUDA是否启用 python3 -c "import cv2; print(cv2.cuda.getCudaEnabledDeviceCount())" # 应该输出大于0的数字(例如1)
踩坑记录:编译过程中最可能遇到的问题是内存不足(Swap耗尽)。Jetson Nano的4GB内存对于编译OpenCV这种大型项目来说比较紧张。如果编译中途卡住或报错,可以尝试以下方法:
- 增加交换空间(Swap):临时将交换文件增加到4GB或更多。
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 可以将其添加到/etc/fstab中使其永久生效 - 减少编译线程:使用
make -j2甚至make(单线程)来编译,虽然更慢,但更稳定。 - 确保散热良好,避免因过热降频导致编译失败。
5. 深度学习环境部署:以PyTorch和YOLO为例
基础环境就绪后,我们就可以搭建具体的深度学习开发环境了。这里以部署PyTorch和Ultralytics YOLOv5为例,这是当前非常流行的组合。
5.1 安装PyTorch for Jetson
PyTorch没有直接提供适用于JetPack 4.6 (CUDA 10.2) 的pip安装包。我们需要从NVIDIA官方提供的wheel文件进行安装。
确定版本:访问PyTorch for Jetson的官方页面,找到与你的JetPack(CUDA)版本对应的稳定版。对于JetPack 4.6 (CUDA 10.2),一个经过验证可用的版本是
torch-1.10.0配合torchvision-0.11.0。安装依赖:
sudo apt install -y libopenblas-base libopenmpi-dev libomp-dev下载并安装PyTorch:
# 下载wheel文件(示例链接,请以官网最新为准) wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl # 安装 pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl安装Torchvision:Torchvision需要从源码编译,以确保与PyTorch版本和系统架构匹配。
sudo apt install -y libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev # 安装较新版本的pillow,避免兼容性问题 pip3 install --upgrade pillow # 下载对应版本的torchvision源码 git clone --branch v0.11.0 https://github.com/pytorch/vision torchvision cd torchvision # 编译安装 export BUILD_VERSION=0.11.0 python3 setup.py install --user cd ..验证PyTorch安装:
python3 -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"如果输出PyTorch版本和
True,恭喜你,PyTorch已在Nano上成功启用CUDA。
5.2 部署YOLOv5进行目标检测
YOLOv5因其易用性和性能平衡而广受欢迎。我们直接在虚拟环境中安装并测试。
激活虚拟环境并安装依赖:
workon cv # 进入之前创建的‘cv’环境 cd ~ git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txtrequirements.txt会安装一系列包,包括matplotlib,numpy,opencv-python(这里我们用pip安装一个轻量版,与系统编译的cv2不冲突),pillow,torch(已安装)等。下载预训练模型并测试:
# 下载一个轻量级模型,例如yolov5s python3 detect.py --weights yolov5s.pt --source data/images --img 640 --conf 0.25首次运行会自动下载
yolov5s.pt模型文件。命令会在data/images目录下的示例图片上运行检测,并将结果保存在runs/detect/exp目录下。使用CSI摄像头进行实时检测: 这才是嵌入式AI的乐趣所在。假设你已经连接了CSI摄像头。
# 使用摄像头索引0(通常是CSI摄像头) python3 detect.py --weights yolov5s.pt --source 0 --img 640如果一切正常,你将看到一个实时检测窗口。按
q键退出。
性能调优心得:在Jetson Nano上跑YOLOv5,默认参数可能帧率较低。可以尝试以下优化:
- 减小推理尺寸:
--img 320可以显著提升速度,但会略微降低精度。 - 使用半精度(FP16):Jetson的GPU支持FP16,能提升速度并减少显存占用。在YOLOv5的detect.py中,可以尝试添加
--half参数(注意:需要模型支持FP16,且可能在某些版本上不稳定,需测试)。 - 使用TensorRT加速:这是终极优化方案。可以将PyTorch模型转换为TensorRT引擎,获得数倍的性能提升。但这涉及模型转换和部署,步骤更为复杂,是进阶内容。
6. 常见问题排查与系统优化
即使按照步骤操作,你也可能会遇到一些问题。这里汇总一些典型问题的排查思路。
6.1 系统启动与显示问题
| 问题现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 上电后无任何反应,指示灯不亮 | 电源问题 | 检查电源适配器规格是否为5V/4A或5V/5A,连接是否牢固。尝试更换电源。 |
| 指示灯亮但显示器无信号 | 1. HDMI线或显示器问题 2. 镜像烧录失败 3. 显卡模式设置 | 1. 更换HDMI线和显示器测试。 2. 重新使用Etcher烧录镜像,确保验证通过。 3. 对于某些版本,可能需要通过跳线(J48)强制设置为HDMI输出模式(参考官方文档)。 |
| 卡在开机Logo或命令行界面 | 文件系统损坏,SD卡问题 | 可能是SD卡质量不佳或意外断电导致。尝试重新烧录镜像。使用品牌高速卡。 |
6.2 软件安装与编译问题
pip install速度慢或失败:将pip源更换为国内镜像。mkdir ~/.pip echo -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple" >> ~/.pip/pip.conf- 编译OpenCV或其它库时内存/交换空间不足:如前所述,增加交换文件大小,并确保物理散热良好,避免因过热降频导致编译过程异常缓慢或卡死。
import cv2时提示Illegal instruction (core dumped):这通常是因为编译OpenCV时使用的CPU优化指令集(如NEON)与当前系统不匹配,或者编译环境有问题。最可靠的解决方案是:使用NVIDIA官方提供的,已经为Jetson优化好的OpenCV wheel包。在安装完JetPack后,可以尝试pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v461 ‘opencv-python==4.5.3.56’。如果必须编译,请确保在纯净的系统环境下,严格按照指导进行。- CUDA不可用 (
torch.cuda.is_available()返回 False):检查CUDA驱动和工具包是否安装正确。运行nvcc -V和nvidia-smi。确保PyTorch的wheel文件是针对正确版本的JetPack下载的。有时需要重启系统。
6.3 系统性能优化设置
为了让Jetson Nano发挥最佳性能,可以进行一些系统级设置。
切换电源模式:Jetson Nano有两种电源模式(通过跳线J48设置,或在软件中设置):
- 5W模式:低功耗,性能受限。
- 10W模式:全性能模式,需要搭配散热风扇。 对于AI应用,务必使用10W模式。可以通过命令检查并设置:
sudo nvpmodel -m 0 # 设置为MAX-N(10W)模式 sudo nvpmodel -q # 查询当前模式启用风扇控制(如果安装了风扇):安装
jetson-stats工具包可以方便地监控和控制。sudo pip3 install jetson-stats # 安装后重启,然后使用 jtop 命令查看状态和控制风扇 sudo systemctl restart jtop.service jtop在
jtop界面中,可以手动设置风扇速度,或设置为自动控制。关闭图形界面以释放资源:对于纯服务器/无头模式的应用,可以关闭桌面环境,节省内存和CPU。
sudo systemctl set-default multi-user.target # 设置默认启动到命令行 sudo reboot # 重启生效 # 若要恢复图形界面 sudo systemctl set-default graphical.target sudo reboot
从一块裸板到一个能跑YOLO实时检测的AI边缘设备,这个过程本身就是一个极佳的学习路径。它强迫你去理解硬件限制、系统依赖、编译原理和性能权衡。我自己的经验是,第一次部署成功固然欣喜,但真正有价值的是部署过程中遇到的每一个错误和解决它的过程。把这些问题的解决方案记录下来,它们就成了你知识库中最扎实的部分。
关于后续的深入,比如将PyTorch模型转换为TensorRT引擎以获得极致推理速度,或者使用DeepStream SDK构建高效的视频分析流水线,那又是另一个层次的挑战和乐趣了。但无论如何,一个稳定、基础环境完备的Jetson Nano系统,是你探索所有这些可能性的坚实基地。希望这篇详尽的记录,能帮你把这个基地搭建得又快又稳。