news 2026/10/5 8:59:41

NVIDIA Jetson Xavier NX 刷机、ROS 与深度学习环境配置全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NVIDIA Jetson Xavier NX 刷机、ROS 与深度学习环境配置全攻略

第一次拿到NVIDIA Jetson Xavier NX,很多人的第一反应是“这不就是个带显卡的树莓派嘛,插电就能玩”。等真正动手才发现,刷系统、装ROS、配深度学习环境,每一步都能卡住一大批人。我前后折腾了三四天,踩过刷机识别不到设备、ROS apt源报错、PyTorch无法调用CUDA的一串坑,所以这篇干脆把整条链路串起来写一遍:Xavier NX刷机、ROS安装、深度学习配置全部走通。内容适合刚入手这块板子、准备拿来做机器人、无人机或边缘AI项目的朋友,也适合已经刷完机但卡在环境配置的人。下面所有操作我都按实际踩坑后的最优路径来写,尽量让你少走弯路。

1. 刷机前的版本决策:Xavier NX和JetPack怎么选才不后悔

1.1 Xavier NX在边缘设备里的定位

Jetson Xavier NX是NVIDIA Jetson家族里性价比很高的一个型号,算力大约21 TOPS(INT8),功耗范围10W到25W。体积比信用卡大不了多少,但跑小型深度学习模型、机器人视觉、多路相机处理都够用。和树莓派最大的区别在于,它自带Volta架构GPU和Tensor Core,可以本地跑CUDA、TensorRT这类加速库,而不是只靠CPU硬扛。

很多人忽略的一点是:Xavier NX并没有板载eMMC存储,系统需要装在MicroSD卡或NVMe SSD上,所以“刷机”这个动作几乎是必经之路。而刷机的核心并不只是把镜像写进卡里,而是选对JetPack版本——这一步直接决定你后面ROS和PyTorch能装到什么程度。

1.2 JetPack、Ubuntu、ROS三者的版本对应关系

Jetson上的系统镜像不叫“Ubuntu原版”,而是NVIDIA基于Ubuntu定制的JetPack。JetPack里面预装了CUDA、cuDNN、TensorRT、OpenCV等一堆驱动和库。现在Xavier NX最常用的两代是JetPack 4.6.x和JetPack 5.1.x,它们的差异会直接影响你后续选ROS版本。

对比项JetPack 4.6.4JetPack 5.1.2
Ubuntu版本18.0420.04
默认Python3.63.8
CUDA10.211.4
cuDNN8.28.6
TensorRT8.28.5
常用ROS1MelodicNoetic
常用ROS2一般较少Foxy / Galactic
PyTorch兼容性老版本较好新版本更顺

我现在的建议是:如果你不是必须用老项目里的ROS Melodic,直接上JetPack 5.1.2配Ubuntu 20.04。原因有三个——Python 3.8比3.6舒服太多、ROS Noetic是ROS1的最终长期维护版、新的深度学习框架对CUDA 11.x的适配明显更好。当然,如果你手头板子是16GB版本,这个选择同样适用,内存大小不影响系统版本选择。

1.3 刷机前需要准备的硬件

刷机和后续开发需要的东西不复杂,但少了任何一样都会卡壳:

  • 一台x86_64架构的Linux电脑(Ubuntu 18.04或20.04都可以,用于SDK Manager刷机)
  • 一根USB Type-C数据线,注意要能传数据,不要用纯充电线
  • 至少64GB的MicroSD卡,建议U3或A2速度等级
  • 如果考虑长期使用,准备一块M.2 NVMe SSD和转硬件(Xavier NX开发套件板载M.2接口)
  • 显示器(DP或HDMI)、键鼠、电源适配器

注意:Xavier NX开发套件的电源最好用官方原配,第三方电源在满载跑深度学习时容易电压跌落导致重启。这个我在后面还会提到。

2. 刷机实操:SDK Manager与SD卡直烧两条路线的完整对照

2.1 准备工作:进入USB Recovery模式

在开始刷机前,首先要让Jetson进入USB Recovery模式。这个步骤很多人第一次操作会很慌,其实流程非常固定:

  1. 用USB-C线把Xavier NX开发套件的USB-C口和Linux电脑连起来。
  2. 按住载板上的 Recovery(REC)按钮不要松开。
  3. 按一下 Reset 按钮,然后松开 Reset。
  4. 继续保持 REC 按钮按住大约3秒,再松开。

之后在Linux电脑上执行:

lsusb

