1. 板卡环境搭建

记录了在 Rock 5B+ 板卡上部署 MAVSDK 控制无人机的全过程。内容包括系统安装、Python 虚拟环境配置、网络穿透(ZeroTier)设置以及 SSH/VNC 协同。通过 WSL2 运行 PX4 仿真与 Gazebo,Windows 端运行 QGC 地面站,实现了板卡控制代码与仿真环境的分离部署。解决了网络互通、视频流转发及防火墙配置问题,并提供了本地 Flight Review 复盘方案。最终验证了从板卡到地面站的完整控制链路。

板卡使用 Rock 5B+ (RK3588),飞控时同样使用 3588。Rock 5T 在尺寸重量上类似,主要重量集中在散热器。
Rock 5B+ 安装过程参考官方教程,建议完全按照官方文档操作。
安装的是 ROCK 5B+ 系统镜像:rock-5b-plus_bookworm_kde_b2,基于 Debian 12 (内核 6.1)。将系统安装到 NVMe 中。Update SPI Bootloader 位置需根据实际版本调整。
按照教程 快速设置 | Radxa Docs 配置中文输入法、SSH 和 VNC。
注意: 使用过程中若系统自动休眠,可在系统设置 - 节能里关闭所有选项。

按照教程安装 YOLOv11 和 Python 虚拟环境。后续 Python 代码均在虚拟环境中运行。
YOLOv11n 模型在 RK3588 上约 12 帧,与官方标称一致。

此时 NPU 占用约为 40%(NPU0):
sudo cat /sys/kernel/debug/rknpu/load # NPU load: Core0: 41%, Core1: 0%, Core2: 0%
判断桌面管理器(如 GDM3):
systemctl status display-manager
开启图形界面自动登录,编辑 /etc/gdm3/daemon.conf:
[daemon]
AutomaticLoginEnable=True
AutomaticLogin=radxa
重启 GDM:
sudo systemctl restart gdm
创建启动脚本 /usr/local/bin/start-vnc.sh:
#!/bin/sh
/usr/bin/vncserver -localhost no -geometry 1280x720 -depth 24
赋予权限并创建 systemd 服务:
sudo chmod +x /usr/local/bin/start-vnc.sh
sudo tee /etc/systemd/system/start-vnc.service >/dev/null <<'EOF'
[Unit]
Description=Start VNC once at boot
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=radxa
ExecStart=/usr/local/bin/start-vnc.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now start-vnc.service
如需调整分辨率,可使用 xrandr 命令。
Rock 5B Plus 的 2.5G 网卡通常走 PCIe。执行以下命令检查驱动:
lspci -nn | grep -i -E 'ethernet|realtek|network' || true
dmesg -T | grep -i -E 'r8125|r8169|realtek|ethernet|pci' | tail -n 80
如果能看到网卡但无接口,尝试加载驱动模块:
lsmod | grep -i -E 'r8125|r8169' || true
sudo modprobe r8169 || true
sudo modprobe r8125 || true
dmesg -T | tail -n 80
ip -br link
让驱动开机自动加载,创建 /etc/modules-load.d/r8169.conf:
sudo tee /etc/modules-load.d/r8169.conf >/dev/null <<'EOF'
r8169
EOF
为了解决 NAT 隔离问题,使用 ZeroTier 建立虚拟局域网。 注册后在 RK3588 上执行:
curl -s https://install.zerotier.com | sudo bash
sudo systemctl enable zerotier-one
sudo systemctl start zerotier-one
sudo zerotier-cli join <NetworkID>
Ping 测试平均延迟约 10~20ms,丢包 0%,说明 P2P 直连成功。
SSH 登录后默认没有 DISPLAY 指向 VNC。运行 GUI 脚本时需指定:
export DISPLAY=:1
python your_script.py
永久保留变量可编辑 ~/.bashrc 添加 export DISPLAY=:1。
见相关记录,除 IP 和端口外基本无需更改。
3588 负责无人机控制代码,PX4 和仿真在 WSL2 内实现。
建议关闭 Windows 防火墙以获得更好的连接体验。

