跳到主要内容Rock 5B+ 部署 MAVSDK 控制无人机及 WSL 运行 PX4 仿真环境搭建 | 极客日志PythonAI算法
Rock 5B+ 部署 MAVSDK 控制无人机及 WSL 运行 PX4 仿真环境搭建
综述由AI生成记录了在 Rock 5B+ 板卡上部署 MAVSDK 控制无人机的全过程。内容包括系统安装、Python 虚拟环境配置、网络穿透(ZeroTier)设置以及 SSH/VNC 协同。通过 WSL2 运行 PX4 仿真与 Gazebo,Windows 端运行 QGC 地面站,实现了板卡控制代码与仿真环境的分离部署。解决了网络互通、视频流转发及防火墙配置问题,并提供了本地 Flight Review 复盘方案。最终验证了从板卡到地面站的完整控制链路。
监控大屏22 浏览 1. 板卡环境搭建

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

第二步:安装 Python 虚拟环境
Python 虚拟环境使用 | Radxa Docs
RKNN Ultralytics YOLOv11 | Radxa Docs
按照教程安装 YOLOv11 和 Python 虚拟环境。后续 Python 代码均在虚拟环境中运行。
YOLOv11n 模型在 RK3588 上约 12 帧,与官方标称一致。

此时 NPU 占用约为 40%(NPU0):
sudo cat /sys/kernel/debug/rknpu/load
第三步:优化工作(可选)
1. 开机自动登录
systemctl status display-manager
开启图形界面自动登录,编辑 /etc/gdm3/daemon.conf:
[daemon]
AutomaticLoginEnable=True
AutomaticLogin=radxa
sudo systemctl restart gdm
2. 开机自启 VNC Server
创建启动脚本 /usr/local/bin/start-vnc.sh:
#!/bin/sh
/usr/bin/vncserver -localhost no -geometry 1280x720 -depth 24
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
3. 有线网络设置
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
4. 设备跨网络互通
为了解决 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 直连成功。
5. SSH 与 VNC 协同
SSH 登录后默认没有 DISPLAY 指向 VNC。运行 GUI 脚本时需指定:
export DISPLAY=:1
python your_script.py
永久保留变量可编辑 ~/.bashrc 添加 export DISPLAY=:1。
2. 无人机控制代码
2.1 无人机代码
2.2 通讯框图
3588 负责无人机控制代码,PX4 和仿真在 WSL2 内实现。
建议关闭 Windows 防火墙以获得更好的连接体验。
2.3 启动步骤
第一步:打开 Windows 的控制界面和 QGC
第二步:打开 WSL 的 start_cam
该代码会用 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")
第三步:打开 WSL 的 gz_pub_zmq
sock.setsockopt(zmq.CONFLATE, 1)
sock.setsockopt(zmq.RCVHWM, 1)
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
第四步:打开 3588 的 drone_id_0
此时能看到无人机连接到 Windows 控制界面。
第五步:打开 3588 的 visdroneRun_access
修改导入语句:from ultralytics import YOLO。
模型路径改为文件夹:model = YOLO("./yolov11n-visdrone_rknn_model")。
发送端和接收端均需加入 ZMQ 配置以处理视频流。
操作流程:在 monitor 中选择编队,点击起飞,到达高度后输入模拟信息指令确认,无人机飞向目标点。
3. 思翼云台设置
思翼 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 间隔。
4. 其他问题
4.1 ZeroTier 打洞失败
ZeroTier 路径有超时机制,长时间无通信会过期。可通过定时 ping 保持连接,但效果有限。
4.2 Gz Sim 异常接入 ZeroTier
测试时发现 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
4.3 板卡与 WSL2 建立连接
WSL2 默认为镜像模式,外部设备发往 WSL 的入站流量可能被 Hyper-V 防火墙拦截。
解决办法: 在 Windows 宿主机开放允许流量入站 WSL 的端口。
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
sudo tcpdump -ni any udp port 57002
echo "hello" > /dev/udp/10.144.1.0/57002
5. 实飞前设置
5.1 本地版 Flight Review
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 卫星影像。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online