1、Jetson平台介绍:Jetson系列硬件对比、JetPack SDK安装、系统初始化配置

大家好,欢迎来到《Jetson摄像头图像采集与处理实战》的第一章。

说实话,每次带新人入门Jetson,我都要花不少时间讲清楚平台本身。因为很多人一上来就急着跑模型,结果发现摄像头不工作、SDK版本不对、系统起不来——嗯,这些坑我都踩过。所以这一章,咱们先把地基打牢。

1.1 Jetson系列硬件对比:选对板子,少走弯路

Jetson家族目前主流的几款产品,我按自己的使用经验给大家排个序。你想想看,做嵌入式视觉,选硬件就像选工具——工具不对,活干得别扭。

型号 AI算力 内存 摄像头接口 典型功耗 我的推荐场景
Jetson Nano (4GB) 472 GFLOPS 4GB LPDDR4 1x CSI-2 (2-lane) 5W-10W 入门学习、简单分类任务
Jetson TX2 NX 1.33 TFLOPS 4GB/8GB LPDDR4 2x CSI-2 (4-lane) 7.5W-15W 中等算力需求、多路摄像头
Jetson Xavier NX 21 TOPS 8GB/16GB LPDDR4x 2x CSI-2 (4-lane) 10W-20W 实时检测、语义分割
Jetson AGX Orin 275 TOPS 32GB/64GB LPDDR5 4x CSI-2 (4-lane) 15W-60W 多路高清、大模型推理

我个人习惯:做原型验证用Xavier NX,性价比最高。量产项目如果预算充足,直接上AGX Orin,省心。

这里有个关键点——摄像头接口。Jetson Nano只有1路2-lane的CSI,说白了就是只能接一个摄像头,而且带宽有限。我在项目中遇到过客户想用Nano接双目摄像头做深度估计,结果发现带宽不够,画面掉帧严重。后来换了TX2 NX才搞定。

避坑指南:我曾经因为没仔细看CSI lane数,买了个4-lane的摄像头模块,结果插在Nano上只能降级用2-lane模式,分辨率上不去。选硬件前,一定先查清楚你的板子支持几路、几lane的CSI。

1.2 JetPack SDK安装:别急着点下一步

JetPack是NVIDIA为Jetson定制的SDK,里面包含了Linux系统、CUDA、cuDNN、TensorRT、多媒体API(如v4l2、gstreamer)等。说白了,你装好JetPack,就等于有了一个完整的嵌入式AI开发环境。

安装方式有两种,我分别说说。

方式一:SDK Manager(推荐,省心)

在Ubuntu主机上装SDK Manager,然后通过USB-C线连接Jetson板子。它会自动帮你刷系统、装驱动、配环境。

# 1. 下载SDK Manager
# 从NVIDIA官网下载 .deb 包
sudo dpkg -i sdkmanager_*.deb

# 2. 启动
sdkmanager

# 3. 选择你的Jetson型号和JetPack版本
# 我建议选最新LTS版本,比如JetPack 5.1.x
# 勾选:Jetson Linux + CUDA + TensorRT + OpenCV + Multimedia

# 4. 点击安装,等20-30分钟

小技巧:安装过程中,SDK Manager会问你「是否要安装Jetson上的组件?」——选「是」。别像我第一次那样,以为只装主机端就行,结果板子连CUDA都没有。

方式二:手动刷机(适合老手)

如果你不想用SDK Manager,或者网络环境不好,可以手动下载镜像然后用balenaEtcher烧录到SD卡或NVMe硬盘上。

# 下载Jetson Nano的官方镜像
# 解压后得到 .img 文件
# 用balenaEtcher烧录到64GB以上的SD卡

# 插卡上电,第一次启动会做初始化配置
# 设置用户名、密码、时区、WiFi等

注意:手动刷机后,记得手动安装CUDA和TensorRT。SDK Manager会自动帮你装好,手动刷机可不会。我曾经帮同事排查了半天,发现他刷完系统没装CUDA,跑模型全是CPU在算。

1.3 系统初始化配置:让板子跑起来

系统装好后,别急着接摄像头。先做几件事,能省掉后面90%的麻烦。

1.3.1 设置电源模式

Jetson板子默认是低功耗模式,性能没跑满。我建议先切到最大性能模式。

# 查看当前模式
sudo nvpmodel -q

# 切换到最大性能模式(比如MAXN)
sudo nvpmodel -m 0

# 设置风扇自动(如果有)
sudo jetson_clocks

为什么这么做?因为摄像头采集+图像处理很吃CPU和GPU。我在项目里遇到过,默认模式下采集1080p@30fps都卡,切到MAXN后稳如狗。

1.3.2 检查摄像头设备

接上摄像头后,先确认系统能不能识别到。

# 查看摄像头设备节点
ls /dev/video*

# 一般CSI摄像头会显示 /dev/video0 或 /dev/video1
# USB摄像头会显示 /dev/video2 等

# 用v4l2查看摄像头信息
sudo apt install v4l-utils
v4l2-ctl --list-devices
v4l2-ctl -d /dev/video0 --list-formats

经验之谈:如果ls /dev/video* 看不到设备,先检查摄像头排线是否插紧。CSI接口的排线很容易松动,我至少被坑过三次。

1.3.3 安装必要的库

咱们做图像采集,OpenCV和GStreamer是标配。JetPack自带了OpenCV,但版本可能不是最新的。我习惯自己再装一些辅助库。

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装GStreamer插件(摄像头采集必备)
sudo apt install gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad

# 安装Python开发环境
sudo apt install python3-pip python3-dev

# 安装Jetson专用的GPIO库(如果要用到)
sudo pip3 install Jetson.GPIO

1.3.4 验证摄像头是否工作

最后一步,用GStreamer管道测试一下摄像头能不能出图。

# 对于CSI摄像头(以IMX219为例)
gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! \
    'video/x-raw(memory:NVMM),width=1280,height=720,framerate=30/1' ! \
    nvvidconv ! ximagesink

# 对于USB摄像头
gst-launch-1.0 v4l2src device=/dev/video2 ! \
    'video/x-raw,width=640,height=480' ! \
    ximagesink

如果能看到画面,恭喜你,环境配好了。如果黑屏或报错,别慌——大概率是摄像头型号不匹配或者排线问题。

我的习惯:每次拿到新板子,我都会先跑一遍这个GStreamer命令。它能快速验证摄像头硬件、驱动、多媒体框架是否都正常。比写Python代码快多了。

本章小结

这一章我们做了三件事:

  • 对比了Jetson系列硬件,知道怎么选板子
  • 安装了JetPack SDK,搞定了开发环境
  • 做了系统初始化配置,让摄像头能正常工作

下一章,咱们就要正式开始写代码了——用OpenCV和GStreamer采集摄像头图像。到时候我会分享一些我在实际项目中踩过的坑,比如帧率不稳定、图像颜色不对这些问题怎么解决。

嗯,今天就到这儿。有问题欢迎交流。