部署文档目标系统回改为Raspberry Pi OS官方镜像

用户在Ubuntu镜像上遇串口问题换回官方镜像: §1改Bookworm(3.11)/Trixie(3.13)
口径, §3补libstdc++符号说明(GCC12+官方镜像均满足), §4恢复raspi-config与
/dev/serial0指引, §7注明单测已与原生库脱钩
This commit is contained in:
keita
2026-09-23 18:00:30 +08:00
parent 4c1f5d3932
commit e179aa322a
+25 -19
View File
@@ -1,6 +1,8 @@
# pod_bridge 移交树莓派 4B 部署注意事项 # pod_bridge 移交树莓派 4B 部署注意事项
> 目标平台:树莓派 4B + **Ubuntu 24.04(aarch64)**。 > 目标平台:树莓派 4B + **Raspberry Pi OS 官方镜像(64 位,Bookworm / Trixie)**。
> (2026-09-23 由 Ubuntu 24.04 换回官方镜像:Ubuntu 镜像上串口配置与
> libstdc++ 符号问题频出,官方镜像对 Pi 串口/固件支持最完整。)
> 范围:`utils/pod_bridge`(及其依赖的 `visual_track_control` 控制原语库)。 > 范围:`utils/pod_bridge`(及其依赖的 `visual_track_control` 控制原语库)。
> 核对日期:2026-09-23,对照规格《光电吊舱控制协议G版-PB.docx》; > 核对日期:2026-09-23,对照规格《光电吊舱控制协议G版-PB.docx》;
> 依赖轮子已按 PyPI 2026-09-23 上游信息复核。 > 依赖轮子已按 PyPI 2026-09-23 上游信息复核。
@@ -9,13 +11,13 @@
## 1. 系统与 Python 版本(硬性) ## 1. 系统与 Python 版本(硬性)
- **Ubuntu 24.04(aarch64)**:Ubuntu 的 Pi 镜像只有 64 位,天然满足 MAVSDK - **必须烧录 64 位镜像**(Raspberry Pi Imager 里选 "Raspberry Pi OS (64-bit)"),
对 aarch64 的要求(见 §3);不要自行改装任何 32 位系统。 理由见 §3 MAVSDK 对 aarch64 的要求;32 位镜像不要碰。
- **Python 3.12**(Ubuntu 24.04 自带)满足 PEP 604 标注(`float | None` / - 烧完先确认:`cat /etc/os-release`。**Bookworm 自带 Python 3.11、
`FrameParser | None`)要求的 ≥3.10,直接用,无需另装。 Trixie 自带 Python 3.13**,均满足 PEP 604 标注(`float | None` /
- Ubuntu 24.04 系统 Python 受 PEP 668 保护,**禁止 `pip install` 进系统环境** `FrameParser | None`)要求的 ≥3.10,直接用。
(报 externally-managed-environment),一律建 venv。注意 Ubuntu 默认 - Bookworm 起系统 Python 受 PEP 668 保护,**禁止 `pip install` 进系统环境**
**不带 venv 支持**,先 apt 补齐: (报 externally-managed-environment),一律建 venv;venv 支持若缺失先 apt 补:
```bash ```bash
sudo apt update && sudo apt install -y python3-venv python3-pip sudo apt update && sudo apt install -y python3-venv python3-pip
@@ -46,8 +48,13 @@ pytest # 仅上机自测需要,部署运行可省
- pip 的 `mavsdk` 包内嵌 `mavsdk_server` 二进制;**aarch64 有官方 wheel** - pip 的 `mavsdk` 包内嵌 `mavsdk_server` 二进制;**aarch64 有官方 wheel**
(PyPI 核对:mavsdk 4.0.0 提供 `cp38-abi3 manylinux2014_aarch64`, (PyPI 核对:mavsdk 4.0.0 提供 `cp38-abi3 manylinux2014_aarch64`,
abi3 向前兼容 Python 3.12,要求 glibc≥2.17,Ubuntu 24.04 为 2.39 ✅)。 abi3 兼容 Python 3.11/3.13,要求 glibc≥2.17)。32 位 armv7l 支持不稳定——
32 位 armv7l 支持不稳定——Ubuntu 24.04 Pi 镜像只有 64 位,无此问题。 这是必须 64 位镜像的主因。
- **libstdc++ 符号**:wheel 内嵌库要求 GCC≥12 的运行时符号;官方镜像
Bookworm(GCC 12)/ Trixie(GCC 14)均满足,此前 Ubuntu 镜像上出现的
`undefined symbol: ..._M_futex_wait_until...` 不应复现。若仍报:
`ldd <libcmavsdk.so 路径> | grep stdc` 确认链接对象,必要时用
`LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libstdc++.so.6` 兜底。
- 安装后别只验证 import,要让内嵌二进制真跑一次: - 安装后别只验证 import,要让内嵌二进制真跑一次:
`find ~/venv-pod -name mavsdk_server` 找到路径后直接执行(无参数即起服务, `find ~/venv-pod -name mavsdk_server` 找到路径后直接执行(无参数即起服务,
Ctrl+C 退出),能打印启动信息说明架构匹配;`Exec format error` 则装错了架构。 Ctrl+C 退出),能打印启动信息说明架构匹配;`Exec format error` 则装错了架构。
@@ -62,14 +69,12 @@ pytest # 仅上机自测需要,部署运行可省
- **RS232 → 必须加电平转换或直接用 USB 转串口模块**(FTDI/CH340,推荐, - **RS232 → 必须加电平转换或直接用 USB 转串口模块**(FTDI/CH340,推荐,
免折腾 GPIO UART,设备号 `/dev/ttyUSB0`); 免折腾 GPIO UART,设备号 `/dev/ttyUSB0`);
- TTL 3.3V → 可用 Pi GPIO14/15(`/dev/serial0`)。 - TTL 3.3V → 可用 Pi GPIO14/15(`/dev/serial0`)。
- 用 GPIO UART 时(**Ubuntu 没有 raspi-config**,手工配置): - 用 GPIO UART 时(官方镜像自带 `raspi-config`):
- `/boot/firmware/config.txt` 确认有 `enable_uart=1`;若控制台占着串口, - `sudo raspi-config` → Interface Options → Serial Port:**控制台选 No、
关掉:`sudo systemctl disable --now serial-getty@ttyAMA0.service`; 串口硬件选 Yes**(等价于 `enable_uart=1` + 关闭 serial-getty 抢占);
- Pi 4B 上 GPIO UART 默认是 mini-UART(ttyS0,波特率随主频漂移),115200 下 - Pi 4B 上 `/dev/serial0` 默认指向 mini-UART(ttyS0,波特率随主频漂移),
不稳——同一文件加 `dtoverlay=disable-bt` 把 PL011(ttyAMA0)换回来 115200 下不稳——在 `/boot/firmware/config.txt` 加 `dtoverlay=disable-bt`
(设备树 overlay 由固件加载,与发行版无关,Ubuntu 同样生效); 把 PL011(ttyAMA0)换回来,`/dev/serial0` 随之改指 ttyAMA0;
- **Ubuntu 没有 Raspberry Pi OS 的 `/dev/serial0` 软链**,设备名直接写
`/dev/ttyAMA0`(或 ttyS0);
- **Pi 是 3.3V 电平,绝不直连 5V/RS232 电平**,会烧 GPIO。 - **Pi 是 3.3V 电平,绝不直连 5V/RS232 电平**,会烧 GPIO。
- 接线三线:TX/RX **交叉**、**必须共地(GND)**,不共地是通讯乱码的第一大原因。 - 接线三线:TX/RX **交叉**、**必须共地(GND)**,不共地是通讯乱码的第一大原因。
- 用户权限:`sudo usermod -aG dialout $USER`,重登录生效,否则 open 串口 Permission denied。 - 用户权限:`sudo usermod -aG dialout $USER`,重登录生效,否则 open 串口 Permission denied。
@@ -95,7 +100,8 @@ pytest # 仅上机自测需要,部署运行可省
## 7. 上机验证顺序(每步过了再下一步) ## 7. 上机验证顺序(每步过了再下一步)
1. **纯软件自测**(无需任何接线): 1. **纯软件自测**(无需任何接线):
`cd utils && ~/venv-pod/bin/python -m pytest tests/pod_bridge -q` → 应 92 全绿。 `cd utils && ~/venv-pod/bin/python -m pytest tests/pod_bridge -q` → 应 92 全绿
(单测已打桩 mavsdk 设定点类型,与 libcmavsdk 原生库健康状态无关)。
2. **串口回环**:USB 转串口模块 TX/RX 短接,跑一个 feed/echo 小脚本验证字节收发。 2. **串口回环**:USB 转串口模块 TX/RX 短接,跑一个 feed/echo 小脚本验证字节收发。
3. **只接吊舱**:观察能否解析出 表2-2(60Hz EE 16)帧;用 `send_control(归中 0x2B)` 3. **只接吊舱**:观察能否解析出 表2-2(60Hz EE 16)帧;用 `send_control(归中 0x2B)`
验证下行。 验证下行。