整机调试最大的坑是「一步到位」:刚把 12 个关节拧上腿就急着让它走路,结果一旦抖动、发热、摔倒,你分不清是哪个关节、哪一环的问题。正确做法是把调试分层递进,每一阶段只验证一件事,通过了再进入下一阶段。
每阶段的验收标准要「可测量、可复现」,不要用「感觉还行」这种主观判断。下表给出每个阶段常用的量化门槛:
| 阶段 | 验收标准(量化) | 常用工具 | 不通过时的典型原因 |
|---|---|---|---|
| 1 上电安全 | 空载电流 < 阈值(约几十 mA 级)、3.3V/5V/母线电压正确、无元件发烫、nFAULT 为高 | 限流电源、万用表、示波器 | 短路/虚焊/去耦不足/驱动保护触发 |
| 2 单关节 | 位置阶跃无超调或超调 < 约 10~20%,速度阶跃快速收敛,电流环无啸叫 | 串口绘图、编码器读数 | 增益过大/过小、谐振、编码器零位错误 |
| 3 多关节 | 多关节同步误差 < 约 1~2 个控制周期,丢帧率接近 0,抱闸时序正确 | 总线分析仪、逻辑分析仪 | 终端电阻、ID 冲突、抖动过大 |
| 4 站立 | 静立 30s 不倒,质心投影稳定在支撑多边形内,轻微推搡(< 约 5N)不倾倒 | IMU、ZMP 在线估计 | 踝刚度不足、质心估计误差 |
| 5 平衡 | 原地重心转移幅度达标、单腿支撑约 2~3s 不倾倒 | IMU、脚底力传感器 | 侧向刚度不足、捕获点(CP)越界未迈步 |
| 6 行走 | 连续步行约 10~20 步不摔、平均速度约 0.1~0.3m/s、落地冲击在限幅内 | 录像、里程计、加速度计 | 步态参数不当(见第 4 节) |
整机走得好不好,先看每个关节「听不听话」。关节级整定的核心是由内向外:先把电流环(力矩环)调好,再包速度环,最后包位置环。内环是外环的「执行机构」,内环不稳,外环永远调不稳。
电流环是力矩的直接来源,它决定了关节的「硬度」和响应速度。整定目标是:阶跃电流响应快、无振荡、跟踪误差小,即带宽和相位裕度达标。对关节模组,电流环带宽约 300Hz~1kHz 是常见目标,高性能场合可到约 2kHz 以上;相位裕度目标约 45°~60°,增益裕度约 6~10dB(小于此值易振荡)。
整定步骤(以本项目 SimpleFOC 生态为例):
# SimpleFOC 电流环整定示意(伪代码,数值为示例)
motor.voltage_power_supply = 24; # 母线电压
driver.voltage_limit = 12; # 调试期先限幅,防止过冲
motor.PID_current_q.P = 8.0; # 电流环比例(示例,按电机电感调整)
motor.PID_current_q.I = 400.0; # 电流环积分(约 = P / (L/R))
motor.PID_current_d.P = 8.0; # d 轴同理
motor.PID_current_d.I = 400.0;
motor.current_limit = 25.0; # 电流限幅(堵转保护)
# 调试:从 P=0 起步,逐步加大;出现啸叫即回退
速度环与位置环通常用串级 PI/PID,整定顺序仍是先内后外。工程上常用齐格勒-尼科尔斯(Ziegler-Nichols)临界比例法起步:先只加比例,逐步增大直到系统出现持续等幅振荡,记下此时的临界增益 Ku 与振荡周期 Tu,再按经验公式取整——PID 时约 Kp = 0.6Ku、Ti = 0.5Tu、Td = 0.125Tu,PI 时约 Kp = 0.45Ku、Ti = 0.83Tu。这个方法给出的是「能跑」的初值,之后还要微调。
| 参数 | 作用 | 过大的症状 | 过小的症状 |
|---|---|---|---|
| 速度环比例 Kp | 决定速度响应快慢与刚度 | 速度抖动、噪声放大、高频啸叫 | 响应慢、跟随滞后、发软 |
| 速度环积分 Ki | 消除稳态速度误差、抵抗恒定负载 | 超调、低频振荡、积分饱和 | 存在稳态速度误差、抗负载差 |
| 位置环比例 Kp | 决定位置刚度(弹簧感) | 定位振荡、来回摆动、噪声抖动 | 定位软、有静差、受外力易偏 |
| 位置环积分(若用) | 消除定位静差 | 超调、积分饱和、归零过冲 | 残余位置静差 |
| 位置环微分 Kd(若用) | 增加阻尼、抑制超调 | 放大编码器噪声、抖动 | 超调大、收敛慢 |
判断口诀:「比例管快慢、积分管误差、微分管阻尼」。位置环典型带宽约 20~100Hz,速度环约 50~200Hz(约为电流环的 1/10~1/5),带宽由内向外逐层递减——外环快不过内环,否则会「催着内环跑」导致振荡。整定完成标准:位置阶跃「快、稳、准」——上升时间尽量短、超调 < 约 10~20%、无振荡、静差接近 0。
关节不是刚体:电机惯量通过减速器/谐波、联轴器连到负载,构成双惯量系统,传动链的柔顺性会在几百 Hz~几 kHz 处产生一个机械谐振峰。当速度环/位置环带宽接近这个频率时,系统会剧烈振动、啸叫甚至损坏减速器——这就是「增益一加就抖」的常见根源。
如何测谐振频率:① 开环扫频:不闭环,给电机施加幅值很小的正弦速度/电流激励,从低频扫到高频,记录速度幅值响应,找到幅值显著放大的峰值频率(反谐振点附近也一并记录);② 白噪声激励 + FFT:注入宽带小信号,对速度/电流做 FFT 找谱峰;③ 自整定辨识:很多伺服驱动器自带在线辨识(基于 FFT 的谐振特征辨识)。测得谐振频率 f_r 后,在速度环输出(或电流指令前)串入一个陷波滤波器(notch filter):
工程要点:陷波中心频率会随负载和姿态漂移(负载越大、等效惯量越大,谐振频率越低),所以固定陷波只适合负载基本不变的关节;负载变化大时优先用自适应陷波(在线辨识 f_r 并实时跟踪)。陷波深度不是越深越好——太深会吃掉相位裕度,一般先「浅陷波 + 降增益」组合处理。
关节运动时,摩擦会吃掉一部分力矩,表现为:低速时「顿挫」(爬行)、换向时位置「死区」、速度环跟随滞后。摩擦最常用的模型是库仑 + 粘滞:
辨识方法(恒速法):让关节以多个恒定速度 ω₁…ωₙ 正转和反转(电流环闭环、速度开环给恒定电压/电流),每点记录平均力矩(电流 × 扭矩系数);以 ω 为横轴、平均 τ 为纵轴做线性拟合,截距≈库仑摩擦 F_c,斜率≈粘滞摩擦 B(正反转符号相反,取绝对值)。
# 摩擦辨识伪代码(恒速法)
for w in [0.5, 1, 2, 4, 8]: # 多个恒定速度点(rad/s)
for sign in [+1, -1]: # 正反转各测一次
drive_openloop(w * sign) # 开环给到该速度,等稳定
tau_avg = mean(iq) * Kt # 平均力矩 = 平均电流 × 扭矩系数
record(w, sign, tau_avg) # 记录 (速度, 方向, 平均力矩)
# 拟合 tau_avg = Fc + B*|w| ,得到 Fc、B
得到 F̂c、B̂ 后,把它们作为前馈加到速度环输出上:
有了前馈,反馈环只需「修小误差」,带宽要求下降、跟踪更跟手。注意两点:① sign() 在零速附近会来回跳变,工程上常用 tanh() 平滑或加死区;② 摩擦系数会随温度、润滑老化变化,定期重辨识。
整机有十几个到几十个关节,「单关节调好」不等于「整机协调」——关节之间靠总线串起来,总线延迟与抖动会直接变成整机的不稳定。本节讲关节模组联网时最容易踩的坑。
| 总线 | 速率 | 典型控制周期 | 适用关节数 | 备注 |
|---|---|---|---|---|
| CAN(CAN 2.0) | 最高约 1Mbps(标准帧每帧 8 字节数据) | 约 1ms~10ms(多节点时受带宽限制) | 少~中(10~20 关节) | 需算带宽:30 关节 × 1kHz × 8 字节会超 1Mbps,要降频或分组 |
| CAN-FD | 数据段可到约 5~8Mbps | 约 0.5ms~2ms | 中 | 帧数据更长,缓解 CAN 2.0 带宽瓶颈 |
| EtherCAT | 100Mbps 全双工 | 约 125μs~1ms(常见) | 多(几十~上百关节) | 分布式时钟(DC)同步,抖动亚微秒级 |
控制周期怎么选:位置/速度指令下发周期要和内环匹配——位置环周期通常取约 1ms(EtherCAT 的 1kHz 或 CAN 的 1ms),电流环则永远在关节 MCU 内部以更高频(约 10~40kHz)独立跑。外层指令周期太长会「一顿一顿」,太短又浪费总线带宽。
抖动(jitter)指控制周期实际执行时刻的波动。抖动大时,即使平均周期正确,位置环的「采样时刻忽快忽慢」也会带来抖动噪声甚至振荡。降低抖动的手段:① 用硬件定时器中断而不是软件 delay() 生成控制节拍;② 总线用主站硬件时间戳/分布式时钟(EtherCAT DC)对齐;③ 把通信接收放进中断/DMA,避免主循环耗时导致丢节拍。
多关节同步的要求:所有关节在同一个控制周期里采样、执行,指令带时间戳,过期指令丢弃。EtherCAT 靠 DC 把各从站时钟对齐到亚微秒级;CAN 无硬件同步,多关节高频同步更难,通常靠「广播帧 + 各节点本地定时」近似同步。
整机上电顺序必须遵守「先通信、后使能、再运动」,断电反序:
关节都听话了,整机还不会走路——因为「走路」是全身动力学问题:迈步时质心会周期性跑出支撑多边形,机器人靠重力前倒,再用下一步的落点接住自己。步态调参就是调整一组高层参数,让这条「受控的不稳定」链条稳定运转。本节先给参数清单,再讲调参顺序,最后用倒立摆/ZMP 直觉解释「为什么调这个参数」。
| 参数 | 含义 | 起步参考值(小机) | 逐步调整方向 |
|---|---|---|---|
| 步幅(步长) | 单步质心前进的水平距离 | 约 3~8cm(小步) | 站稳后逐步加大,一次加约 1~2cm |
| 步频(步态频率) | 单位时间步数(或步态周期倒数) | 约 0.4~0.8Hz(慢走) | 走稳后逐步提高,同时注意落地冲击 |
| 抬脚高度(足底离地净空) | 摆动腿脚尖离地最大高度 | 约 1~3cm | 够用即可,过高反而冲击大、单支撑期变长 |
| 支撑期占比(duty factor) | 单腿支撑时间占步态周期比例 | 约 0.6~0.7(偏静态) | 走快时降到约 0.5 左右,跑动 < 0.5 |
| 躯干前倾角 | 躯干相对竖直的前倾角度 | 约 1°~3° | 加速/起步加大,减速/停止回正甚至后仰 |
| 重心高度(CoM 高度) | 质心离地高度(由屈膝程度决定) | 腿伸直略高、屈膝略低 | 降低更稳但屈膝力矩大、能耗高 |
每一步的判断标准:站稳 → 站立 30s 不抖;原地转移 → 质心轨迹平滑无突跳;单腿支撑 → 不倾倒、支撑踝无明显高频抖;小步慢走 → 连续 5 步不拖地不后仰;逐步加快 → 每一步都先「能走稳」再「走更快」,出现任何异常立即回退上一组参数。
| 现象 | 最可能相关的参数 | 调整方向 | 倒立摆/ZMP 直觉 |
|---|---|---|---|
| 迈不开步(原地踏步/步幅极小) | 前倾角不足、步幅过小、踝力矩/地面摩擦不足 | 加大前倾角、加大步幅、提高踝增益或换地面 | 前倾让质心获得向前偏移,产生向前的重力分量「推」身体前倒;ZMP 前移到支撑区前缘,才有前进动力 |
| 拖地(脚尖擦地) | 抬脚高度不足、摆动轨迹过低、重心未提前转移 | 加抬脚高度、抬高摆动轨迹、提前把重心移到支撑腿 | 摆动腿离地净空不够,脚还没摆到落点就蹭地,被摩擦力绊住 |
| 身体后仰 | 前倾不足/过早回正、步频过快、质心没跟上 | 维持前倾、降步频、让质心先于摆腿移动 | 后仰时质心投影落到支撑区后缘,前进分量消失,机器被自己「拉住」 |
| 横向晃动(左右摆) | 侧向质心转移幅度过冲、髋内收外展刚度不足、步宽过窄 | 减小侧移过冲、加髋侧向增益、适当加步宽 | 单腿支撑期质心必须在支撑脚正上方附近;侧向转移过头,ZMP 越出脚掌内侧就侧倾 |
| 落地冲击大(咚咚响) | 抬脚过高、落地速度大、踝/膝缺乏柔顺缓冲、支撑期切换太急 | 降抬脚高度、控制落地速度、加柔顺(阻抗/力矩环)、延长双支撑相 | 摆动腿落地动能瞬间转化为地面反力冲击;柔顺踝把冲击「泄」掉,而不是硬撞 |
把机器人简化成线性倒立摆(LIPM):一根等长腿顶着一个质点(质心),质心高度恒定为 h,绕支撑点摆动。它的水平动力学极简:
从这两个式子能推出上面所有参数的作用:
调试中出问题,最忌「东试一下西试一下」。正确做法是按决策树从「最常见、最易测」的原因开始逐层排查。下表把六类高频故障的排查顺序压缩成树:
| 故障现象 | 排查第 1 步 | 排查第 2 步 | 排查第 3 步 | 常见根因 |
|---|---|---|---|---|
| 电机不转 | 测母线电压是否正常、有无欠压 | 查使能位/抱闸是否已打开、状态字是否故障 | 查通信指令是否到达、编码器是否有反馈 | 供电断、抱闸未开、使能未置、指令没发、编码器断线 |
| 电机抖动/啸叫 | 先降电流环 Kp 看是否消失 | 扫频找谐振峰,判断是否机械谐振 | 查编码器信号噪声/接地/屏蔽 | 增益过高、机械谐振、编码器噪声、采样偏置 |
| 关节过热 | 测持续电流是否长期接近/超过额定 | 查是否堵转、机械卡死、负载异常 | 查散热(风扇/导热/铜皮)是否到位 | 持续扭矩超限、堵转保护缺失、散热不足、环境温度高 |
| 位置漂移 | 查编码器磁环/连接是否松动 | 查传动是否打滑(联轴器/键槽) | 查减速器背隙(回差) | 编码器松动、打滑、背隙、零位漂移 |
| 通信中断 | 查两端 120Ω 终端电阻是否只加两端 | 查线缆/接插件接触、是否手拉手拓扑 | 查节点 ID 是否重复、波特率是否一致 | 终端电阻缺失/重复、线断、ID 冲突、波特率不匹配 |
| 掉电坠落 | 查抱闸时序(是否先断驱动后抱闸) | 查掉电瞬间母线电压维持时间(电容) | 查重力矩是否超过抱闸/保持力矩 | 抱闸时序错、电容保持不足、保持力矩不够 |
调好之后还要「验收」,证明整机真的合格,而不是「今天碰巧能走」。下面给出四项最基础的验收测试。
| 测试项 | 方法 | 合格判据(参考) |
|---|---|---|
| 扭矩标定 | 测力臂 + 砝码/扭矩传感器,给多个电流值测输出扭矩,拟合电流→扭矩系数 Kt | Kt 线性度好、与标称值偏差 < 约 ±10%;额定/峰值扭矩达标 |
| 温升测试 | 以额定扭矩/额定转速持续运行约 30~60min,测电机绕组与 MOS/驱动板温度 | 绕组与 MOS 温升在允许范围(参考值:MOS 表面 < 约 80°C,具体看器件结温降额) |
| 耐久测试 | 规定工况循环运行(如步态循环 8h 或 N 万步),统计故障与磨损 | 无功能性故障,紧固件不松、编码器不漂、温升稳定 |
| 行走稳定性评估 | 连续步行记录步数/时长、质心侧向摆幅、跌倒次数、落地冲击峰值加速度 | 连续步行约 10~20 步不摔、质心摆幅小、落地冲击在限幅内、能平稳启动和停止 |
行走稳定性的简单指标(没有专业动作捕捉时也能测):① 连续步数/时长——能连续走多少步不倒;② 直线偏差——走 1m 后横向偏移多少;③ 落地冲击——用足底或躯干加速度计测落地瞬间峰值 g 值;④ ZMP 裕度——若有关节力矩与足底力,可实时算 ZMP 距支撑多边形边界的最近距离,裕度越大越稳。这些指标不需要昂贵设备,却能量化「走得好不好」。
把上面的流程落到你的 Hdrive 关节模组上,关键是「记录」——参数一多,不记录就等于白调。下面给一个可直接复制的调试记录模板,以及结合本项目硬件的常见问题清单。
============================================================
关节调试记录
------------------------------------------------------------
关节ID:__________ 位置:髋/膝/踝(L/R) 固件版本:__________
电机型号:__________ 减速比:__________ 编码器:__________
日期:__________ 调试人:__________
------------------------------------------------------------
[电流环] Kp=____ Ki=____ 带宽约____Hz 振荡判定:有/无
[速度环] Kp=____ Ki=____ 上升时间____ms 超调____%
[位置环] Kp=____ Ki=____ Kd=____ 静差____ 振荡:有/无
[谐振] 谐振频率 f_r=____Hz 陷波中心=____ 深度=____
[摩擦] Fc=____ B=____ 辨识速度点:________
[限幅] 电流限幅=____A 速度限幅=____ 软限位=____
[温升] 环境____°C 绕组____°C MOS____°C @额定运行____min
[抱闸] 上电时序验证:通过/失败 掉电抱闸:通过/失败
[备注] ________________________________________________
============================================================
| 现象 | 结合本项目硬件的可能原因 | 处理建议 |
|---|---|---|
| 上电就报 nFAULT | DRV8323 过流/欠压/过温保护,或母线电容未紧贴、去耦不足 | 查母线电容位置、栅极电阻、限流上电,读 nFAULT 拉低原因 |
| 电流采样噪声大/乱抖 | INA240 未做 Kelvin 连接、REF 1.65V 偏置不准、采样线没屏蔽 | 查 Kelvin 走线、校零点、加 RC 滤波、模拟区远离开关节点 |
| 低速顿挫/换向死区 | 摩擦补偿缺失、编码器零位不准、采样偏置 | 做摩擦辨识加前馈、重校编码器零位与采样零点 |
| 通信时通时断 | TJA1042 终端电阻、CANH/CANL 接线、ID 冲突 | 两端各 120Ω、手拉手拓扑、逐个节点加、查 ID/波特率 |
| 掉电腿坠落 | 抱闸续流二极管方向、抱闸时序、母线电容保持不足 | 查 SS34 方向、校验上电/断电时序、加大母线电容 |
| MOS 过热 | 2oz 铜厚/散热过孔不足、持续电流超限 | 补散热过孔阵列、加散热片、核对额定扭矩下的电流 |
sign(ω) 在零速附近抖动,如何平滑?如果关节负载随姿态变化(重力项),摩擦前馈公式还要加什么?
资料整理更新至 2026-08。下列来源经 web_search 核实,参数建议值中带「约」的为工程经验范围,请在实机上验证。