如果看到类似NVIDIA Corp. APX的设备信息,说明Jetson已经成功进入恢复模式。看不到的话,先换一根USB线、换一个电脑USB口试试,不要急着换系统。这个报错绝大多数时候是线材问题。

2.2 用SDK Manager刷机的完整流程

SDK Manager是NVIDIA官方刷机工具,需要在Linux电脑上运行。下载安装后,流程如下:

  1. 登录NVIDIA开发者账号。
  2. 选择目标设备为 Jetson Xavier NX,选择JetPack版本。
  3. 勾选要安装的组件,一般全选。
  4. 选择安装目标存储设备:可以是MicroSD卡,也可以是NVMe SSD。
  5. 点击继续,等待下载和写入完成。

整个刷机过程里,SDK Manager会下载很大体积的组件包,所以Linux电脑至少要预留30GB以上磁盘空间。写入过程中Jetson会自动重启几次,这是正常的,不要中途断电,不要手贱去拔线。

刷机完成后,系统会自动重启进入Ubuntu桌面。首次启动会让你设置用户名、密码、主机名和时区,这一步和普通Ubuntu安装一样。

这里要单独说一句:SDK Manager刷机需要Linux宿主机,这是很多人卡住的地方。如果你手头只有Windows或Mac,其实也不用慌,可以用下面的SD卡直烧方案。

2.3 没有Linux宿主机时:SD卡直烧方案

如果你没有Linux电脑,最简单的办法是使用NVIDIA官方发布的SD Card Image镜像,配合写卡工具直接烧录。操作步骤如下:

  1. 从NVIDIA官网下载Xavier NX Developer Kit的SD Card Image,文件名通常是.img.xz压缩格式。
  2. Windows下用BalenaEtcher,Mac下也可以用Etcher,选择镜像,写入准备好的MicroSD卡。
  3. 写入完成后,把SD卡插进Jetson,连接显示器、键鼠、网线和电源,开机。
  4. 首次启动后同样会进入初始化设置界面,设置完账号密码就能进桌面。

这条路线的好处是门槛低,不需要Linux环境,整个流程大约15分钟就能看到桌面。但缺点是灵活性不如SDK Manager,后续如果你想换JetPack版本或把系统写到NVMe上,还是得回到SDK Manager或命令行工具。

2.4 两种刷机方案怎么选

我自己实际用过两条路线,结论很明确:如果只是先跑起来看看,SD卡直烧香。如果确定要做正经项目,尤其是要装大量ROS包和深度学习环境,建议一次到位用SDK Manager写NVMe SSD,或者先用SD卡启动,之后再把系统迁移到NVMe。

对比项SDK ManagerSD卡直烧
宿主机要求需要Linux电脑Windows/Mac/Linux都行
版本选择可自由选择JetPack只能用官方预打包镜像
目标存储SD卡或NVMe主要是SD卡
操作复杂度稍复杂简单
适合场景正式开发快速体验

刷完机进入系统后,下一步就是装ROS。这块我强烈建议先把系统源更新一遍,避免后续出现各种陈旧的软件包问题:

sudo apt update && sudo apt upgrade -y sudo reboot

3. ROS环境落地:手动安装与鱼香ROS一键安装的真实体验

3.1 选ROS1还是ROS2,这是第一个岔路口

JetPack 5.1.2对应的Ubuntu是20.04,所以主流选择是两条:

  • ROS1 Noetic:ROS1的最后长期支持版,生态成熟,网上资料最多,学ROS基本绕不开。
  • ROS2 Foxy:ROS2 LTS版本,面向多机器人、分布式、实时性要求更高的场景,DDS通信机制更现代。

我的建议是,如果你只是做课程设计和单机机器人项目,先装ROS Noetic会省心很多,因为大多数现成功能包和教程都是ROS1的。如果你一开始就想走ROS2路线,那就直接装Foxy或Galactic,不要中途来回切换,两个版本并存对新手来说很容易搞混环境。

注意:ROS1和ROS2的环境变量和命令工具不兼容,比如ROS1用catkin_make,ROS2用colcon build,切换时很容易忘记 source 哪个环境。

3.2 手动安装ROS Noetic的完整步骤

这里以ROS Noetic为例,这是我在Xavier NX上实测稳定的组合。手动安装看起来命令多,但每一步都是可解释的:

# 1. 启用Ubuntu universe和multiverse仓库 sudo add-apt-repository universe sudo add-apt-repository multiverse # 2. 添加ROS官方软件源 sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' # 3. 添加ROS仓库密钥 sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 # 4. 更新软件包列表 sudo apt update # 5. 安装ROS Noetic桌面版 sudo apt install ros-noetic-desktop # 6. 安装常用开发工具 sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential # 7. 初始化rosdep sudo rosdep init rosdep update # 8. 设置环境变量 echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc

