# 1910bam **Repository Path**: huahuaze/1910bam ## Basic Information - **Project Name**: 1910bam - **Description**: 飞特电机1910bam参数辨识, 完美替换microduck的韩国电机, 前提是必须对电机参数做bam的辨识。 这里提供辨识的脚本和辨识流程,并直接提供已经辨识好的m3参数,供大家参考 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-11 - **Last Updated**: 2026-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HD1910 BAM 标定(飞特 HD-1910-C001 / HLS 内存表) 本目录用于给飞特 **HD1910** 舵机做 **BAM(Better Actuator Models,Rhoban)** 执行器辨识: 在单摆测试台上记录一组轨迹,拟合出 电机常数 `kt`、电阻 `R`、表观惯量、固件增益比、 以及 M1~M6 六种摩擦模型的参数,最终得到可直接用于 MuJoCo / mjlab 仿真的 `params/hd1910/m*.json`。 参考实现:(其中 `bam/feetech/` 是 STS3215 的采集代码,本项目按同样的架构为 HD1910 重写了驱动层)。 ## 目录 ``` hd1910bam/ ├── README.md ← 你在这里 ├── docs/ │ ├── 01_标定原理与BAM流程.md BAM 在辨识什么、模型公式、流水线 │ ├── 02_硬件搭建与安全.md 单摆台设计、配重/臂长选型、接线、安全 │ ├── 03_操作步骤SOP.md ★ 照着做:从接线到拿到 params 的每一步命令 │ ├── 04_HD1910寄存器与单位换算.md 用到的寄存器、单位、规格书推导的初值 │ ├── 05_常见问题FAQ.md │ └── 记录表.md 每次采集要填的表 ├── hd1910bam/ Python 包(每个模块 python -m hd1910bam.<名> --help) │ ├── protocol.py FT-SCS 串口协议 │ ├── hd1910.py HD1910 驱动:寄存器表、单位换算、反馈块读取 │ ├── bench.py 测试台配置(串口/ID/零位) │ ├── trajectory.py BAM 标定轨迹(与上游一致) │ ├── check.py ① 通信检查 / 寄存器 dump / 采样率 / 小幅摆动 │ ├── zero.py ② 单摆零位标定 │ ├── static_gain.py ③ 静态测 error_gain、kt/R(可选,推荐) │ ├── record.py ④ 记录一条轨迹 → data_raw/*.json │ ├── all_record.py ④ 批量:Kp × 轨迹 │ ├── jitter.py 采样抖动检查 │ ├── process.py ⑤ 重采样到固定 dt → data_processed/ │ ├── bam_actuator.py HD1910 在 BAM 中的执行器模型(注册名 hd1910) │ ├── fit.py ⑥ 拟合(包装 bam.fit) │ ├── plot.py ⑦ 绘图(包装 bam.plot) │ └── selftest.py 无硬件自检(协议 + 合成数据全流程) ├── reference/ 你提供的资料:hls2915.py、reg.txt、规格书 PDF ├── data_raw/ data_processed/ params/ 数据与结果 ├── bench_config.json 由 zero.py 生成 └── .venv/ 已装好 pyserial/numpy/BAM/optuna 的虚拟环境 ``` ## 快速开始(详见 docs/03) ```bash cd ~/hd1910bam source .venv/bin/activate python -m hd1910bam.selftest # 0. 无硬件自检 python -m hd1910bam.check --port /dev/ttyUSB0 --save # 1. 通信 + 寄存器 python -m hd1910bam.zero # 2. 零位(摆臂下垂) python -m hd1910bam.static_gain --mass 0.2 --arm-mass 0.01 --length 0.12 --kp 32 # 3. 可选 python -m hd1910bam.all_record --mass 0.2 --arm-mass 0.01 --length 0.12 --kps 4 8 16 32 --acceleration 0 # 4. # …换配重/臂长,重复第 4 步 4~6 次 python -m hd1910bam.jitter --logdir data_raw python -m hd1910bam.process --raw data_raw --logdir data_processed --dt 0.005 # 5. for m in m1 m2 m3 m4 m5 m6; do # 6. WANDB_MODE=disabled python -m hd1910bam.fit --logdir data_processed --model $m \ --validation_kp 8 --trials 30000 --output params/hd1910/$m.json done python -m hd1910bam.plot --logdir data_processed --sim --params params/hd1910/m1.json params/hd1910/m6.json # 7. # 6b. 推荐做法:固定规格书推导的 kt/R,只拟合摩擦与增益(快、稳,见 docs/06) python -m hd1910bam.fit_fixed --logdir data_processed --model m3 --x0 params/hd1910/m3_spec.json \ --fix "{'kt':0.6253,'R':3.146,'max_velocity':20.0}" --validation_kp 8 --gens 200 --workers 4 \ --output params/hd1910/m3_spec_v2.json python -m hd1910bam.eval_params --logdir data_processed params/hd1910/m3_spec.json # 7b. 按 Kp/轨迹分组看 MAE ``` **当前推荐参数:`params/hd1910/m3_spec.json`**(2026-09-11,验证 MAE 0.020 rad),每个数值的来源见 docs/06。 ## 重要前提 / 已知不确定项 - **运行模式**:规格书写 HD1910 出厂默认是 **模式 4「纯位置 PD(Sim2Real)」**,BAM 模型就是按“固件 P 控制 + 电压驱动”建的, 记录时默认写 `0x21 = 4`、`Kd = 0`。若固件不认模式 4(回读不等于 4),用 `--mode 0`。 - **速度寄存器单位**:内存表标注 0.732 RPM/tick,未经实测确认。`record.py` 会用位置微分回归出实际系数并打印; `process.py` 默认用位置微分重算速度,拟合只用位置,因此不影响结果。 - **error_gain**:固件“Kp → 占空比”的换算系数未知,先沿用 STS3215 的 0.166,由拟合参数 `error_gain_ratio` 吸收; `static_gain.py` 可以直接测出来。 - 串口权限:`sudo usermod -aG dialout $USER` 后重新登录。 最后推荐M3辨识参数 {"kt": 0.7551569982792645, "error_gain_ratio": 1.3714048225346, "R": 6.173774198536015, "armature": 0.0019914685975229735, "max_velocity": 17.362091341140857, "q_offset": -0.0647274855880046, "command_delay": 0.0001696843585273231, "friction_base": 0.00562987368845132, "load_friction_base": 0.34516334505366014, "friction_viscous": 0.004193652514204752, "model": "m3", "actuator": "hd1910"}