w4 是国庆,故没有 w4

遇到问题请先阅读 FAQs

模型转换

对应于 01_export_rknn,在虚拟机上运行

在目录下打开终端,激活 Conda 环境:

1
conda activate rknn

请自行替换为自己的环境

然后运行:

1
python3 export_rknn.py

连扳推理

对应于 02_inference

在开发板上运行:

1
bash /usr/bin/start_rknn.sh

在目录下打开终端,激活环境后运行:

1
python inference_pytorch.py

1
python inference_rknn.py

RKNN toolkit lite2 运行

对应于 06_rknntoolkitlite2

在开发板上打开文件夹 06_rknntoolkitlite2

1
cd 06_rknntoolkitlite2

激活 Conda 环境:

1
conda activate rknn

运行:

1
python3 rknntoolkitlite2.py

YOLOv5

对应于 07_yolov5

在目录下打开终端,激活环境后运行:

1
python test.py

现象:出现一张检测后的图片,按任意键消失

RKNPU2

对应于 rknn_yolov5_demo

编译

在虚拟机的终端上打开 rknn_yolov5_demo,修改文件 build-linux_RK3566_RK3568.sh 如下:

1
2
TOOL_CHAIN=~/Downloads/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu
GCC_COMPILER=${TOOL_CHAIN}/bin/aarch64-linux-gnu

请自行替换路径,不过多说明

然后运行:

1
bash ./build-linux_RK3566_RK3568.sh

一切无误后,当前目录会多出一个 install 文件夹,将里面的文件夹 rknn_yolov5_demo_Linux 传到开发板上:

1
scp -r ./rknn_yolov5_demo_Linux topeet@${ip}:~/

这里也可以用软件传输

在开发板上切换到文件夹 rknn_yolov5_demo_Linux

1
cd rknn_yolov5_demo_Linux

设置变量

1
export LD_LIBRARY_PATH=./lib

然后运行

1
./rknn_yolov5_demo  ./model/RK3566_RK3568/yolov5s-640-640.rknn model/bus.jpg

FAQs

Q: 报错权限不够怎么办?

A: 请先运行 chomod u+x 加文件名来提升权限

Q: Command ‘adb’ not found

A: 请确认是否在开发板运行 /usr/bin/start_rknn.sh
或者在虚拟机上运行 sudo apt install adb

Q: The ‘target’ is rk3588, but your config.target_platform is ‘rk3568’!

A: 请将文件里的 3588 修改为 3568

Q: GLIBC 缺失

A: 请下载 Ubuntu20.04 镜像,或者自己编译缺失的依赖

本博客参考了 Rockchip_Quick_Start_RKNN_SDK_V1.5.2_CN.pdf

:本博客仅作为参考,请根据个人的实际情况进行调整,善用搜索引擎

