1. 项目概述为什么从Jetson Nano开始如果你对边缘计算、嵌入式AI或者机器人项目感兴趣那么NVIDIA Jetson Nano这个名字你一定不陌生。它被很多人称为“AI开发者的树莓派”但它的定位和能力其实要更聚焦、更强大。我第一次接触Jetson Nano是为了给一个室内的移动机器人平台找一个“大脑”需要它实时处理摄像头画面、运行一些轻量级的神经网络模型同时还要控制电机和传感器。当时摆在面前的选择不少从性能更强的Jetson Xavier NX到更便宜的树莓派但最终选择了Nano作为起点原因很实际它是一个在性能、功耗、成本和社区支持上取得绝佳平衡的入门平台。简单来说Jetson Nano是一块信用卡大小的嵌入式系统模块SOM它搭载了128核Maxwell架构的GPU和4核ARM Cortex-A57 CPU。这个配置单看参数可能不起眼但关键在于其完整的软件栈——NVIDIA为其量身打造的JetPack SDK。这套工具包含了Ubuntu操作系统、CUDA、cuDNN、TensorRT以及计算机视觉库等让你能直接在嵌入式设备上调用GPU进行并行计算和AI推理而无需从零开始配置一个极其复杂的环境。对于初学者而言这意味着你可以跳过最令人头疼的驱动安装、环境配置环节直接进入“跑模型、做应用”的实战阶段。这个系列笔记就是我记录从零开始折腾Jetson Nano的完整过程。它不适合那些只想一键部署成熟方案的朋友而是写给愿意动手、不怕踩坑想真正理解边缘AI设备从硬件上电到算法部署全流程的开发者。我会分享官方文档里一笔带过的细节记录那些让我调试到半夜的“坑”以及最终解决问题的思路。无论你是学生、创客还是工程师希望这些接地气的经验能帮你少走弯路。2. 开箱与硬件初识不只是块开发板拿到Jetson Nano开发者套件你会发现它和树莓派这类单板电脑的“画风”不太一样。它更像一个完整的系统核心需要你为其搭配“四肢”。2.1 核心板与载板理解模块化设计Jetson Nano采用了核心板Module加载板Carrier Board的设计。我们常说的“Jetson Nano开发板”通常指的是载板而那块小小的、集成了CPU、GPU、内存和存储的核心模块是插在载板上的。这种设计的好处是产品量产时你可以只采购核心模块然后自己设计定制化的载板来满足特定需求比如工业接口、不同的电源设计等。对于开发者官方载板已经提供了非常丰富的接口。我的套件包含以下主要部分Jetson Nano核心模块上面印有型号。务必核对一下是4GB版本还是2GB版本这直接影响你能运行模型的复杂度。开发者载板提供了大部分连接功能。散热风扇与散热片这是必须安装的Nano在满载时发热不小过热会导致降频甚至关机。Micro-USB电源线注意这只是其中一种供电方式。注意很多新手第一个坑就是电源。官方提供了两种供电模式一是通过Micro-USB接口5V/2A二是通过桶形直流电源接口5V/4A。如果你打算连接摄像头、USB外设或使用GPIO驱动较多外设强烈建议使用5V/4A的直流电源。使用Micro-USB供电可能导致在高负载下因供电不足而重启现象就是系统突然黑屏。我一开始用手机充电器供电跑一个目标检测demo时频繁重启换了4A电源后问题立刻消失。2.2 接口全解析潜力与陷阱载板上的接口是你的武器库每个都有其用途和注意事项GPIO扩展头40-pin这是与树莓派兼容的GPIO引脚可以连接传感器、控制舵机等。但要注意Jetson Nano的GPIO电压是3.3V不是5V直接连接5V设备可能会损坏板卡。驱动大电流设备如电机务必使用外部电源和电机驱动板。CSI摄像头接口2个这是连接树莓派官方摄像头或IMX219兼容摄像头的专用接口带宽高延迟低是进行计算机视觉项目的首选。我使用的是树莓派V2摄像头安装时需要小心地拉开接口卡扣将摄像头排线金属面朝向板卡外侧插入再按下卡扣固定。USB 3.0接口4个可以连接USB摄像头、键盘鼠标、U盘等。如果你用USB摄像头注意选择支持Linux UVC驱动的型号免驱的最好。千兆以太网口用于网络连接和远程登录。稳定的有线网络比Wi-Fi更可靠。HDMI和DisplayPort用于连接显示器。首次启动必须连接显示器才能进行初始设置。MicroSD卡槽这是系统的“硬盘”。官方系统镜像就烧录在这里。SD卡的速度至关重要我强烈建议使用Class 10或UHS-I及以上速度等级的卡最好是大品牌。低速卡会导致系统运行极其卡顿体验糟糕。我最初用了一张闲置的老卡系统启动要两三分钟操作一卡一卡换成高速卡后流畅度提升几个档次。3. 系统烧录与首次启动避开配置的暗礁让Jetson Nano跑起来的第一步是把操作系统烧录到SD卡上。这个过程虽然简单但有几个细节决定了初体验的顺滑程度。3.1 下载与烧录工具选择首先到NVIDIA官方网站下载最新的JetPack SDK for Jetson Nano。它实际上是一个包含了Ubuntu 18.04/20.04 LTS、所有驱动和AI框架的完整系统镜像文件.img格式。烧录工具的选择Etcher (balenaEtcher)这是我最推荐给新手的工具。它开源、免费、界面直观支持Windows、macOS和Linux几乎不会出错。选择镜像文件、选择SD卡驱动器、点击“Flash”三步完成。Win32 Disk Imager(Windows)老牌工具也很可靠。dd命令(Linux/macOS)命令行方式最直接但风险也高输错设备名可能清空你的硬盘。实操步骤将高速MicroSD卡通过读卡器插入电脑。打开Etcher点击“Flash from file”选择下载好的.img镜像文件。点击“Select target”确保选中了你的SD卡仔细核对容量和盘符千万别选错。点击“Flash”开始烧录。这个过程需要10-20分钟取决于你的SD卡和电脑速度。烧录完成后Etcher会自动校验数据。校验通过后就可以安全弹出SD卡了。重要提示烧录过程会完全格式化SD卡原有数据全部丢失。请提前备份。3.2 首次启动与系统配置将烧录好的SD卡插入Jetson Nano的卡槽连接好HDMI显示器、USB键鼠最后接上电源。你会看到NVIDIA的Logo然后进入系统设置界面。语言和键盘建议选择英语美国避免后续终端命令行出现字符兼容问题。键盘布局根据实际情况选择。用户名、计算机名和密码建议设置一个简单易记的用户名如nano和强密码。计算机名用于在网络中标识这台设备。选择APP这里会让你选择安装的软件包。对于初学者我建议选择“Jetson Nano Developer Kit”这个选项它会安装完整的桌面环境、示例程序和一些开发工具。另一个“Headless”选项适用于无显示器、纯命令行操作的服务器模式。磁盘设置保持默认即可系统会使用整个SD卡空间。配置完成后系统会开始安装和更新这个过程需要联网并且可能耗时较长半小时到一小时不等请保持网络畅通并耐心等待。安装完成后系统会自动重启进入Ubuntu桌面环境。4. 基础环境配置与远程登录打造高效工作流在桌面环境里操作只是开始对于开发而言通过SSH远程登录并在本地电脑上使用终端操作是更高效的方式。4.1 网络配置与IP地址获取首先你需要知道Jetson Nano在局域网中的IP地址。在Nano的桌面终端里输入ifconfig找到eth0有线网卡或wlan0无线网卡如果你接了Wi-Fi模块对应的inet地址就是它的IP例如192.168.1.100。更推荐的方法是在你的路由器管理后台为Jetson Nano的MAC地址设置一个静态IP分配这样它的IP地址就不会变动方便以后长期连接。4.2 启用SSH服务Ubuntu默认可能没有开启SSH服务。在Nano的终端中执行sudo systemctl enable ssh sudo systemctl start ssh这样就从开机起启用了SSH服务。4.3 从本地计算机远程登录在你的Windows电脑上可以使用PuTTY或MobaXterm在macOS或Linux上直接使用终端。ssh 你的用户名Jetson_Nano的IP地址 # 例如ssh nano192.168.1.100输入密码后你就进入了Nano的命令行环境。所有后续的安装、编译操作都可以在这个远程终端里完成无需再接着显示器和键鼠。进阶技巧使用VS Code Remote-SSH如果你使用Visual Studio Code强烈推荐安装“Remote - SSH”扩展。它允许你直接将VS Code连接到Jetson Nano在本地VS Code界面中直接编辑Nano上的代码文件使用本地VS Code的所有功能如代码提示、调试而执行环境在远程的Nano上。这能极大提升开发效率。配置好后就像在本地开发一样。4.4 基础软件包更新与安装首次登录后先更新软件源并升级现有包sudo apt update sudo apt upgrade -y然后安装一些常用工具如vim编辑器、htop资源监视器、git版本控制等sudo apt install -y vim htop git curl wget5. 核心能力验证运行你的第一个AI示例环境配好了我们来点激动人心的——运行一个真正的AI应用验证Jetson Nano的GPU加速能力。5.1 进入示例目录JetPack SDK自带了很多优秀的示例程序存放在/usr/src目录下。我们用一个经典的图像分类示例来测试cd /usr/src/tensorrt/samples/sampleMNIST这是一个使用TensorRT对MNIST手写数字进行推理的示例。但我们需要先编译它。5.2 编译与运行# 进入示例目录后创建build文件夹并编译 mkdir build cd build sudo cmake .. sudo make -j4-j4参数表示使用4个线程并行编译可以加快速度。编译完成后运行示例./sample_mnist你会看到终端输出一系列日志最后显示它对输入数字图片的推理结果和性能数据。如果一切正常说明你的CUDA、TensorRT环境都是完好的。5.3 运行更炫酷的实时目标检测MNIST示例有点简单。NVIDIA在/opt/nvidia/deepstream/deepstream/samples目录下提供了更强大的DeepStream示例。但DeepStream相对复杂。对于快速体验我推荐使用jetson-inference项目。首先克隆这个仓库并运行安装脚本cd ~ git clone https://github.com/dusty-nv/jetson-inference cd jetson-inference git submodule update --init mkdir build cd build cmake ../ make -j4 sudo make install这个过程会下载一些预训练模型如SSD-Mobilenet-v2耗时较长。安装完成后你可以使用一个简单的命令来调用CSI摄像头进行实时目标检测# 假设你连接了CSI摄像头 cd ~/jetson-inference/build/aarch64/bin ./detectnet.py csi://0如果连接的是USB摄像头可以尝试./detectnet.py /dev/video0这时你应该会看到一个弹窗实时显示摄像头画面并用框和标签标识出画面中的“人”、“汽车”、“自行车”等物体。帧率FPS会显示在窗口标题栏上。在我的测试中使用CSI摄像头检测精度为“中等”时帧率能达到20FPS这充分展示了Jetson Nano的实时AI推理能力。第一次运行的心得当看到实时检测画面流畅地跑起来时那种成就感是巨大的。它直观地告诉你这块小板子真的能做实时的AI计算。注意观察资源占用可以另开一个终端运行htop看看CPU和内存的使用情况。6. 性能监控与电源管理让系统稳定奔跑Jetson Nano性能不错但资源有限。了解如何监控和管理其状态是长期稳定运行的关键。6.1 监控系统状态即时监控使用htop命令可以直观地看到所有CPU核心的占用率、内存和交换空间的使用情况。这是最常用的工具。GPU状态NVIDIA提供了一个专属工具tegrastats。在终端输入sudo tegrastats它会持续输出详细的系统状态包括CPU各核心频率和占用率GPU频率、占用率内存带宽这是关键指标内存带宽不足会成为性能瓶颈。功耗显示当前SoC系统芯片的实时功耗。温度CPU、GPU、热敏点的温度。 按CtrlC可以停止。为了更清晰地查看可以间隔1秒输出一次sudo tegrastats --interval 1000。6.2 电源模式切换Jetson Nano有两个默认的电源模式直接影响性能和功耗5W模式最大功耗限制在5瓦性能较低但发热小有时用Micro-USB供电也能跑。10W模式最大功耗限制在10瓦CPU和GPU频率更高性能更强但必须使用5V/4A电源。切换命令如下# 切换到10W模式最大性能 sudo nvpmodel -m 0 # 切换到5W模式低功耗 sudo nvpmodel -m 1 # 查看当前模式 sudo nvpmodel -q我的经验在连接摄像头跑AI应用时务必使用sudo nvpmodel -m 0切换到10W模式并将风扇设置为主动冷却见下文。你可以实测一下在5W模式下跑detectnet帧率可能会掉到10FPS以下而10W模式能提升一倍以上。6.3 风扇控制与散热散热是稳定性的生命线。官方载板的风扇默认是由PWM自动控制的但有时策略不够激进。安装风扇务必按照说明书将风扇的红色线正极接到载板的“FAN”引脚黑色线负极接到旁边的“GND”引脚。手动控制风扇临时# 设置风扇速度为255最大 echo 255 | sudo tee /sys/devices/pwm-fan/target_pwm # 设置风扇速度为0关闭 echo 0 | sudo tee /sys/devices/pwm-fan/target_pwm设置开机自动风扇策略编辑/etc/rc.local文件在exit 0这一行之前添加echo 150 | sudo tee /sys/devices/pwm-fan/target_pwm这样开机后风扇会以一个中等速度150/255常转。我通常设置为150-200在保证散热和噪音之间取得平衡。你可以用tegrastats监控温度如果CPU/GPU温度持续高于70°C就需要提高风扇速度或检查散热片是否贴好。7. 常见问题与排查实录那些我踩过的坑没有人能一帆风顺下面是我在初期遇到的一些典型问题及解决方法希望能帮你快速排雷。7.1 系统启动类问题问题现象可能原因排查与解决上电后无任何反应指示灯不亮1. 电源未接通或电源适配器故障。2. Micro-USB供电且负载过重。1. 检查电源线是否插紧尝试更换一个5V/4A的直流电源。2.强烈建议弃用Micro-USB改用桶形直流电源接口供电。绿灯常亮但显示器无信号1. 显示器或HDMI线问题。2. 系统未正常启动如SD卡损坏。1. 更换HDMI线和显示器测试。2. 重新烧录系统镜像到SD卡确保使用Etcher工具并校验通过。启动过程中卡住或报错1. SD卡速度太慢或质量差。2. 系统镜像下载不完整或损坏。1.更换为Class 10或UHS-I的高速品牌SD卡。这是最常见的原因。2. 重新从官网下载镜像并计算SHA256校验和是否一致。7.2 外设与接口类问题问题现象可能原因排查与解决CSI摄像头无法识别ls /dev/video*看不到1. 摄像头排线未插好或损坏。2. 摄像头型号不兼容。1.重点检查关闭电源拔出排线确认金属触点朝外远离板卡中心重新插入并确保卡扣完全扣紧听到清脆的“咔哒”声。2. 确保使用的是树莓派官方摄像头或兼容的IMX219模块。USB摄像头画面卡顿或无法打开1. USB带宽不足尤其是USB 2.0摄像头在USB 3.0口上。2. 驱动不支持。1. 尝试更换不同的USB端口。如果使用USB集线器请确保是带外部供电的。2. 使用lsusb查看设备并搜索该型号对Linux UVC驱动的支持情况。GPIO控制不工作1. 引脚号弄错。2. 使用了错误的电压如输入5V。3. 未正确导出GPIO或权限不足。1. 对照官方引脚图/opt/nvidia/jetson-gpio/docs/pin_layouts/jetson_nano.jpg双重确认。2.牢记GPIO是3.3V电平连接5V设备需用电平转换模块。3. 使用sudo运行或将自己的用户加入gpio组。7.3 软件与性能类问题问题现象可能原因排查与解决pip安装Python包极慢或失败默认使用国外源网络连接差。更换为国内镜像源如清华源或阿里云源。编辑~/.pip/pip.conf没有则创建[global]index-url https://pypi.tuna.tsinghua.edu.cn/simple运行AI示例时卡顿、帧率低1. 处于5W低功耗模式。2. 内存或内存带宽瓶颈。3. 散热不足导致降频。1.sudo nvpmodel -m 0切换到10W模式。2. 使用tegrastats监控内存带宽AVG/MAX BW关闭不必要的后台进程。3. 检查风扇是否运转提高风扇转速确保环境通风。编译程序时提示“内存不足out of memory”物理内存RAM不足交换空间swap也未启用或不足。1. 增加交换空间。创建一个4GB的交换文件sudo fallocate -l 4G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile2. 将其加入/etc/fstab使其开机生效/swapfile swap swap defaults 0 0无法通过SSH连接1. IP地址变化。2. SSH服务未启动。3. 防火墙阻止Ubuntu默认无防火墙。1. 在路由器查看设备IP或直接在Nano接显示器用ifconfig查看。2.sudo systemctl status ssh检查服务状态未运行则sudo systemctl start ssh。3. 检查本地电脑和Nano是否在同一局域网。折腾Jetson Nano的初期大部分时间其实都花在了解决这些环境和小问题上。但每解决一个你对这套系统的理解就深一层。当你能稳定地远程登录流畅地跑起AI demo并清楚知道每个指示灯和日志的含义时你就已经跨过了入门最难的那道坎。接下来就可以真正开始你的项目了无论是做一辆自动驾驶小车一个智能监控摄像头还是一个交互式机器人这块小板子都为你搭好了舞台。记住耐心和仔细查阅文档尤其是NVIDIA官方的开发者论坛是你最好的朋友。