Jetson AGX Orin 配置

记录下对Nvidia机载电脑Jetson AGX Orin的配置过程:

  1. 使用SDKManager docker镜像刷JetPack高版本(5.x版本能直接识别带有IMU的设备, 而6.x版本需要使用uvc后端且无法识别带IMU的设备)

SDKManager刷机

参考闫金钢的Blog - Nvidia Jetson AGX Orin系统刷写

这里需要一条DC 12V的电源线,用来给AGX供电,还需要另一台带有Docker的电脑用来刷机,接线如下所示:

先接上电脑(白线) 再接上电源
img1 img1
如果进入了显示界面说明没成功进入刷机,关机后拔掉DC电源线,按住中间的按钮,插上中间的电源线,如果屏幕没有亮松开按钮,在电脑上输入lsusb可以看到一行NVIDIA Corp. APX信息,说明成功进入恢复模式。 如果没有12V DC直流电源线,使用type-C电源线插到DC插口上方的type-C接口上也是可以的。

可视化窗口安装

进入skd-manager下载界面点击.deb Ubuntu下载并安装在主机上,安装完成后,终端输入sdkmanager即可打开可视化窗口(如果打不开尝试sdkmanager --no-sandbox

STEP01 STEP02 STEP03
img1 img2 img3
连接上AXG,选择要刷的版本 选择要安装的程序 设置用户名与密码开始刷机

Docker CLI 安装 (推荐)

由于我的host主机是Ubuntu24.02,无法安装6.2.1和5.1.4,必须用镜像安装(Nvidia agx nano的最高版本支持就是6.2.1,7.*不再支持)

进入skd-manager下载界面,下载Docker Image Ubuntu18.04 (20.04)可以安装JetPack 5.x,Ubuntu22.04可以安装JetPack 6.2.1,下载完成后加载镜像,并重新命名为sdkmanager:

docker load -i sdkmanager-[版本号]-Ubuntu_18.04_docker.tar.gz
docker tag sdkmanager:[版本号]-Ubuntu_18.04 sdkmanager:latest

参考SDK Manager - Docker Images中的教程,执行如下命令行就可以安装5.1.4版本的了,如果不是AGX型号,修改--target JETSON_AGX_ORIN_TARGETS为对应的型号(全部支持的型号参考SDK Manager - target-device

docker run -it --privileged \
    -v /dev/bus/usb:/dev/bus/usb/ -v /dev:/dev -v /media/$USER:/media/nvidia:slave \
    -v ~/nvidia/sdkmanager_data:/home/nvidia/Downloads/nvidia \
    --name JetPack_AGX_Orin_Devkit --network host \
    sdkmanager --cli --action install --login-type devzone \
    --product Jetson --target-os Linux --version 5.1.4 \
    --target JETSON_AGX_ORIN_TARGETS --flash --license accept \
    --stay-logged-in true --collect-usage-data enable --exit-on-finish

这里在官方的基础上加了一行 -v ~/nvidia/sdkmanager_data:/home/nvidia/Downloads/nvidia,这样可以将下载的内容挂载到宿主机,无需重复下载

这部分主要分为两步,下载部件,烧录Ubuntu系统

自动开始部件下载,选择开始烧录 设置用户名,密码,其他默认选项 烧录系统,等待完成
img1 img2 img3

系统烧录完成后显示屏会亮起,输入用户名密码进入Ubuntu系统,连接和电脑的局域网(用热点也行),进行第二部分安装

选择Install,选择Ethernet cable,IPv4,输入AGX的IP 开始自动安装第二部分(CUDA, container等) 安装完毕!
img4 img5 img6

前置工作

  1. 如果有加装固态硬盘需要手动进行挂载,参考 常用命令及函数 - Linux - 格式化及挂载硬盘
  2. 配置Docker
  3. Ubuntu22.04以上版本Fcitx5的中文输入法安装及外观/字体大小调整,参考 从零配置Ubuntu全过程 - 安装中文输入法
  4. Clash快捷方式设置及自启动,参考 从零配置Ubuntu全过程 - Clash安装、快捷方式、自动启动
  5. 网络配置,如果agx和其他的主机需要通过网线直连,则要设置静态IP,参考 乐聚Kuavo机器人上位机静态网络配置
  6. VNC网页版可视化界面,参考 实现Linux无头模式下硬件加速的屏幕共享 - Nvidia Jetson可视化配置
  7. 推荐安装jtop查看显卡使用率:
    sudo apt install python3-pip
    sudo pip3 install -U jetson-stats
    jtop  # 类似nvitop
    通过jtop下方第六项CTRL,可以修改当前的功率大小,推荐开到最大功率 MAXN

如果发现 sudo apt update 中报错docker源不正确,可以直接删除 sudo rm /etc/apt/sources.list.d/docker.list 文件,再次更新则不会报错。(因为后续无需对docker升级所以删除源不会有影响)

Docker测试容器CUDA可用性

jetson-containers

GitHub - jetson-containers这里面有很多DockerFile,甚至他们帮忙设计好了build命令直接运行即可,参考文档安装上就能用,他们的命名规则为:

  • r32最低支持JetPack 4.*
  • r35最低支持JetPack 5.*
  • r36最低支持JetPack 6.*

这里推荐他们已经装好的镜像:

  • Ubuntu22.04, CUDA12.2, TensorRT, onnxruntime: docker pull dustynv/onnxruntime:r36.2.0

我在他们这个镜像基础上参考教程PyTorch for Jetson,使用pip wheel安装上了PyTorch 2.3以及torchvision 0.18

  • docker pull wtyyy/jetson:cuda12.2-torch-torchvision-onnxruntime-ubuntu22.04
    启动命令
docker run -it \
    --name cuda \
    --runtime=nvidia \
    --net=host \
    wtyyy/jetson:cuda12.2-torch-torchvision-onnxruntime-ubuntu22.04 bash

测试代码是否可用

cd ~/Coding/tests
python3 test_onnx.py
python3 test_onnx2.py
python3 test_torch.py
python3 test_torchvision.py

仅安装容器中驱动

在命令行中用 nvidia-smi 查看当前的CUDA最高支持版本,例如我安装的是6.2.1,可用CUDA版本为12.6,在Nvidia容器站 nvcr.io搜索 l4t 可以看到 NVIDIA L4T CUDA,在这里点击Tags找到对应的版本,例如我用的是 12.6.11-runtime,下拉镜像并启动:

docker pull nvcr.io/nvidia/l4t-cuda:12.6.11-runtime
docker run --name cuda --runtime=nvidia -it nvcr.io/nvidia/l4t-cuda:12.6.11-runtime
# 进入容器后测试显卡是否能找到, 如下图显示就是成功
nvidia-smi

容器CUDA测试

安装Pytorch, CUDA, cudnn

参考Nvidia - PyTorch for Jetson Platform可知,在nvcr.io - PyTorch中下载带有iGPU就是为Jetson准备的,可以直接下载对应的版本

RealSense SDK & ROS 安装

JetPack 5.x

直接按照官网的安装方法安装即可: 4. Install with Debian Packages
安装完成后执行realsense-viewer插上摄像头即可看到图像(IMU也可以识别)

JetPack 6.x (万能方法)

因为这个方法不依赖内核编译,理论上任何Linux设备都能直接使用,推荐用该方法安装。

参考realsense官方人员给出的回复(帖子),因为包含IMU摄像头为HID设备,需要MIPI驱动,安装这个驱动非常麻烦,参考realsense_mipi_platform_driver,基本没有仍和参考文档,根本装不上。

帖子下方给出了另一个很好的方法,基于libuvc_installation.md安装UVC后端的realsense即可,三行即可解决

wget https://github.com/IntelRealSense/librealsense/raw/master/scripts/libuvc_installation.sh
chmod +x ./libuvc_installation.sh
# 执行安装前推荐使用全cpu编译cmake效率更高
gnome-text-editor libuvc_installation.sh
# 找到倒数第3行, make -j2 改为
make -j${nproc}
# 推荐一并安装上pyrealsense2 (安装到系统默认的python中, 如果是conda则无需这样安装, 用 pip install pyrealsense2 安装)
# 找到 sudo apt-get install git cmake libssl-dev freeglut3-dev libusb-1.0-0-dev pkg-config libgtk-3-dev unzip -y 修改为
sudo apt-get install git cmake libssl-dev freeglut3-dev libusb-1.0-0-dev pkg-config libgtk-3-dev unzip python3-dev python3-pip -y
# 找到 cmake ../ -DFORCE_LIBUVC=true -DCMAKE_BUILD_TYPE=release 修改为
cmake ../ -DFORCE_LIBUVC=true -DCMAKE_BUILD_TYPE=release -DBUILD_PYTHON_BINDINGS:BOOL=true
# 保存退出
# 开始安装
./libuvc_installation.sh

D435i的IMU读取方法,如果直接打开realsense-viewer还是无法读取IMU数据,一读取就会报错,解决方法就是将相机的Firmware降级到适配你相机的最低版本,参考D455 Errors when activating imu stream in rs-viewer中的一条回复,方法很简单,先在Firmware releases D400找到你相继对应的最低驱动版本,例如我的D435i就是Version-5_12_7_100,下载解压得到*.bin文件,通过Firmware Update Tool安装教程(安装librealsense时候就附带安装了)安装

rs-fw-update  # 查看当前连接的相机驱动版本
rs-fw-update -f Signed_Image_UVC_5_12_7_100.bin  # 安装驱动

安装完成后执行realsense-viewer插上摄像头即可看到图像🥰(还可以看到IMU哦)
JetPack 6.1安装UVC后端显示realsense-viewer连接D435i

ROS2中启动realsense相机节点

我安装的ROS2版本为humble,直接按照官方给出的教程Ubuntu-Install-Debs即可轻松安装

完成ROS2安装后,参考No RealSense devices were found! 中的评论,必须使用源码编译方式安装才能检测到相机,参考官方realsense-ros installation-on-ubuntu Step3 Option2安装

安装colcon: sudo apt install python3-colcon-common-extensions
如果执行sudo rosdep init报错,参考CSDN - rosdep update — The read operation timed out 解决方法 (将所有raw.githubusercontent.com前面都加上代理)

完成全部安装后,以后就不要使用source /opt/ros/humble/setup.sh了,直接使用source /home/${USER}/ros2_ws/install/setup.sh加载ROS2环境即可

参考reddit - If I use ros2 built from source, can I use “sudo apt install ros-distro-package” to install packages??发现ROS2貌似不支持将自己编译的包,安装到root环境下,通过ros2_ws/install/setup.sh即可初始化整个ROS2环境+自定义包了

开三个终端分别启动如下指令

ros2 run realsense2_camera realsense2_camera_node  # 启动相机节点
rviz2  # 启动rviz2查看camera和DeepCloud
ros2 topic echo /camera/camera/accel/sample  # 查看IMU加速度信息节点

在rviz2中加入下图中左侧的窗口(点击Add按钮加入窗口),选择对应的topic节点,就可以看到效果啦🥳

使用rviz2查看ROS2启动的D435i相机相关节点

使用YOLOv11识别ROS相机节点

在虚拟环境中安装PyTorch

参考Error with Pytorch and Torchvision中回复的消息,可以使用Python官方的virtualenv创建环境(这个虚拟环境类似Conda,但更轻量),好处在于安装的Pytorch所需的numpy等包不会和root下ROS相关的包冲突,并且由于是从root中Python生成的环境,因此可以使用root下的包(也就是ROS包)

注意环境创建后不能再随便移动位置,因为pip安装绑定了创建时的路径

sudo apt install virtualenv
# 进入到环境安装的路径, 例如 mkdir ~/envs && cd ~/envs
virtualenv torch_env  # 环境名torch_env
source torch_env/bin/activate  # 进入环境, 类似conda activate <env_name>

直接通过wheel安装已编译好的torch-2.5.0和torhcvision-0.20.0(安装torch-2.6.0可能和这个版本的torchvision不兼容,可以尝试安装下)

wget http://jetson.webredirect.org/jp6/cu126/+f/5cf/9ed17e35cb752/torch-2.5.0-cp310-cp310-linux_aarch64.whl#sha256=5cf9ed17e35cb7523812aeda9e7d6353c437048c5a6df1dc6617650333049092
pip install torch-2.5.0-cp310-cp310-linux_aarch64.whl
wget http://jetson.webredirect.org/jp6/cu126/+f/5f9/67f920de3953f/torchvision-0.20.0-cp310-cp310-linux_aarch64.whl#sha256=5f967f920de3953f2a39d95154b1feffd5ccc06b4589e51540dc070021a9adb9
pip install torchvision-0.20.0-cp310-cp310-linux_aarch64.whl

其他jetpack版本可以在devpi - jetson-ai-lab中找到

安装完成后执行python -c "import torch; import torchvision; print(torch.__version__, torchvision.__version__); print(torch.cuda.is_available());"看看有没有抱错,输出

2.5.0 0.20.0
True

就说明安装成功了,由于我们还需要YOLOv11识别所以还需安装

pip install ultralytics

编写相机节点launch文件

我们想控制读取到相机的分辨率,于是想手动写一个ROS2 package的launch文件来一键启动节点及我们的配置文件,还是在~/ros2_ws/src下继续创建:

cd ~/ros2_ws/src
ros2 pkg create my_rs_launch
cd my_rs_launch
mkdir config && cd config
vim rs_camera.yaml  # 贴入下文信息
cd ..
mkdir launch && cd launch
vim rs_launch.py  # 贴入下文信息

这个文件就是在之前编译realsense2_camera包中提供的启动文件上修改了config_file的默认值(就是创建的config/rs_camera.yaml),源文件位置: ~/ros2_ws/install/realsense2_camera/share/realsense2_camera/launch,在rs_camera.yaml中选择你想要的分辨率大小即可,后续Python读入的就是这个分辨率

完成文件创建后,回到cd ~/ros2_ws,使用相对路径编译(如果报错rm -rf build log install删除之前缓存即可)

cd ~/ros2_ws
colcon build --symlink-install
source ~/ros2_ws/install/setup.sh
ros2 launch my_rs_launch rs_launch.py  # 启动节点
# 注意日志中的信息, Open profile: stream_type: Color(0), Format: RGB8, Width: 640, Height: 480, FPS: 30
# 应该就和rs_camera.yaml中配置的相同

YOLOv11识别

启动我们自定义的rs_launch.py文件后,随便找个地方创建如下代码并运行(需进入torch_env环境哦)

运行效果图,可以看到实时画面与FPS,调整rs_camera.yaml中的分辨率,Python获取的同时会变,但是FPS貌似只在40以下

YOLOv11预测代码只需对上述代码小修即可(如果模型下载太慢,建议用浏览器挂VPN下下来,拷贝到当前工作路径下):

模型 总功率 速度
YOLOv11l 32W 18FPS
YOLOv11m 30W 18FPS
YOLOv11n 25W 24FPS

Jetson AGX Orin 配置
https://wty-yy.xyz/posts/25605/
作者
wty
发布于
2024年12月29日
许可协议