涉及 IP 地址的代码需修改。
该代码会用 tmux 打开 Gazebo 默认世界和 PX4 节点。在节点所在命令行输入:
mavlink start -u 14600 -t 169.254.12.100 -p 14550 -w
注意端口避免冲突(如 14540 已被仿真占用)。第一个 PX4 节点用 14600,第二个用 14601。
板卡上 runtime 脚本中的 connect 函数改为:
await drone.connect(system_address="udpin://0.0.0.0:14550")
为防止视频流积压,添加 ZMQ 配置:
sock.setsockopt(zmq.CONFLATE, 1)
sock.setsockopt(zmq.RCVHWM, 1)
Windows 端需设置端口转发和防火墙规则:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=5561 connectaddress=127.0.0.1 connectport=5561
netsh advfirewall firewall add rule name="ZMQ 5561" dir=in action=allow protocol=TCP localport=5561
此时能看到无人机连接到 Windows 控制界面。

修改导入语句:from ultralytics import YOLO。
模型路径改为文件夹:model = YOLO("./yolov11n-visdrone_rknn_model")。
发送端和接收端均需加入 ZMQ 配置以处理视频流。
操作流程:在 monitor 中选择编队,点击起飞,到达高度后输入模拟信息指令确认,无人机飞向目标点。
思翼 A8mini 默认 IP 是 192.168.144.25,端口 8554。
VLC 延迟较高,建议使用 FFmpeg 降低延迟:
ffplay -fflags nobuffer -flags low_delay -framedrop -rtsp_transport tcp rtsp://192.168.144.25:8554/main.264
RTSP 典型延迟为 300~500ms,取决于 GOP 间隔。
ZeroTier 路径有超时机制,长时间无通信会过期。可通过定时 ping 保持连接,但效果有限。
测试时发现 Gazebo 仿真环境占用大量 ZeroTier 带宽。解决方法是绑定 Gazebo 到本地回环 IP。
修改启动脚本,固定 GZ_IP 为 127.0.0.1:
GZ_IP=127.0.0.1 GZ_SIM_SYSTEM_PLUGIN_PATH=$PX4_PLUGINS python3 simgz
同时设置环境变量:
export GALLIUM_DRIVER=d3d12
export MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA
WSL2 默认为镜像模式,外部设备发往 WSL 的入站流量可能被 Hyper-V 防火墙拦截。
解决办法: 在 Windows 宿主机开放允许流量入站 WSL 的端口。
管理员 PowerShell 示例:
Set-NetFirewallHyperVVMSetting -Name '{VM_ID}' -DefaultInboundAction Allow
New-NetFirewallHyperVRule -Name "WSL-UDP-57002" -DisplayName "WSL UDP 57002" -Direction Inbound -VMCreatorId '{VM_ID}' -Protocol UDP -LocalPorts 57002
验证方法: WSL 内启动 UDP 监听:
nc -ul -p 57002
另一终端抓包:
sudo tcpdump -ni any udp port 57002
板卡侧发送数据:
echo "hello" > /dev/udp/10.144.1.0/57002
若 WSL 能收到数据,链路即打通。
网页版日志分析较慢,可部署离线版本进行复盘。
依赖安装:
sudo apt update
sudo apt install -y git python3 python3-venv python3-pip sqlite3 libfftw3-bin libfftw3-dev
git clone --recursive https://github.com/PX4/flight_review.git
cd ~/flight_review/app
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python setup_db.py
支持加密日志需放置私钥并配置 config_user.ini。
启动服务:
cd ~/flight_review/app
source .venv/bin/activate
python serve.py --show
浏览器访问 http://localhost:5006。
Git 克隆不稳定时可配置 HTTP 版本或压缩参数重试。地图底图可选择 OSM 标准地图或 World_Imagery 卫星影像。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online