feat(pybot): bot4cj 的 Python 迁移版(.mt 解析 + 硬件驱动 + 插件系统)

- parser: FSM 解析器与仓颉版逐语义对齐,修 S01/S02/S04/Q05
- robot/hardvars: 六类硬件变量工厂,修 r.cj:911 重名 FIXME、Q07 倒序释放
- plugin: Python 插件替代 Lua 桥接,修 S07 三级路径查找
- hd: i2c(每fd锁 Q03/S06)/spi/servo/kalman/mpu6050(S05/Q06)/speaker(S03 实声)
- modules: PCA9685 与 Lua 版逐字节对齐;ADS1115 重写(experimental);ADS1256 空桩
- tests: 42 项 pytest 全绿(Mock 总线 journal 断言)
- CLI: --dry-run / --test roundtrip / --verbose;运行时零第三方依赖
This commit is contained in:
qing committed 2026-08-09 18:57:03 +00:00
1 parent 85eaa2114e
commit bba7ee3eb4
31 files changed
+2155

No files matched your search

+47
View File
@@ -0,0 +1,47 @@
"""Servo 校准算法测试:正装/反装/漂移/钳位(与 Servo.cj 语义逐项对齐)"""
from pybot.hd.servo import Servo
def make(max_a, min_a, offset):
sent = []
servo = Servo(max_a, min_a, offset, sent.append)
return servo, sent
def test_normal_install():
servo, sent = make(90.0, 0.0, 0.0)
servo.set_angle(45.0)
assert sent == [45.0]
def test_clamp_max():
servo, sent = make(90.0, 0.0, 0.0)
servo.set_angle(120.0)
assert sent == [90.0]
def test_clamp_min():
servo, sent = make(180.0, 30.0, 0.0)
servo.set_angle(10.0)
assert sent == [30.0]
def test_offset():
servo, sent = make(180.0, 0.0, 5.0)
servo.set_angle(40.0)
assert sent == [45.0]
def test_inverted_install():
"""负 max 表示反装:a = 180 - a(std.mt 的 s3 max=-90,45° → 135°)"""
servo, sent = make(-90.0, 0.0, 0.0)
servo.set_angle(45.0)
assert sent == [180.0 - 45.0]
def test_inverted_clamp_uses_abs():
"""反装钳位用 |max|:-90 装机 100° → 钳到 90 → 翻转 90"""
servo, sent = make(-90.0, 0.0, 0.0)
servo.set_angle(100.0)
assert sent == [90.0]