Files
go1_pro_deploy/deploy_45dim_rl_gym/bpu_deploy_s100
2026-07-30 19:22:54 +08:00
..
2026-07-30 19:22:54 +08:00
2026-07-29 21:00:26 +08:00
2026-07-30 19:22:54 +08:00
2026-07-29 21:00:26 +08:00

S100 BPU 部署测试

这个目录是 S100 平台的隔离部署路径,不覆盖现有 X5 BPU 脚本。

当前默认模型:

deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm

S100 量化参数:

  • 原始模型:deploy_45dim_rl_gym/policy_robotlab_26000.onnx
  • 历史长度RobotLab 10 帧
  • 输入:obs_4d [1, 1, 1, 450]float32 featuremap
  • 输出:actions [1, 12, 1, 1]
  • marchnash-e
  • Docker 镜像:registry.d-robotics.cc/deliver/ai_toolchain_ubuntu_22_s100_s600_cpu:v3.7.0

本机量化

在 Mac 的仓库根目录执行:

cd /Users/chenyouyuan/cyy_ws/deploy_go1_pro
bash deploy_45dim_rl_gym/bpu_quantization/quantize_policy_s100.sh

等价显式命令:

cd /Users/chenyouyuan/cyy_ws/deploy_go1_pro
bash deploy_45dim_rl_gym/bpu_quantization/quantize_policy_s100.sh \
  --policy ../policy_robotlab_26000.onnx \
  --round 26000 \
  --name policy_robotlab_26000 \
  --history-len 10 \
  --samples 64 \
  --min-samples 32 \
  --log-prefix robotlab_go1_deploy \
  --cal-tag robotlab \
  --march nash-e

输出文件:

deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm

同步到 S100

S100 板端地址:

root@192.168.11.144

如果仓库已经通过 git 同步,直接在板端拉取即可。如果只同步产物,可以从 Mac 执行Docker 只在 Mac 上用于量化S100 板端不运行 Docker

scp \
  deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm \
  root@192.168.11.144:/root/go1_pro_deploy/deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/

同时确保校准输入存在,离线测速会用到:

scp \
  deploy_45dim_rl_gym/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \
  root@192.168.11.144:/root/go1_pro_deploy/deploy_45dim_rl_gym/bpu_quantization/calibration_data_26000_robotlab_fast64/

板端安装 hbm_runtime

ssh root@192.168.11.144
cd /usr/hobot/lib/hbm_runtime
./build.sh install

S100 使用官方 hbm_runtime Python 绑定加载 .hbm,不复用 X5 的 /usr/include/dnn/hb_dnn.h C++ wrapper。

离线推理测速

先用官方 hrt_model_exec 看模型信息:

cd /root/go1_pro_deploy
/usr/hobot/bin/hrt_model_exec model_info \
  --model_file deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm

官方 hrt_model_exec 稳态测速:

cd /root/go1_pro_deploy
/usr/hobot/bin/hrt_model_exec perf \
  --model_file deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm \
  --model_name policy_robotlab_26000_s100_int16_gemm \
  --input_file deploy_45dim_rl_gym/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \
  --frame_count 1000 \
  --thread_num 1

当前板端 root@192.168.11.144 已验证:

Average latency: 0.394 ms
FPS: 2442.456

部署脚本使用的 Python hbm_runtime wrapper

cd /root/go1_pro_deploy
PYTHONPATH=/root/go1_pro_sdk:/root/go1_pro_deploy \
python3 deploy_45dim_rl_gym/bpu_deploy_s100/test_bpu_policy.py \
  --repeat 1000

当前板端结果:

Backend: hbm_runtime_s100
Input: obs_4d (1, 1, 1, 450)
Output: actions (1, 12)
repeat=1000 avg_ms=0.733020

纯 C++ BPU wrapper/bench不经过 Python 推理路径:

cd /root/go1_pro_deploy/deploy_45dim_rl_gym/bpu_deploy_s100/cpp
bash build_board.sh