这里最容易翻车的是两个地方。

第一,ROS软件源下载速度可能很慢。如果你遇到apt update卡住或者下载速率极低,可以把/etc/apt/sources.list.d/ros-latest.list里的地址换成国内镜像源,一般是直接替换域名前缀,然后再sudo apt update。

第二,rosdep update对网络依赖很强,如果一直失败,我的经验是不要死磕一次跑通,多试几次,或者换一个网络时段。rosdep主要是在编译源码功能包时帮你自动拉取依赖,如果你只是用apt安装现成功能包,暂时不跑源码编译的话,即使rosdep没初始化成功也不影响核心ROS使用。

3.3 鱼香ROS一键安装到底做了什么

在搜ROS安装资料的时候,你大概率会看到“鱼香ROS一键安装”这个词。这个工具在ROS社区里热度非常高,我也实际用过几次,确实能省不少事。

它的本质是一个交互式Shell脚,运行后会出现菜单,可以选择安装ROS1还是ROS2、更换软件源、安装常见依赖等。脚本会根据你的Ubuntu版本自动配置对应的ROS软件源和密钥,把上面手动安装的大部分步骤自动化。

我当时在Xavier NX上跑过一次,整体体验比手动安装顺滑,尤其是针对Ubuntu 20.04的ROS Noetic安装,它会帮你把apt源、密钥、python依赖都处理好。完成后,你只需要执行:

source /opt/ros/noetic/setup.bash

就能正常使用roscore、rosrun这些命令。

下面这个表格是我自己的对比感受:

对比项手动安装鱼香ROS一键安装
操作步骤8步以上选菜单即可
对网络要求对源稳定敏感脚本自动换源
排错难度需要自己定位问题报错提示相对友好
适合人群想彻底搞懂原理想快速跑通

我个人对一键脚本的态度是:工具本身没问题,但装完之后你最好还是看看它往系统里加了哪些源、装了哪些包,至少知道环境是怎么来的,后面出问题才不至于一脸懵。

如果你实在想省事,直接跑鱼香ROS一键安装完全OK,它不会破坏系统现有环境,只会往ROS相关目录里添加文件。关键是装完之后要验证一下环境是否正常。

3.4 验证ROS环境并创建工作空间

不管手动装还是一键装,装完都要验证。开一个终端:

roscore

保持这个终端不要关闭,再开一个新的终端:

rosnode list

如果能看到/rosout输出,说明ROS核心节点正常。接下来创建一个最基础的工作空间:

mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make source devel/setup.bash

工作空间是后面开发ROS功能包的基础目录结构。这时候如果你还想装bottle,比如sudo apt install ros-noetic-teleop-twist-keyboard、ros-noetic-rmpi之类,都能正常装上了。

4. 深度学习环境配置:PyTorch、TensorRT与Jetson专属部署链路

4.1 为什么不能直接pip install torch

很多人在自己的x86电脑上装PyTorch习惯了,一条pip install torch就能搞定。到了Jetson上如果照样执行,会遇到两种情况:要么提示找不到匹配的版本,要么装上了但是torch.cuda.is_available()返回False。

原因很简单:PyPI官方源上的torch多数只打包了x86_64架构,而Jetson是ARM架构。NVIDIA官方为Jetson提供了一套预编译的PyTorch wheel包,里面做了对Jetson GPU的针对性优化,所以必须用NVIDIA提供的那份。

4.2 安装PyTorch和torchvision并验证CUDA

我的路径是先确认当前JetPack版本,然后去NVIDIA官网的Jetson下载页面选择对应版本的torch wheel。JetPack 5.1.2对应Python 3.8,所以选文件名里带cp38的wheel文件,下载后用pip安装:

# 安装基础依赖 sudo apt update sudo apt install python3-pip libopenblas-dev libopenmpi-dev pip3 install --upgrade pip # 假设下载的wheel文件名为 torch-2.0.0a0+xxx-cp38-cp38-linux_aarch64.whl pip3 install torch-2.0.0a0+xxx-cp38-cp38-linux_aarch64.whl

torchvision也需要装对应版本,否则导入时可能报libnvbuf_utils.so或版本不匹配的错。安装方式和torch一样,找对应JetPack版本的wheel。

装完之后,先把CUDA路径写进环境变量:

echo "export PATH=/usr/local/cuda/bin:\$PATH" >> ~/.bashrc echo "export LD_LIBRARY_PATH=/usr/local/cuda/lib64:\$LD_LIBRARY_PATH" >> ~/.bashrc source ~/.bashrc