RKNN Toolkit2 的配置(非 Docker

:以下操作均在虚拟机上进行

RKNN Toolkit2 是一个在 Linux(非板上系统)上运行的一个进行模型转化和部署的工具,提供了 Python 的接口,通过 adb 工具进行板上推理

下载 RKNN-Toolkit2

1
git clone --depth=1 https://github.com/rockchip-linux/rknn-toolkit2.git

这里使用 git 进行下载。也可以进入网站直接下载压缩包,或者直接用开发资料下的压缩包,解压后传输到虚拟机下

虚拟环境的配置

可以使用 conda 或者 venv 创建虚拟环境,这里使用 conda

1
conda create -n rknn python=3.10

其中,环境名 rknn 可以随意替换,工具支持的 Python 版本请查看所下载的 rknn-toolkit2 文件夹下的 packages 文件夹,如下所示:

1
2
3
rknn_toolkit2-1.5.2+b642f30c-cp36-cp36m-linux_x86_64.whl
rknn_toolkit2-1.5.2+b642f30c-cp310-cp310-linux_x86_64.whl
rknn_toolkit2-1.5.2+b642f30c-cp38-cp38-linux_x86_64.whl

如上所示,1.5.2 版本的 RKNN Toolkit2 支持 Python3.6 3.8 3.10 版本

然后在所下载的 rknn-toolkit2 文件夹下打开终端,安装系统的依赖:

1
2
sudo apt-get install libxslt1-dev zlib1g-dev libglib2.0 libsm6 \
libgl1-mesa-glx libprotobuf-dev gcc

启动创建的虚拟环境:

1
conda activate rknn

安装 rknn_toolkit2

1
2
3
pip3 install numpy opencv-python
pip3 install -r doc/requirements_cp310-1.5.2.txt
pip3 install packages/rknn_toolkit2-1.5.2+b642f30c-cp310-cp310-linux_x86_64.whl

注意把文件名替换为自己下载的 RKNN Toolkit2 文件

使用以下命令测试安装:

1
2
python
from rknn.api import RKNN

RKNN Toolkit Lite2 的配置

:以下操作均在开发板上进行,请提前将文件夹 rknn_toolkit_lite2 传输到开发板上

RKNN Toolkit Lite2RKNN Toolkit2 类似,可以用于在板端以完全离线的方式部署 RKNN 模型,但是提供的接口较少

在开发板使用 conda

下载 Miniconda 的安装脚本(如果下载速度过慢请自行寻找国内镜像)

1
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh

然后安装 Miniconda

1
bash Miniconda3-latest-Linux-aarch64.sh

根据指示安装即可,其中会出现一大堆的协议,可用 <C-D> 来向下翻页,注意这也是一个退出当前 shell 的快捷键

配置虚拟环境

:以下操作类似 RKNN Toolkit2虚拟环境配置,部分操作不再赘述

rknn_toolkit_lite2 文件夹下打开终端,
首先创建 conda 环境:

1
conda create -n rknn python=3.10

然后启用:

1
conda activate rknn

安装 RKNN Toolkit Lite2

1
2
pip3 install numpy opencv-python
pip3 install packages/rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl

RKNPU2 的安装配置

虚拟机下的配置

下载 RKNPU2

此处使用了 1.5.2 版本,需要在官方提供的 RK_NPU_SDK下载,提取码:rknn,具体原因请查看 issue
1.4.0 版本则不会出现问题,解压即可

下载交叉编译工具

这是官方提供的 交叉编译工具,提取码:rknn。也可以直接使用网盘上的编译工具 gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu,只有新旧的区别

下载编译所需的工具

1
sudo apt install make cmake

开发板下的配置

:涉及 scp 的命令可以修改为使用 WinSCP 工具进行

/usr/lib

在下载的 RKNPU2 目录下找到文件夹 ./runtime/RK356X/Linux/librknn_api/aarch64,打开有以下文件:

1
librknn_api.so librknnrt.so

这两个是库文件,需要移动到开发板的 /usr/lib 目录下

首先通过 scp 将文件夹传输到开发板的用户目录下,新建文件夹 api 进行存放:

1
2
mkdir ~/api
scp -r ./runtime/RK356X/Linux/librknn_api/aarch6 topeet@[addr]:~/api

然后拷贝到 /usr/lib 目录下:

1
sudo cp -r ./api /usr/lib

查看是否移动到正确的位置:

1
ls -l /usr/lib | grep rknn

/usr/bin

在下载的 RKNPU2 目录下找到文件夹 ./runtime/RK356X/Linux/rknn_server/aarch64/usr/bin,打开有以下文件:

1
restart_rknn.sh rknn_server start_rknn.sh

这三个是运行服务器所需的可执行文件,需要移动到开发板的 /usr/bin 目录下

首先通过 scp 将文件夹传输到开发板的用户目录下,新建文件夹 server 进行存放:

1
2
mkdir ~/server
scp -r ./runtime/RK356X/Linux/rknn_server/aarch64/usr/bin topeet@[addr]:~/server

然后拷贝到 /usr/bin 目录下:

1
sudo cp -r ./server /usr/bin

查看是否移动到正确的位置:

1
ls -l /usr/bin | grep rknn

镜像烧录

注:以下过程摘抄自 FireFly 的文档,但是对于如何使用 Upgrade Tool 并不清晰,出现了 Loading firmware failed! 的报错,故请参考 Windows 下的镜像烧录教程

为了使用 RKNN 工具,开发板使用 Ubuntu 19.04 作为操作系统

安装升级工具

使用 Upgrade Tool 作为升级工具。首先 下载 Upgrade Tool,然后切换到下载目录下,运行以下命令进行安装:

1
2
3
4
5
unzip Linux_Upgrade_Tool_xxxx.zip
cd Linux_UpgradeTool_xxxx
sudo mv upgrade_tool /usr/local/bin
sudo chown root:root /usr/local/bin/upgrade_tool
sudo chmod a+x /usr/local/bin/upgrade_tool

其中 xxxx 为具体的版本号,此处使用 v2.14

下载所需固件

使用百度云 下载所需固件

固件烧写

将开发板连接电源,连接串口,连接双头烧写线,其中烧写线应该连接到单个 USB 口处,如图所示:

TODO

将上图的拨码开关向下拨,切换 USB2.0 为 OTG 烧写模式,按住开发板底部的 VOL+ 按键不松开,然后按下电源启动开发板,使用以下命令烧写统一固件 upgrade.img

1
sudo upgrade_tool uf update.img

如果烧写遇到问题,请查看 问题排查

串口工具的配置和使用

本博客使用 Linux 下的串口工具 minicom 作为串口通信工具

安装

1
sudo apt install minicom

使用

1
sudo minicom -D /dev/ttyUSB0

其中,具体的设备名称可通过以下命令查询:

1
ls /dev/ | grep tty

通过 <C-A>+Z 的组合键,打开 minicom 的帮助界面,按下 O 进入设置界面,用键盘选择光标,移动到 Serial port setup / 串口设置,然后更改 Hardware Flow ControlSoftware Flow Control 两项设置为 No,回到上一菜单选择 Save setup as dfl 进行保存(参考

完成后按下回车,输入用户名和密码(都为 topeet),输出如下:

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
Ubuntu 20.04.6 LTS iTOP-RK3568 ttyFIQ0

iTOP-RK3568 login: topeet
密码:
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 4.19.232 aarch64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
_ _____ ___ ____ ____ _ ___________ __ ___
(_)_ _/ _ \| _ \ | _ \| |/ /___ / ___| / /_ ( _ )
| | | || | | | |_) |____| |_) | ' / |_ \___ \| '_ \ / _ \
| | | || |_| | __/_____| _ <| . \ ___) |__) | (_) | (_) |
|_| |_| \___/|_| |_| \_\_|\_\____/____/ \___/ \___/