./s100_bpu_bench \
  /root/go1_pro_deploy/deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm \
  /root/go1_pro_deploy/deploy_45dim_rl_gym/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \
  1000 \
  -1

参数含义:

  • 第 1 个参数S100 .hbm 模型。
  • 第 2 个参数float32 输入样本,当前 RobotLab 10 帧模型应为 450 个 float。
  • 第 3 个参数:重复推理次数。
  • 第 4 个参数BPU core-1 表示自动选择,0..3 表示固定单核。

这个 C++ wrapper 只做离线推理:模型加载和 tensor 内存分配只初始化一次循环里只做输入拷贝、cache flush、hbDNNInferV2hbUCPSubmitTask、等待和输出拷贝。它不会连接机器人,也不会发送电机指令。

当前板端纯 C++ 结果:

backend=cpp_dnn_api_s100
input_floats=450 output_floats=12 bpu_core=0
action [0.544585 -1.108296 0.916061 -0.837005 0.074006 -0.434765 -0.858212 -2.766010 1.127831 0.422954 1.424179 -0.016353]
action_max_abs 2.766010
repeat=5000 cpp_avg_ms=0.426015

离线推理检查

这一步会连接 MCU 读取状态,但不会发送电机指令:

cd /root/go1_pro_deploy
PYTHONPATH=/root/go1_pro_sdk:/root/go1_pro_deploy \
python3 deploy_45dim_rl_gym/bpu_deploy_s100/deploy_go1_robotlab_bpu_s100_fastcpp.py \
  --infer-check \
  --log-dir logs \
  --print-every 50 \
  --max-steps 500

悬空状态机测试

先不要加 --enable-rl,确认 R2 只能推进到 INFER_TEST

cd /root/go1_pro_deploy
PYTHONPATH=/root/go1_pro_sdk:/root/go1_pro_deploy \
python3 deploy_45dim_rl_gym/bpu_deploy_s100/deploy_go1_robotlab_bpu_s100_fastcpp.py \
  --kill-sport \
  --log-dir logs \
  --kp 28 --kd 0.7 \
  --kp-cal 20 --kd-cal 1.0 \
  --power-factor 7 \
  --position-protect-limit 0.0 \
  --action-clip 5.0 \
  --action-trip-limit 8.0 \
  --action-hard-trip-limit 16.0 \
  --max-target-step 0.025 \
  --max-roll-deg 35 \
  --max-pitch-deg 35 \
  --swap-vy-yaw \
  --rc-vx-scale 0.3 \
  --rc-vy-scale 0.3 \
  --rc-wz-scale 0.6 \
  --log-timing

实际 RL 启动

只有悬空测试正常后,再启用 RL

cd /root/go1_pro_deploy
PYTHONPATH=/root/go1_pro_sdk:/root/go1_pro_deploy \
python3 deploy_45dim_rl_gym/bpu_deploy_s100/deploy_go1_robotlab_bpu_s100_fastcpp.py \
  --kill-sport \
  --enable-rl \
  --log-dir logs \
  --kp 28 --kd 0.7 \
  --kp-cal 20 --kd-cal 1.0 \
  --power-factor 7 \
  --position-protect-limit 0.0 \
  --action-clip 5.0 \
  --action-trip-limit 8.0 \
  --action-hard-trip-limit 16.0 \
  --max-target-step 0.025 \
  --max-roll-deg 35 \
  --max-pitch-deg 35 \
  --swap-vy-yaw \
  --rc-vx-scale 0.3 \
  --rc-vy-scale 0.3 \
  --rc-wz-scale 0.6 \
  --log-timing

如果要临时指定其它 S100 .hbm

python3 deploy_45dim_rl_gym/bpu_deploy_s100/deploy_go1_robotlab_bpu_s100_fastcpp.py \
  --bpu-model /absolute/path/to/model.hbm