然后验证:

nvcc -V python3 -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); x=torch.rand(2,3).cuda(); print(x)"

看到torch.cuda.is_available()为True,就说明PyTorch能用上Xavier NX的GPU了。你还可以顺手跑一下:

python3 -c "import torch; print(torch.backends.cudnn.version())"

一般Jetson会输出CUDNN版本号,说明官方预编译的torch已经正确链接了cuDNN。

4.3 TensorRT:推理阶段的性能关键

JetPack自带TensorRT,这是NVIDIA的深度学习推理引擎,可以显著提高模型在边缘设备上的推理速度。对于Xavier NX来说,TensorRT几乎是必开的加速工具。

不过很多人在Jetson上用TensorRT会踩一个坑:系统里装了TensorRT运行时,但Python里import tensorrt会报ModuleNotFoundError。原因是JetPack自带的只是C++库,Python绑定需要额外安装wheel包。在JetPack 5.1.2上可以这样做:

ls /opt/nvidia/tensorrt/python/

会看到类似tensorrt-8.5.2.2-py3-none-linux_aarch64.whl的文件,然后:

pip3 install /opt/nvidia/tensorrt/python/tensorrt-8.5.2.2-py3-none-linux_aarch64.whl

装完验证:

python3 -c "import tensorrt as trt; print(trt.__version__)"

能输出版本号就说明TensorRT的Python接口可用了。

4.4 torch2trt把PyTorch模型转成TensorRT引擎

拿到PyTorch训练好的模型,想在Xavier NX上跑出更高帧率,最常用的路径是把PyTorch模型转成TensorRT引擎。这里我推荐NVIDIA官方维护的torch2trt工具,它能让你在PyTorch代码里直接用TensorRT推理,不用手写复杂的TensorRT API。

安装很简单:

git clone https://github.com/NVIDIA-AI-IOT/torch2trt cd torch2trt python3 setup.py install

用法和PyTorch很接近,比如加载一个训练好的分类模型:

import torch from torch2trt import torch2trt model = MyTorchModel().cuda().eval() x = torch.randn(1, 3, 224, 224).cuda() model_trt = torch2trt(model, [x], fp16_mode=True) # 推理时直接调用 output = model_trt(x)

这里一个重要经验是:fp16_mode=True在Xavier NX上有明显加速效果,虽然精度会有轻微变化,但多数视觉任务感知不到。如果你做的是检测或分割这类大模型项目,这个开关值得一开。

如果你想部署的是ONNX格式模型,也可以使用onnxruntime-gpu,但需要注意在Jetson上应该用NVIDIA提供的aarch64适配版本,而不是PyPI上的通用包。

5. 环境调优与高频踩坑:电源模式、SWAP和那些让人上火的报错

5.1 电源模式与风扇控制

Xavier NX默认的电源模式是多少,很多人刷完机后根本没注意。默认状态下,系统可能跑在15W甚至10W模式,GPU频率会被限制,导致深度学习推理速度比预期慢很多。

查看当前电源模式:

sudo nvpmodel -q

切换到最大性能模式:

sudo nvpmodel -m 0

JetPack 5.1.2中,-m 0一般对应最大功耗模式(可能是20W或25W,具体看你下载的电源管理表)。如果你不想记这个数字,也可以安装jtop,用可视化界面看:

sudo pip3 install jetson-stats jtop

jtop里面能直接看到GPU/CPU频率、温度、内存占用、换源模式切换,是Jetson开发必备工具。

风扇这块有个小坑:开发套件上的风扇默认是温控的,不跑重任务时几乎不转。如果你发现跑深度学习时温度很高、风扇不转或转速偏低,可以手动控制PWM:

# 查看当前风扇目标转速 cat /sys/devices/pwm-fan/target_pwm # 手动设置风扇转速,0为停转,255为全速 echo 200 | sudo tee /sys/devices/pwm-fan/target_pwm

不同内核版本路径可能略有差异,用jtop确认你的内核风扇设备路径最稳妥。

5.2 SWAP空间和存储加速

Xavier NX默认内存是8GB或16GB,跑大型模型训练时很容易直接把内存吃满。一个很典型的场景是:用PyTorch加载一个大模型,程序直接被OOM杀掉。解决办法之一是开一个swap文件。

sudo fallocate -l 8G /var/swapfile sudo chmod 600 /var/swapfile sudo mkswap /var/swapfile sudo swapon /var/swapfile echo '/var/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

