GPIO

如果要在 Jetson 中使用硬件 PWM,则需要修改 Pinmux 表来多路复用。Jetpack 提供了一个名为 jetson-io 的工具,它允许创建和更新可以使用 PWM 的 dtb。

1
sudo /opt/nvidia/jetson-io/jetson-io.py

选择 Configure Jetson 40pin Header > Configure header pins manually , pwm7(32)选择并 BackSave pin changesSave and reboot to reconfigure pins,按下任意键后重启,即可完成设置。

在使用第三方载板时,jetson-io工具无法确定载板型号。需要手动配置引脚复用。

1
2
3
4
5
6
7
8
9
10
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ sudo cat /sys/kernel/debug/gpio | grep PG.06
gpio-389 (PG.06 |usbhub_power_en ) out lo
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ ^C
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ sudo cat /sys/kernel/debug/gpio | grep PH.00
gpio-391 (PH.00 |m2_KeyB_power_en ) out lo
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ sudo cat /sys/kernel/debug/gpio | grep PN.01
gpio-433 (PN.01 )
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ sudo cat /sys/kernel/debug/gpio | grep PCC.00
gpio-328 (PCC.00 |user-led ) out lo

但是载板并没有引出PWM引脚,使用GPIO模拟。

sudo apt-get install libgpiod-dev

sudo gpioinfo

设置 GPIO 高低:sudo gpioset —mode=wait gpiochip0 106=1

sudo gpioset —mode=wait gpiochip0 106=0

opencv

https://jishuzhan.net/article/2013776823067918337

需要手动编译OpenCV 以支持 CUDA 加速

一键安装脚本,修改version (OpenCV 版本),ARCH_BIN (CUDA 算力架构),PYTHON_VERSION_NUM (Python 版本)

Jetson 设备型号 架构代号 ARCH_BIN 修改值 备注
Jetson AGX Orin Ampere “8.7” 脚本默认值
Jetson Orin NX Ampere “8.7” 与 AGX Orin 相同
Jetson Orin Nano Ampere “8.7” 与 AGX Orin 相同
Jetson AGX Xavier Volta “7.2”
Jetson Xavier NX Volta “7.2”
Jetson TX2 Pascal “6.2”
Jetson Nano (B01) Maxwell “5.3” 老款 Nano 请填这个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/bash
#
# Copyright (c) 2024.
# Modified for Jetson Orin NX (CUDA Arch 8.7)
# Based on instructions for OpenCV 4.10.0
#

# ================= 配置区域 (Config Area) =================

# 1. OpenCV 版本
version="4.10.0"

# 2. CUDA 算力架构 (重要!)
# Orin 系列 (AGX Orin, Orin NX, Orin Nano) -> 8.7
# Xavier 系列 -> 7.2
# Nano/TX1 -> 5.3
ARCH_BIN="8.7"

# 3. Python 版本 (根据你的系统修改)
# 运行 'python3 --version' 查看
# Jetpack 5 (Ubuntu 20.04) 通常是 3.8
# Jetpack 6 (Ubuntu 22.04) 通常是 3.10
PYTHON_VERSION_NUM="3.8"

# 工作目录
folder="workspace"

# =========================================================

set -e

# ---------------------------------------------------------
# 0. 清理旧版本交互
# ---------------------------------------------------------
for (( ; ; ))
do
echo "Do you want to remove the default OpenCV (yes/no)?"
read rm_old

if [ "$rm_old" = "yes" ]; then
echo "** Remove other OpenCV first"
sudo apt -y purge *libopencv*
break
elif [ "$rm_old" = "no" ]; then
break
fi
done

echo "------------------------------------"
echo "** Install requirement (1/4)"
echo "------------------------------------"
sudo apt-get update
# 安装基础编译工具
sudo apt-get install -y build-essential cmake git pkg-config unzip curl

# 图像/视频编解码库
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install -y libv4l-dev v4l-utils qv4l2

# 图片格式库
sudo apt-get install -y libjpeg-dev libpng-dev libtiff-dev

# TBB 并行库 (兼容处理: Ubuntu 22.04 使用 libtbb12, 旧版使用 libtbb2)
sudo apt-get install -y libtbb-dev
if apt-cache search --names-only '^libtbb2$' | grep -q libtbb2; then
sudo apt-get install -y libtbb2
elif apt-cache search --names-only '^libtbb12$' | grep -q libtbb12; then
sudo apt-get install -y libtbb12
fi

# GUI 支持
sudo apt-get install -y libgtk2.0-dev

echo "------------------------------------"
echo "** Download opencv ${version} (2/4)"
echo "------------------------------------"
mkdir -p $folder
cd ${folder}

# 下载 OpenCV 源码 (增加防重复下载判断)
if [ ! -f "opencv-${version}.zip" ]; then
echo "Downloading OpenCV source..."
curl -L https://github.com/opencv/opencv/archive/${version}.zip -o opencv-${version}.zip
else
echo "opencv-${version}.zip already exists."
fi

# 下载 Contrib 源码
if [ ! -f "opencv_contrib-${version}.zip" ]; then
echo "Downloading OpenCV Contrib source..."
curl -L https://github.com/opencv/opencv_contrib/archive/${version}.zip -o opencv_contrib-${version}.zip
else
echo "opencv_contrib-${version}.zip already exists."
fi

# 解压
echo "Unzipping..."
unzip -o opencv-${version}.zip > /dev/null
unzip -o opencv_contrib-${version}.zip > /dev/null

# 清理压缩包(可选,这里保留以免重试时需要重新下载,如果空间不足可取消注释)
# rm opencv-${version}.zip opencv_contrib-${version}.zip

cd opencv-${version}/

echo "------------------------------------"
echo "** Build opencv ${version} (3/4)"
echo "------------------------------------"
mkdir -p release
cd release/

# CMake 配置
# 注意:Orin NX 使用 8.7 架构
cmake -D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D CUDA_ARCH_BIN="${ARCH_BIN}" \
-D CUDA_ARCH_PTX="" \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${version}/modules \
-D WITH_GSTREAMER=ON \
-D WITH_LIBV4L=ON \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_gapi=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_EXAMPLES=OFF \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local ..

echo "Compiling... This may take a while."
make -j$(nproc)

echo "------------------------------------"
echo "** Install opencv ${version} (4/4)"
echo "------------------------------------"
sudo make install

# 配置环境变量到 .bashrc
# 判断是否已经存在,避免重复写入
if ! grep -q "export LD_LIBRARY_PATH=/usr/local/lib" ~/.bashrc; then
echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
fi

# 根据 Python 版本路径配置 PYTHONPATH
SITE_PACKAGES_PATH="/usr/local/lib/python${PYTHON_VERSION_NUM}/site-packages"

if ! grep -q "export PYTHONPATH=${SITE_PACKAGES_PATH}" ~/.bashrc; then
echo "export PYTHONPATH=${SITE_PACKAGES_PATH}/:\$PYTHONPATH" >> ~/.bashrc
fi

# 提示用户手动 source
echo "------------------------------------"
echo "** Install opencv ${version} successfully"
echo "** IMPORTANT: Please run the following command to apply changes:"
echo " source ~/.bashrc"
echo "** Bye :)"

TensorRT

添加工具软链接

1
sudo ln -s /usr/src/tensorrt/bin/trtexec /usr/local/bin/trtexec

转换模型

1
2
3
4
5
6
trtexec \
--onnx=ros2_ws/src/volleyball_stereo_driver/model/best.onnx \
--saveEngine=ros2_ws/src/volleyball_stereo_driver/model/yolo11n.engine \
--fp16 \
--memPoolSize=workspace:4096 \
--verbose