锁定mavsdk<4: v4为全新原生API与经典gRPC API不兼容
树莓派实测mavsdk 4.0.0无mavsdk.offboard/System/telemetry(LegacyModuleError), 且其原生库libcmavsdk.so有libstdc++符号问题; 3.x(最新3.17.4, aarch64 wheel可用) 为gRPC架构内嵌mavsdk_server, 无此问题。同步更新两份requirements与部署文档§2/§3
This commit is contained in:
+15
-20
@@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
```text
|
```text
|
||||||
# requirements-pod.txt(桥接最小集)
|
# requirements-pod.txt(桥接最小集)
|
||||||
mavsdk
|
mavsdk<4 # ⚠ 锁版本,原因见 §3
|
||||||
pyserial
|
pyserial
|
||||||
pytest # 仅上机自测需要,部署运行可省
|
pytest # 仅上机自测需要,部署运行可省
|
||||||
```
|
```
|
||||||
@@ -46,29 +46,24 @@ pytest # 仅上机自测需要,部署运行可省
|
|||||||
|
|
||||||
## 3. MAVSDK 在 ARM 上的坑
|
## 3. MAVSDK 在 ARM 上的坑
|
||||||
|
|
||||||
- pip 的 `mavsdk` 包内嵌 `mavsdk_server` 二进制;**aarch64 有官方 wheel**
|
- **mavsdk 4.x 是全新原生 API 重写,与经典 gRPC API 完全不兼容**(2026-09-24
|
||||||
(PyPI 核对:mavsdk 4.0.0 提供 `cp38-abi3 manylinux2014_aarch64`,
|
树莓派实测):没有 `mavsdk.offboard` / `System` / `telemetry`,本仓库全部
|
||||||
abi3 兼容 Python 3.11/3.13,要求 glibc≥2.17)。32 位 armv7l 支持不稳定——
|
飞控代码(Px4Gateway / MavsdkCommandGateway / test.py)都是经典 API,
|
||||||
这是必须 64 位镜像的主因。
|
装 4.x 直接 `LegacyModuleError`。**必须锁 `mavsdk<4`**(最新 3.17.4,
|
||||||
- **libstdc++ 符号**:wheel 内嵌库要求 GCC≥12 的运行时符号;官方镜像
|
aarch64 官方 wheel `manylinux2014_aarch64`,PyPI 已核对);
|
||||||
Bookworm(GCC 12)/ Trixie(GCC 14)均满足,此前 Ubuntu 镜像上出现的
|
32 位 armv7l 支持不稳定——这是必须 64 位镜像的主因。
|
||||||
`undefined symbol: ..._M_futex_wait_until...` 不应复现。若仍报:
|
- 3.x 为 gRPC 架构,pip 包内嵌 `mavsdk_server` 可执行文件,**不加载
|
||||||
`ldd <libcmavsdk.so 路径> | grep stdc` 确认链接对象,必要时用
|
libcmavsdk.so,没有 libstdc++ 符号问题**——此前两系统上轮番出现的
|
||||||
`LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libstdc++.so.6` 兜底。
|
`undefined symbol: ..._M_futex_wait_until...` 是 4.x 原生库专属坑,
|
||||||
- 安装后别只验证 import,要让原生库真加载一次。**mavsdk 4.x 已无独立
|
换回 <4 后自然消失。
|
||||||
`mavsdk_server` 可执行文件**(2.x gRPC 架构的旧物),原生库是
|
- 安装后自检三步(缺一不可;单测全绿**不**证明 mavsdk 已装,测试已打桩脱钩):
|
||||||
`mavsdk/lib/libcmavsdk.so`,正确自检:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 复现设定点构造(原生库在此加载),打印 cmavsdk OK 即通过
|
pip list | grep -i mavsdk # 必须显示 3.x(如 3.17.4)
|
||||||
python -c "from mavsdk import offboard; offboard.VelocityBodyYawspeed(0,0,0,0); print('cmavsdk OK')"
|
python -c "from mavsdk import System; print('api OK')"
|
||||||
# 动态链接齐全性(无输出=齐全)
|
find ~/venv-pod -name mavsdk_server # 应有输出;直接执行能起服务更佳
|
||||||
ldd ~/venv-pod/lib/python3*/site-packages/mavsdk/lib/libcmavsdk.so | grep "not found"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
报 `undefined symbol` 按上面 libstdc++ 条目排查;`Exec format error` 是架构装错。
|
|
||||||
注意:单测全绿**不**证明 mavsdk 已装或原生库健康(测试已打桩脱钩),
|
|
||||||
本步不可替代。
|
|
||||||
- 连接串写法(`pod_bridge.json` 的 `px4.connection_string`):
|
- 连接串写法(`pod_bridge.json` 的 `px4.connection_string`):
|
||||||
- Pi 串口直连飞控 TELEM:`serial:///dev/ttyUSB0:57600`(波特率按飞控侧设置);
|
- Pi 串口直连飞控 TELEM:`serial:///dev/ttyUSB0:57600`(波特率按飞控侧设置);
|
||||||
- 经数传/仿真:`udp://:14540`。
|
- 经数传/仿真:`udp://:14540`。
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# requirements-pod.txt —— 树莓派 4B(Ubuntu 24.04)吊舱桥接最小依赖
|
# requirements-pod.txt —— 树莓派 4B(Ubuntu 24.04)吊舱桥接最小依赖
|
||||||
# 只装这几个,切勿在 Pi 上装全量 requirements.txt(torch/cv2 无意义且数百 MB)
|
# 只装这几个,切勿在 Pi 上装全量 requirements.txt(torch/cv2 无意义且数百 MB)
|
||||||
# 详见 docs/树莓派4B部署注意事项.md §2
|
# 详见 docs/树莓派4B部署注意事项.md §2
|
||||||
mavsdk # PX4 遥测订阅 + offboard 指令(aarch64 官方 wheel)
|
mavsdk<4 # PX4 遥测订阅 + offboard;⚠ 必须锁 <4:v4 是全新原生 API 重写,与本仓库经典 gRPC API 不兼容(最新 3.17.4 有 aarch64 wheel)
|
||||||
pyserial # 吊舱串口(115200 8N1)
|
pyserial # 吊舱串口(115200 8N1)
|
||||||
pytest # 仅上机自测(tests/pod_bridge 92 条)需要,部署运行可省
|
pytest # 仅上机自测(tests/pod_bridge 92 条)需要,部署运行可省
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ opencv-python # camera.py / camera_test.py / video_test.py / demo_ster
|
|||||||
ultralytics
|
ultralytics
|
||||||
|
|
||||||
# ---- 飞控通信(MAVSDK offboard -> PX4) ----
|
# ---- 飞控通信(MAVSDK offboard -> PX4) ----
|
||||||
mavsdk # test.py / demo_track_control.py / pod_bridge.px4_gateway
|
mavsdk<4 # ⚠ 锁 <4:v4 为全新原生 API,经典 gRPC API(System/offboard/telemetry)已移除
|
||||||
|
|
||||||
# ---- 吊舱串口(pod_bridge.pod_serial,惰性导入) ----
|
# ---- 吊舱串口(pod_bridge.pod_serial,惰性导入) ----
|
||||||
pyserial
|
pyserial
|
||||||
|
|||||||
Reference in New Issue
Block a user