3. Jetson开发环境搭建

在无人机视觉AI部署工程中,Jetson 是机载算力平台的核心。无论是 Jetson Orin Nano、Orin NX 还是 Xavier NX,其软件栈都围绕 NVIDIA JetPack SDK 构建。JetPack 并不是一个单独的安装包,而是由 L4T(Linux for Tegra)系统镜像、Ubuntu 根文件系统、CUDA、cuDNN、TensorRT、OpenCV、VPI 等组件组成的完整开发包。理解 JetPack 的层次结构,是后续部署 YOLO、RT-DETR 等视觉模型的前提。

一、JetPack SDK 的组成与安装路径

JetPack 的版本与 L4T、Ubuntu、CUDA 存在严格对应关系。例如 JetPack 5.x 对应 L4T 35.x 与 Ubuntu 20.04,JetPack 6.x 对应 L4T 36.x 与 Ubuntu 22.04。安装方式主要有三种:SDK Manager 图形化刷机、SD 卡镜像烧录、以及 apt 在线升级。对于无人机项目,推荐使用 SDK Manager 完成首次刷机,因为它能一次性写入系统并安装 CUDA、cuDNN、TensorRT 等组件。

# 在 Ubuntu 主机上安装 SDK Manager
sudo apt install ./sdkmanager_2.x.x_amd64.deb
sdkmanager

# 选择目标设备:Jetson Orin Nano 8GB
# 选择 JetPack 6.0,勾选 Jetson Linux、CUDA、cuDNN、TensorRT、OpenCV
# 进入 Recovery 模式后开始刷机

刷机完成后,Jetson 首次启动会进入 Ubuntu 初始化向导。此时需要设置用户名、密码、时区与网络。对于无人机场景,建议固定用户名(如 uav)并开启 SSH,方便后续远程登录。

JetPack 软件栈与开发链路 Ubuntu 主机 SDK Manager USB-C / Recovery 刷写 L4T 镜像 安装 CUDA / cuDNN Jetson 设备(L4T + Ubuntu) CUDA 12.x GPU 并行计算 cuDNN 9.x 深度神经网络加速 TensorRT 推理引擎 OpenCV 4.x + VPI + GStreamer 图像采集、编解码与视觉加速 远程开发主机 VS Code Remote-SSH JupyterLab rsync / scp 同步 调试与验证链路 nvidia-smi → deviceQuery → cuDNN 版本校验 TensorRT trtexec 基准测试 GStreamer 摄像头 / RTSP 拉流验证 部署流程:刷机 → 系统配置 → 环境验证 → 远程连接 → 模型部署 每一步都需确认版本匹配,避免 CUDA / cuDNN / TensorRT 版本冲突

二、Ubuntu 系统配置要点

Jetson 上的 Ubuntu 与普通 x86 Ubuntu 存在差异,配置时需注意以下几点:

  • 电源模式:使用 sudo nvpmodel -m 0 切换为最大性能模式,并用 sudo jetson_clocks 锁定最高频率,避免无人机飞行中因降频导致推理抖动。
  • 交换空间:Jetson 内存有限,建议将 swap 调整为 8GB 以上,防止大模型加载时 OOM。
  • 风扇控制:通过 jetson_clocks 或 /sys/devices/pwm-fan 设置风扇曲线,保证机载散热。
  • 网络与 SSH:配置静态 IP 或 DHCP 保留,开启 sshd,便于地面站远程登录。
  • 时间同步:安装 chrony 或 systemd-timesyncd,确保多传感器时间戳一致。
# 常用系统配置命令
sudo nvpmodel -m 0
sudo jetson_clocks
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 开启 SSH
sudo systemctl enable ssh
sudo systemctl start ssh

三、CUDA 与 cuDNN 环境验证

刷机完成后,必须验证 CUDA 与 cuDNN 是否可用。Jetson 的 CUDA 通常安装在 /usr/local/cuda,cuDNN 头文件与库位于 /usr/include 与 /usr/lib/aarch64-linux-gnu。验证步骤如下:

# 1. 检查 CUDA 版本
nvcc --version
# 输出应类似:Cuda compilation tools, release 12.2, V12.2.140

# 2. 检查 cuDNN 版本
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 或
dpkg -l | grep cudnn

# 3. 运行 deviceQuery
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
# 看到 Result = PASS 表示 CUDA 可用

# 4. 运行 bandwidthTest
cd /usr/local/cuda/samples/1_Utilities/bandwidthTest
sudo make
./bandwidthTest
如果 nvcc 找不到,请将 /usr/local/cuda/bin 加入 PATH,并将 /usr/local/cuda/lib64 加入 LD_LIBRARY_PATH。可在 ~/.bashrc 中追加:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

四、远程开发与调试方法

无人机机载 Jetson 通常不接显示器,远程开发是常态。推荐三种方式组合使用:

方式 工具 适用场景 关键命令/配置
SSH 终端 OpenSSH 命令行调试、运行脚本 ssh uav@192.168.1.100
VS Code Remote Remote-SSH 插件 代码编辑、断点调试 配置 ~/.ssh/config
JupyterLab jupyterlab 模型推理可视化、图像调试 jupyter lab --ip=0.0.0.0 --port=8888
文件同步 rsync / scp 模型权重、数据集传输 rsync -avz ./model uav@jetson:/home/uav/

在 VS Code 中,安装 Remote-SSH 后,通过 Ctrl+Shift+P 输入 Remote-SSH: Connect to Host,填写 uav@192.168.1.100 即可在本地编辑 Jetson 上的代码。调试 Python 时,可直接使用 debugpy 附加到远程进程,观察 TensorRT 推理耗时与显存占用。

远程调试时,务必确认 Jetson 与地面站处于同一网段,且防火墙未拦截 22、8888 端口。若使用 4G/5G 图传,建议通过 VPN 或反向 SSH 隧道接入,避免直接暴露公网 IP。

五、常见误区与复盘

在实际项目中,环境搭建阶段最容易出现以下问题:

  1. 版本不匹配:JetPack 6.0 自带 CUDA 12.2,若手动安装 PyTorch 时选择了 CUDA 11.8 的 wheel,会导致 libcudart.so 找不到。应使用 NVIDIA 官方为 Jetson 编译的 PyTorch 轮子。
  2. 忽略电源模式:默认模式为 15W,推理帧率可能只有最大性能模式的一半。部署前务必执行 nvpmodel -m 0 与 jetson_clocks。
  3. cuDNN 验证不充分:仅用 dpkg -l 查看版本不够,应实际运行一个卷积网络前向推理,确认 cuDNN 算子可调用。
  4. 远程连接不稳定:Wi-Fi 信号弱时,SSH 会频繁断连。建议使用有线网口或 5GHz Wi-Fi,并配置 ServerAliveInterval。
复盘建议:将刷机、配置、验证、远程连接四个阶段写成可重复执行的脚本,并记录每一步的版本号与输出日志。这样在更换 Jetson 设备或重刷系统时,可以快速复现环境,减少重复踩坑。

完成本章环境搭建后,Jetson 已具备 CUDA 加速、cuDNN 推理与远程开发能力,为后续 TensorRT 模型转换、YOLO 部署与无人机视觉流水线打下基础。