这篇先解决一个很实际的问题:你的 humanoid 明明“能动”,但一上负载就发热、掉压、抖动、软腿、抓不稳,问题到底出在执行器、减速器、供电,还是控制环根本没拿到稳定硬件边界?这篇适合已经开始做样机、想把“硬件瓶颈”从一句空话变成可测、可定位、可迭代结论的人。最关键的工程判断是:不要把所有失败都归咎于“电机不够强”或“算法还不够好”,先把扭矩限制、热限制、母线压降、结构间隙和传感器质量拆开测。
这篇适合谁
- 正在做人形机器人关节样机、腿部样机或双臂本体的人
- 已经有电机、驱动器、减速器和控制器,但实机表现明显比仿真差的人
- 想判断下一笔预算应该花在更大电机、改供电、改结构,还是补传感与散热的人
- 需要给项目建立一套硬件排查顺序,而不是靠拍脑袋换料的人
先纠正几个很常见的误区
- 误区 1:关节抬不起来,就是电机扭矩不够。
实际很常见的情况是母线掉压、热降额、驱动器限流、编码器零位漂移,或者减速器间隙放大了控制误差。 - 误区 2:实验室里能跑几分钟,就说明硬件方案成立。
很多人只验证瞬时动作,没有验证 10 分钟、30 分钟持续节拍下的温升、供电纹波和重复定位误差。 - 误区 3:仿真里稳定,实机不稳就是控制算法差。
如果真实系统的关节摩擦、回差、线束拖拽、供电内阻、温升退化都没建模,控制器是在替硬件烂账背锅。 - 误区 4:只要换更高性能驱动器,问题自然会消失。
驱动器升级只能解决一部分问题。结构刚度不足、质心布局不对、散热路径差、总线设计差,都会继续把新驱动器拖回老问题。
关键实现判断
真正影响 humanoid 样机可用性的,通常不是单一器件参数,而是下面这 5 条链路能不能一起闭合:
- 力矩链路:电机电流上得去,减速器传得出,结构吃得住。
- 热链路:控制器、绕组、减速器和壳体的热量排得出去,不会一热就自动降额。
- 供电链路:动态负载下母线电压不掉到危险区,再生能量也不会把系统顶到过压。
- 测量链路:位置、电流、温度、故障码和时序抖动都能被记录,而不是出了事只剩“感觉不对”。
- 控制链路:控制器知道真实边界,能在限流、限温、接触冲击和饱和状态下稳定退化,而不是突然发疯。
你只要有一条链路是黑箱,后面的调参成本都会飙升。
分步实践指南
第 1 步,先定义你到底在哪个工况失败
不要再说“这台机器人硬件不行”,要把失败写成具体场景:
- 单关节举臂 3 秒后电流顶满,位置还在掉
- 双臂同时前伸时母线电压瞬时跌落,控制器重置
- 单腿支撑时髋关节温度 6 分钟内持续升高,动作越来越软
- 脚落地后姿态抖动,只在高增益时出现
这一步的目的是把问题限定成“哪个动作、哪个时长、哪个姿态、哪组负载”下失效。没有工况定义,就没有靠谱诊断。
第 2 步,把问题先分到 4 个故障桶里
我更建议你先用下面这套故障桶做第一轮分类:
- 力不够:目标动作达不到,速度上不去,静态支撑不住。
- 热撑不住:刚开机能做,几分钟后明显变软,或者控制器主动限流。
- 电撑不住:大动作一来就掉压、重启、报码、通信异常。
- 机械和测量不干净:回差、抖动、异响、编码器漂移、线束干涉、接触后误差放大。
mjbots 的 moteus 故障排查文档就很值得借鉴,它把扭矩不足拆成限流、限功率、BEMF、温度、最大速度、位置边界等不同原因。这个思路的价值不在于你必须用它的驱动器,而在于你应该让自己的关节栈也能告诉你“到底是谁在限你”。
第 3 步,先做单关节台架,不要一上来就全身联调
最容易浪费时间的做法,就是拿一台整机去猜哪个关节是短板。更高效的顺序是:
- 把单关节固定在台架上,做空载、额定载、冲击载荷三组测试
- 记录位置误差、速度、电流、母线电压、驱动器温度、绕组温度
- 做短时峰值测试和长时稳态测试,分开看
- 观察同一动作在冷机和热机状态下的差异
如果单关节台架都解释不清,全身控制只会把问题藏得更深。
第 4 步,把供电问题单独拎出来测
很多 humanoid 样机不是“扭矩不够”,而是供电系统不允许它持续输出。ODrive 官方文档有两个特别实用的提醒:一是要明确设置直流母线欠压和过压保护,二是线缆长度和线径会直接影响你实际可用的电压裕量。对人形机器人来说,这意味着:
- 电池到驱动器的线束别只看能不能接上,要看动态压降
- 腿部冲击和双臂同步动作要单独看母线波形
- 再生能量处理不能靠侥幸,尤其是快速减速和落脚回弹时
- 日志里至少要能看到 DC bus 电压、电流和故障码
如果你现在还没有母线电压采样曲线,那你对自己硬件极限的理解大概率还停留在猜测阶段。
第 5 步,把热限制当成一等公民
不少项目的“成功演示”只持续几十秒,所以热问题经常被故意忽略。但只要你想做连续作业、重复测试或上线演示,热就是决定你能不能稳定交付的硬约束。
ODrive 和 moteus 的文档都在强调同一件事:控制器和电机温度都可能主动把输出电流往下压。也就是说,你看到的“后半程没劲了”,不一定是控制变差,而是系统已经在自我保护。
这一步建议你至少做三件事:
- 给驱动器和电机分别留温度观测,不要只看壳体温度
- 把测试分成峰值工况和连续工况,别混着看
- 记录达到某个温度后性能掉了多少,而不是只记最高温
如果热降额一触发,你的步态、抓取或姿态控制马上变形,那问题已经不是热设计本身,而是控制策略没有和热边界联动。
第 6 步,检查“结构回差”和“传感质量”是不是在放大控制误差
这里最容易被忽略。很多团队会花大量时间调 PID,最后才发现真正的问题是:
- 减速器回差太大,过零时控制器一直在追一个假目标
- 编码器装配偏心或零位不稳,导致重复定位越来越差
- 线束布置把小关节拖出了额外扰动
- 支架和壳体刚度不足,控制器在打一台“会弹”的机器
Berkeley Humanoid Lite 的公开资料值得参考,不是因为你要照着它抄,而是它把低层实机部署、仿真验证、运动捕捉和遥操作控制都放在同一套开源工作区里。这个做法的启发是:硬件问题要能在低层部署链和上层验证链里都被追踪到,否则你会一直在“仿真没事,实机抽风”里打转。
第 7 步,再决定该换什么,而不是凭直觉大改 BOM
当你拿到台架日志后,再做器件替换决策,通常会更理性:
- 如果短时够力、长时掉性能,先查散热和热降额,再谈换更大电机
- 如果一到高速区就没力,优先查供电电压、反电动势和转速区间
- 如果静态能撑住、动态一冲就乱,优先查结构刚度、回差、总线压降和采样时序
- 如果只有多关节联动才出事,优先查整机供电拓扑、线束、质心和控制带宽分配
这一步的核心不是“升级更贵的零件”,而是搞清楚你到底需要更大余量,还是更干净的边界。
最容易翻车的地方
- 只看峰值扭矩,不看连续扭矩和热平衡
- 只看单关节静态支撑,不看双臂或单腿联动时的母线波动
- 把驱动器报码当成偶发异常,没有形成故障字典
- 忽略再生制动带来的过压问题
- 只在冷机状态调参,热机一来就整套控制失真
- 实机测试没有统一日志时钟,最后对不上“先掉压还是先失步”
怎么验证你真的找对了瓶颈
我建议你至少完成下面这 4 组验证:
- 冷机 / 热机对照:同一动作在两种状态下表现差异是否可解释。
- 单关节 / 多关节对照:问题是局部关节问题,还是系统级供电与耦合问题。
- 空载 / 额定载 / 冲击载荷对照:边界到底卡在持续能力还是瞬态能力。
- 日志复盘:每次失败都能定位到限流、限温、欠压、过压、边界保护或机械异常中的某一类。
如果你还做不到“失败一次,就能在日志里归类一次”,那这条硬件链路还没有真正可维护。
像 WPILib 对 brownout 的做法就很值得学。它不是只告诉你“电压低了”,而是把不同电压阶段会关哪些输出、怎么在日志里识别故障都写得很清楚。人形机器人虽然平台不同,但思路一样:要把掉压从玄学变成分级事件,这样你才能知道到底是供电设计不够,还是控制动作过激。
下一步怎么做
- 先给每个关键关节补齐最小观测集:位置、电流、母线电压、温度、故障码
- 把单关节台架测试脚本固定下来,形成每次改硬件都复跑的基线
- 给整机建立“高风险动作清单”,专门测双臂同步、单腿支撑、快速减速、落脚冲击这些工况
- 把热限制、供电限制和控制降级策略联动起来,不要等故障后再被动保护
延伸阅读与参考来源
- Berkeley Humanoid Lite GitHub,可参考其低层实机部署、仿真验证与遥操作控制的分层组织方式。
- ODrive Hardware Configuration,重点看 DC bus 欠压/过压保护、主动功率限制和温度调节。
- moteus Troubleshooting Limited Torque,很适合拿来搭自己的扭矩不足故障字典。
- WPILib Brownout and Understanding Current Draw,适合参考如何把掉压事件做成分级诊断和日志复盘流程。