加了8G swap之后,跑模型和编译代码的容错率会高不少,但要注意:SD卡上的swap读写速度很慢,真到swap被大量使用的时候,程序还是会卡。所以尽量把经常访问的大模型、数据集放在NVMe SSD上,别让SD卡成为性能瓶颈。

如果你有条件,最推荐的做法是直接把整块系统放到NVMe上。SDK Manager刷机时把目标存储选为NVMe即可,或者在SD卡系统启动后,用相关迁移工具把根文件系统dd到NVMe。我实测过的效果是:ROS编译时间、pip安装时间、模型加载时间都明显缩短,这个提升不是一点点。

5.3 高频报错排查表

最后把我折腾过程中遇到的高频报错整理成表,基本都是环境刚搭完时最容易碰到的:

现象根因解决方法
lsusb看不到APX设备USB线不支持数据传输或没进入恢复模式换线、换USB口,重新执行Recovery按键流程
apt update报Could not get lock系统后台有apt进程执行sudo pkill apt后重试,或sudo rm /var/lib/dpkg/lock-frontend
rosdep update卡住网络原因多试几次,换个网络时段,或检查DNS
nvcc -V提示找不到命令CUDA没加进PATH按4.2节写入~/.bashrc并source
import torch后torch.cuda.is_available()为False安装的是CPU版torch或普通PyPI版卸载重装,使用NVIDIA官方wheel包
import tensorrt报ModuleNotFoundError未安装Python绑定安装/opt/nvidia/tensorrt/python/下的whl文件
编译ROS包时内存不足被kill内存或swap不足开启swap,并适当限制编译并行任务数量
跑模型时机器唤醒或重启电源功率不足换原装电源,或降到较低电源模式运行

还有一个非常容易被忽视的问题:Jetson系统里默认可能装了多个Python版本。很多人在终端执行python进入的是Python2.7,然后pip装包装到了Python3环境,最后 import 时报错。建议统一用python3 -m pip来执行pip安装,并且确认当前shell使用的是哪个python版本。

python3 --version python3 -m pip --version

这能避免至少一半的“我明明装了为什么导入失败”类问题。

如果你已经按照前面的顺序走完一遍,Xavier NX现在应该已经具备了三个核心能力:稳定的Ubuntu系统、可用的ROS环境、能调用GPU的PyTorch和TensorRT。最后再分享一个我自己的习惯:每次做完一个环境变更,都抽空拍一下当时的系统状态,比如JetPack版本、Python版本、torch版本、ROS版本,记录下来贴在终端里最显眼的地方。因为Jetson上的环境版本匹配关系非常敏感,过两个月再回来,你很大概率会忘记当时是用哪套组合跑通的。有记录,哪怕以后重刷系统,也能很快恢复出同样的开发环境。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 8:58:44

MRAM工业嵌入式存储方案:MR25H40CDF与TM4C1294 SPI驱动及掉电保护实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/5 8:58:21

Java调用Python YOLO视频目标检测:ONNX导出与部署实战

简介:面向需要在Java服务中集成实时目标检测能力的开发者,这套方案以Java与Python协作为核心,支持YOLOv5、YOLOv7、YOLOv8主流模型导出为ONNX后直接调用。包内含68个文件,压缩包约271.96MB,包含17个Java源文件、1个Pyt…

作者头像 李华
网站建设 2026/10/5 8:56:43

Codex加了级联删除后,为什么删一条主记录,关联数据也跟着没了?

使用 ChatGPT、Codex 修改数据库表关系时,经常会遇到一种看起来“删除成功”,实际上影响范围远超预期的问题:明明只删了一条主记录,结果关联表里的任务、附件、评论甚至历史记录也一起没了。常见表现包括:删除一个项目…

作者头像 李华
网站建设 2026/10/5 8:56:28

AI智能体开发与上线:从Demo到生产级服务的工程实践

1. 项目概述:这不是写个脚本,而是构建一个能自己思考、决策、行动的数字同事 “AI 智能体(AI Agent)的开发与上线”——这八个字背后,藏着过去一年里我踩过最多坑、也收获最扎实成果的一整套工作流。它不是在Jupyter N…

作者头像 李华
网站建设 2026/10/5 8:55:36

uWSGI与Nginx生产部署实战:从原理到配置详解

1. 部署方案的整体设计思路1.1 为什么需要uWSGI:先搞清楚请求是怎么走的后面详细的操作很多人写过,但我还是想先聊一下架构层面的问题。因为这个东西如果不理解透,后面配置的时候很容易一头雾水,出了问题也不知道从哪排查。先说结…

作者头像 李华