System load: 4% Up time: 8 min
Memory usage: 27% of 1.92G IP:
CPU temp: 41°C Usage of /: 29% of 12G


System information as of 2023年 10月 08日 星期日 10:29:53 UTC

System load: 0.17 Swap usage: 0% Users logged i1
Usage of /: 27.6% of 11.75GB Temperature: 43.1 C
Memory usage: 31% Processes: 210

扩展安全维护(ESM)Applications 未启用。

0 �可以立即应用。

启用 ESM Apps 来获取未来的额外安全更新
See https://ubuntu.com/esm or run: sudo pro status


The list of available updates is more than a week old.
To check for new updates run: sudo apt update


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

网络配置

curl 登录到 BUPT-portal

保持 热点的连接,使用如下的命令:

1
curl 'http://10.3.8.211/index' --data 'user=${username}&password=${password}

把其中的 ${username}${password} 替换为自己的账号密码

然后使用 nmcli 连接到 WIFI:

1
sudo nmcli dev wifi connect "BUPT-portal"

网线直连登录

TODO

通过手机热点登录

打开手机热点,关闭 WIFI6,将 AP 频段选择为 2.4 GHz,然后输入以下命令打开开发板 WIFI:

1
sudo nmcli dev wifi on

再通过以下命令进行连接:

1
sudo nmcli dev wifi connect "SSID" password "PASSWORD"

将上述命令的 SSID 和 PASSWORD 替换为帐号和密码

通过 ssh 登录到开发板

首先,通过以下命令确认两台设备在同一网段下:

1
ip a | grep brd

开发板已经启用了 ssh 服务,用如下命令确认终端是否启用 ssh 服务:

1
sudo systemctl status ssh

如果未安装,使用如下命令安装:

1
sudo apt install openssh-server

无误后,连接到开发板:

1
ssh topeet@${ip}

用实际 ip 来替换 ${ip}

优化使用的一些设置

以下配置只是为了优化开发板上的使用体验,并不是必须的

安装 fish shell

fish 是一款开箱即用的 Shell,附带了自动补全、建议和语法高亮等功能。联网后,通过以下命令安装:

1
sudo apt install fish

切换默认的 Shell:

1
chsh -s /usr/bin/fish

其中,具体的安装位置可通过以下命令查看:

1
echo /etc/shells

更改后,需重启才能生效

安装 tldr page

tldr 是一款类似于 man 的帮助界面,正如它的名字一样:Too Long; Didn’t Read.

因为 Ubuntu 本身自带 Python,故通过 pip 安装:

1
sudo pip3 install tldr --system

--system 意味着在系统级别安装,不加这个标志则默认在用户级别安装,日后使用则需要通过 Python 环境进行使用:

1
python3 -m tldr

安装完毕后,输入 tldr 即可使用,示例如下:

1
tldr tar

这是 nizne 对 BUPT 的课程 智能信息系统设计 的学习记录,每周一篇。其中第一周指 BUPT 正式教学周的第一周。因为写博客的想法是在第三周之后才产生的,故前几周的日期和实际周数并不匹配

由于 nizne 对嵌入式技术所知甚少,本博客的内容只能做到尽量严谨,请大佬轻喷

有别于学校教程所使用的环境,本博客使用 Kubuntu 23.04 作为主力开发环境,省去了安装虚拟机麻烦

课程平台简介

本课程使用 iTOP RK3568 进行开发,所需资料请前往 百度云 进行下载

0%