目录
文档说明:本文档参考、链接了大量博文,在此表示感谢!!!
我的设备:Jetson Xavier NX,部分过程同样适用于其他 Jetson 设备
1 刷机
博主使用虚拟机进行刷机,实操过程中,存在以下两个问题:
一是提示磁盘空间不足,我给了虚拟机20G的磁盘,当时忘记截图了,建议给50G以上,也有可能是我按默认选项进行刷机,需要下载的文件比较多的原因。
二是下载速度很慢,即使我使用桥接模式,并在win11主机科学上网,下载速度依旧很慢且不稳定,不过并没有尝试给虚拟机安装clash。
综上,如果使用NVIDIA SDK MANAGER刷机,建议使用可以科学上网的对应版本的Ubuntu主机给Jetson刷机。
此外,由于我的Jetson Xavier NX的磁盘空间有限,无法安装NVIDIA SDK MANAGER默认的所有文件,因此刷机时只刷了Jetson OS,CUDA等驱动后续手动安装。
另外,刷机完成后,没有中文显示,无法中文输入,即使设置中都改为China、Chinese也不行,原因可能是相应资源没有下载,在“区域与语言”设置界面中点击“管理已安装的语言”,系统将自动检测并下载相应的语言和输入法资源,如下图所示(忘记截英文界面的图了)。
2 远程桌面与远程文件传输
Jetson的性能较差,开发过程中难免需要使用自己的电脑查阅资料。为避免开发过程中“两个显示器两套键盘两套鼠标的繁琐情况”,需要远程Jetson的桌面。
之前我尝试过安装虚拟显示软件,但每次开机图形化桌面就会消失,只剩文本界面,导致RealVNC无法远程,后续还是老老实实使用HDMI欺骗器了,方便又好用。
3 上电自启动
很多时候,Jetson是放在机器人内部的,无法手动开机,需要设置上电自启动。
4 安装 jtop 工具
更便捷的查看、管理Jetson硬件资源,如下图所示。
5 外接硬盘挂载到 /home
6 外接硬盘挂载到 /
Jetson板卡上的硬盘容量较小,需要将 / 迁移到外接硬盘。
(1)外接硬盘设备名确认
sudo fdisk -l
可见,我的外接硬盘设备名为 /dev/nvme0n1。
(2)外接硬盘分区与格式化
外接硬盘分区与格式化请参考 “ 5 外接硬盘挂载到 /home ” 。
记录分区的UUID:
sudo blkid | grep /dev/nvme0n1p1
(3)临时挂载外接硬盘
sudo mkdir /mnt/new_root
sudo mount /dev/nvme0n1p1 /mnt/new_root
(4)复制根目录
sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/new_root/
(5)更新外接硬盘的引导配置
编辑 fstab 文件,确保根目录指向外接硬盘的UUID:
sudo gedit /mnt/new_root/etc/fstab
修改根目录行,替换为外接硬盘的UUID:
UUID=xxxx-xxxx-xxxx-xxxx / ext4 defaults 0 1
(6)修改Jetson的引导文件
Jetson设备使用 extlinux.conf 引导,需要更新根目录参数:
sudo gedit /boot/extlinux/extlinux.conf
找到 APPEND 行,修改 root= 参数为外接硬盘的UUID:
APPEND root=UUID=xxxx-xxxx-xxxx-xxxx rootwait rootfstype=ext4
(7)重启验证
sudo reboot
df -h | grep /dev/nvme0n1p1
最终效果如下图所示,这样就可以肆无忌惮下载各种库、包、数据了。
7 免密
免密
该篇博文插入内容存在问题,应该插入以下内容:
# 替换 username 为用户名
username ALL=(ALL:ALL) NOPASSWD:ALL
8 安装 CUDA cuDNN TensorRT
这些驱动用于加速神经网络等的运行,请务必安装对应于 Jetpack 和 CUDA 版本的驱动,我之前安装的 cuDNN8.9.6 并不适配 CUDA11.4,导致无法进行卷积操作。
安装前通过 jtop 查看 Jetpack 的版本,如下图所示,可见,我的 Jetpack 版本为5.1.4,我选择 CUDA11.4,cuDNN8.6.0,TensorRT8.2.3。
(1)安装 CUDA
安装 CUDA
sudo apt-get update
sudo apt-get install cuda-toolkit-11-4
配置环境变量
sudo gedit ~/.bashrc
# 末尾插入以下内容并保存
export PATH=/usr/local/cuda-11.4/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
source ~/.bashrc
验证安装
nvcc -V
(2)安装 cuDNN
从NVIDIA官网下载cuDNN 安装包 ,选择 Linux aarch64 版本,我下载的是 cudnn-local-repo-ubuntu2004-8.6.0.163_1.0-1_arm64.deb
安装 cuDNN 本地包
sudo dpkg -i cudnn-local-repo-ubuntu2004-8.6.0.163_1.0-1_arm64.deb
可能存在GPG相关报错,将 GPG 密钥文件复制到 /usr/share/keyrings/ 目录
sudo cp /var/cudnn-local-repo-ubuntu2004-8.6.0.163/cudnn-local-04A93B30-keyring.gpg /usr/share/keyrings/
重新运行安装指令
更新本地软件源
sudo apt update
安装 cuDNN
sudo apt install libcudnn8
配置环境变量
sudo gedit ~/.bashrc
# 末尾插入以下内容并保存
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CPATH=/usr/local/cuda/include:$CPATH
export PATH=/usr/local/cuda/bin:$PATH
source ~/.bashrc
验证安装
dpkg -l | grep libcudnn
(3)安装 TensorRT
从NVIDIA官网下载TensorRT 安装包 ,我下载的是 nv-tensorrt-repo-ubuntu2004-cuda11.4-trt8.2.3.0-ga-20220113_1-1_arm64.deb
安装 TensorRT 本地包
sudo dpkg -i nv-tensorrt-repo-ubuntu2004-cuda11.4-trt8.2.3.0-ga-20220113_1-1_arm64.deb
可能存在GPG相关报错,添加 GPG 密钥
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
重新运行安装指令
更新本地软件源
sudo apt update
安装 TensorRT
sudo apt-get install tensorrt
验证安装(安装中被升级到了 8.5.2 版本)
dpkg -l | grep TensorRT
9 安装 miniconda
安装 miniconda 以管理 python 环境,且方便未来迁移。由Anaconda官网下载 miniconda 安装包,我下载的是 Miniconda3-latest-Linux-aarch64.sh。
安装 miniconda
bash Miniconda3-latest-Linux-aarch64.sh
验证安装
conda -V
设置终端打开时不自动激活 conda 环境
conda config --set auto_activate_base false
设置终端默认激活特定的 conda 虚拟环境
conda config --set auto_activate_base false
# 配置环境变量,替换 env_name 为环境名
echo "conda activate env_name" >> ~/.bashrc
source ~/.bashrc
10 pip 使用国内镜像源
# 例如
pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
11 安装 torch torchvision
安装 torch 和 torchvision,以更好地支持深度神经网络的运行。
根据 Jetpack 版本,选择对应的 torch 和 torchvision 版本,并下载,下载地址分别是 PyTorch for Jetson 和 pytorch / vision。
我的 Jetpack 版本为5.1.4,下载的分别是 torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl 和 vision-0.16.0.tar.gz。
非手动下载安装可参考这篇博文 PyTorch&Torchvision安装,下文是手动下载后安装。
(1)安装 torch
我安装在新建的 conda 环境 py38 中。
在 torch 安装包所在文件夹打开终端,进入 py38 环境
安装依赖项
sudo apt install libopenblas-dev
安装 torch
pip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
验证安装
pip list
python
import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.backends.cudnn.version())
(2)安装 torchvision
解压 vision
tar -zxvf vision-0.16.0.tar.gz -C 目标路径
进入 vision 解压包,进入 py38 环境
安装依赖项
sudo apt install libjpeg-dev libpng-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install ninja-build cmake
pip install numpy requests Pillow
编译安装 torchvision
# 设置环境变量
export BUILD_VERSION=0.16.0
# 编译安装 torchvision
python3 setup.py install --user
验证安装
pip list
python
import torchvision
print(torchvision.__version__)
12 conda 环境运行 ROS
wget http://fishros.com/install -O fishros && . fishros
conda 虚拟环境安装 ROS 包
pip install rospkg rospy catkin_tools
ROS 在原生环境和 conda 环境下的运行测试参考该博文,如何在ROS中使用anaconda虚拟环境?
为了每次打开终端都能直接在 conda 环境下运行 ROS,有以下两种方法:
方法一:设置终端默认激活特定的 conda 虚拟环境
见 9 安装 miniconda
方法二:配置 conda 虚拟环境为默认 python 环境,以我创建的 py38 为例
- 将相关 ROS 程序第一行的环境路径更改为 conda 虚拟环境的路径,仅对当前程序有效。
#!/home/your_username/miniconda3/envs/py38/bin/python3
- 添加 conda 虚拟环境的环境变量到 .bashrc 文件中,对所有程序有效,且不受程序第一行环境路径影响。
# 末尾插入以下内容并保存,替换 your_username 为用户名
export PYTHONPATH=/home/your_username/miniconda3/envs/py38/lib/python3.8/site-packages:$PYTHONPATH
source ~/.bashrc
13 安装 PyCharm 和 VSCode
PyCharm下载地址
VSCode下载地址
我分别下载的 pycharm-community-2024.3.tar.gz 和 code_1.83.1-1696982739_arm64.deb
(1)安装 PyCharm
可参考这篇博文ubuntu22.04下安装.tar.gz格式文件中的第二类软件安装过程。
- 解压
tar -zxvf pycharm-community-2024.3.tar.gz -C 目标路径
- 安装Java运行环境
sudo apt update
# 安装Java17
sudo apt install oracle-java17-installer
# 设置环境变量
sudo gedit ~/.bashrc
# 添加以下内容
export JAVA_HOME=/usr/lib/jvm/java-17-oracle
export PATH=$PATH:$JAVA_HOME/bin
# 重新加载环境变量
source ~/.bashrc
- 运行
cd 目标路径/bin
./pycharm.sh
运行后在软件设置中设置中文语言、创建桌面快捷方式。
(2)安装 VSCode
安装包路径下执行安装指令:
sudo dpkg -i code_1.83.1-1696982739_arm64.deb
从终端启动:
code
# 若code无法启动,或者启动后提留在界面不显示内容,请尝试以下指令
code --no-sandbox
从桌面快捷方式无法启动原因同上,具体解决方法请参考这篇博文Jetson Xavier NX安装VS Code无法启动问题解决
VSCode插件配置请参考的古月居ROS2开发环境配置
14 YOLOv8 目标检测
windows端训练过程参考这篇博文windows使用YOLOv8训练自己的模型
训练后部署到Jetson。确保 Jetson 安装了对应于 Jetpack 版本的 CUDA、cuDNN、TensorRT 驱动,python 环境中安装了相应版本的 torch、torchvision,版本错误可能导致无法进行卷积等操作。
部分代码如下:
# YOLOv8实时检测(使用GPU加速)
results = model.predict(
source=frame,
conf=0.5, # 置信度阈值
imgsz=640, # 输入尺寸(越小越快)
device="0", # 显式指定使用GPU 0
half=True, # 启用FP16半精度推理(提升速度)
verbose=False # 关闭冗余输出
)
实现效果如下:
更加全面的 Jetson 配置 YOLOv11 环境,请参考该专栏Jetson配置YOLOv11环境
15 Yolov8_ros
此部分参考该博文,yolov8 ros 功能包
roslaunch usb_cam usb_cam-test.launch 输出图像的话题名为 /usb_cam/image_raw ,因此 yolo_v8.launch 中修改为此。
会报错找不到 yolov8_ros_msgs ,如下图所示。需要将工作空间的 setup.bash 添加到环境变量中。
source /工作空间/devel/setup.bash
最终效果如下图。
持续更新······