- 新增 run_loop 闭环:F 帧+H 步历史双滑窗,冷启动重复同帧+零动作, 每步 采样→推理→执行→回写,hz 节拍控制,可选同步录制 - --loop CKPT/--hz/--loop-steps 参数,按 .hef 后缀选 Hailo/PyTorch 后端, actpred 软依赖(仅 --loop 时 import),保持 pybot 零依赖 - P1-2 帧源修复:闭环改从 camera 守护线程队列取最近 F 帧(低延迟), 替代 capture() 同步曝光阻塞,framerate/capacity 配置真正生效 - P1-1 overrun 告警:超时步记录实际耗时,汇总 overrun 比例并给降频建议 - 剔除 Speaker.delay 发声阻塞,speaker 补 delay=0 非阻塞 - 新增 tests/test_loop.py 11 用例(冷启动/历史滑动/索引映射/帧源等)
pybot
机器人 .mt 动作脚本解析器 —— bot4cj(仓颉版)的 Python 迁移版。
驱动大顺(Dashun)蜘蛛机器人(树莓派 aarch64,10 舵机 + 2 云台, PCA9685 PWM 控制器 + MPU6050 姿态传感器)。
迁移方案与审计修复映射见 docs/reports/bot4cj_python_migration_dev_doc.md。
特性
- 零第三方依赖:纯标准库(fcntl / struct / threading / wave / argparse),
树莓派上
git pull即部署,无构建步骤。 (picamera2 为可选依赖,仅@Camera摄像头块需要,树莓派 OS 预装,勿 pip 安装) - 与仓颉版逐语义对齐:FSM 解析器、占位符递归、Servo 校准算法、 PCA9685 寄存器序列均与 bot4cj 一致(Mock 总线 journal 可逐字节 diff)。
- Python 插件替代 Lua:
modules/<块名>.py定义build(ctx) / call(ctx) / destroy(ctx),消除 JSON 深拷贝 + 五层 FFI 桥接。 - 审计修复:bot4cj 审计 15 项发现(S01
S08 / Q01Q07)全部修复, 详见迁移文档 §5。
用法
cat scripts/std.mt | ./_run.sh # 与 bot4cj 相同的管道用法
./_run.sh scripts/std.mt # 位置参数(增强)
./_run.sh --dry-run scripts/std.mt # Mock 总线,动作序列到 stdout
./_run.sh --test roundtrip in.mt out.mt # 解析↔序列化往返自检
./_run.sh --verbose scripts/std.mt # DEBUG 日志(stderr)
./_run.sh --record data/ep scripts/std.mt # 录制 actpred 格式 episode
-i / -o 参数位保留(reserved),未来对接跨进程 FIFO。
实时预测闭环(--loop)
--loop CKPT 进入进程内闭环:采样 → actpred 推理 → 执行 → 回写历史。
脚本提供硬件配置与 @Action 表头(动作向量索引映射),不执行脚本动作行。
./_run.sh --loop ../actpred/checkpoints/best_inference.pt --hz 10 scripts/std.mt
./_run.sh --loop actpred_pretrain.hef --hz 20 --loop-steps 100 scripts/std.mt # NPU 后端
- checkpoint 后缀
.hef→ Hailo NPU 后端,否则 → PyTorch 后端 hz须 ≥ 推理 + 执行耗时(ONNX ~11ms / Hailo ~12ms,hz ≤ 50 安全)@Action表头列数须 ≤action_dim(默认 18),闭环中跳过spk.delay阻塞- 帧源:闭环从 camera 守护线程队列取最近 F 帧(无阻塞),
@Camera的framerate建议 ≥ 2×hz以保证帧新鲜度;capacity应 ≥ F(帧窗长度)。 部署时若日志出现loop overrun告警,说明hz超过推理+执行能力,应降低hz
目录
pybot/ # 包:parser / robot / hardvars / plugin / main
pybot/hd/ # 硬件层:i2c / spi / servo / kalman / mpu6050 / speaker / camera
modules/ # 硬件驱动插件:PCA9685 / SPI / ADS1115 / ADS1256
scripts -> ../bot4cj/scripts # .mt 脚本与仓颉版共享
tests/ # pytest 单元测试(Mock 总线,无需硬件)
插件查找顺序:$PYBOT_MODULES_PATH(冒号分隔)→ 包内置 modules/ → ./modules/。
开发
./_set.sh # venv + pytest 全量测试
venv/bin/python -m pytest tests/ -v
.mt 脚本格式
见 bot4cj/README.md 与 scripts/std.mt。
格式要点:@块名 开块、行 0 为表头、; 结行、# 注释、
- 占位符(非首行取上一行同列值;首行数值列解析为 0)、@ 收块。
新增块(无仓颉版对应):
@Camera
name width height framerate capacity;
cam0 1920 1080 30 4;
@
build 启动后台抓帧线程,维护容量为 capacity 的有界帧队列(满丢最旧帧);
play 返回最新帧 (时间戳, frame)。