惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
月光博客
月光博客
博客园 - 司徒正美
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
量子位
Recent Announcements
Recent Announcements
V
V2EX
P
Proofpoint News Feed
小众软件
小众软件
云风的 BLOG
云风的 BLOG
腾讯CDC
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
B
Blog
博客园_首页
GbyAI
GbyAI
博客园 - Franky

博客园 - aiplus

QuickForm CLI 网页中的 python解释器 4K DIY行车记录仪 MuJoCo 免费开源的物理计算内核 https://sim.luwudynamics.ai/ 意识可以靠开会灌输;执行必须靠机制驱动 rig-puppy python 编辑方式 青少年AI编程机构:270°沉浸式数智空间实际价值 & 规避沦为普通大屏风险 270°全景大屏沉浸式数智学习空间 VS 常规智慧教室智能黑板 职场沟通复盘:高效做事,更要有效共情 ai新闻 阿里云平台攻防态势 quickclass生成论文初稿 quickclass课题生成文献检查 公司官网与产品推广方案(含 GEO 落地) rig-puppy mcp服务 相同的商业套路,为什么可以在各个行业搞戈壁徒步 quickclass 草稿 博文阅读密码验证 - 博客园 WorkBuddy+QuickClass联合使用 发展高阶思维,教育何为 键盘检测 RIG-puppy 图形化编程 机器狗应用 rig-puppy 机器狗 maven 下载安装 博文阅读密码验证 - 博客园 一句话生成专业 PPT 阿里云wan2.7-image-pro 试用 博文阅读密码验证 - 博客园 一次真实电商上新决策:用小浣熊完成蓝牙耳机爆款分析与汇报
再生制动二次惩罚损失
aiplus · 2026-09-05 · via 博客园 - aiplus

再生制动二次惩罚损失 $\mathcal{L}_{\text{neg-power}}$ 完整解析

场景背景:四足机器人(Mu(\mathcal{J})oCo仿真强化学习)。 $P_j$:第$j$个关节功率;负功率 = 再生制动,电机变成发电机,膝关节落地冲击时会产生很大负功率,会冲击驱动器、烧毁电容,硬件不安全。 $P_{\text{db}}$:安全死区阈值;$K$归一化系数;$\mathcal{(\mathcal{J})}$代表选中的关节集合(通常优先膝关节)。 $$ \mathcal{L}{\text{neg-power}}=\sum{j\in\mathcal{(\mathcal{J})}}\left(\frac{\max(-P_j-P_{\text{db}},\ 0)}{K}\right)^2 $$

一、公式逐部分拆解含义

  1. $-P_j$ $P_j<0$代表关节处于再生制动(发电状态);取负 $-P_j$,把负功率转成正数,表征制动发电功率的大小
  2. $-P_j-P_{\text{db}}$ $P_{\text{db}}$:安全死区。
  • 如果制动功率很小:$-P_j \le P_{\text{db}}$,代表在安全允许范围内,不需要惩罚;
  • 如果制动功率超出安全阈值:$-P_j > P_{\text{db}}$,代表制动过载,需要施加惩罚。
  1. $\max(\cdot,0)$ 【ReLU斜坡函数,关键】
\(\max(x,0)\) = x  (x>0)
\(\max(x,0)\) = 0  (x≤0)

作用:死区过滤。安全范围内的制动功率,直接输出0,不产生任何损失;只有超过安全阈值的那一部分才参与计算惩罚。

  1. 除以系数$K$:归一化缩放 把功率的数值缩放到合适量级,避免损失项数值爆炸,和其他loss(位置损失、速度损失)量级匹配,保证强化学习总loss各个项权重均衡。
  2. 外层平方 $(\cdot)^2$:二次惩罚(L2平方惩罚) 超出死区的部分做平方。越超过阈值,惩罚会急剧变大
  3. $\sum_{j\in\mathcal{(\mathcal{J})}}$ 关节求和 $\mathcal{(\mathcal{J})}$可以是全部关节,也可以只选膝关节。原文描述:重点施加膝关节,因为落地冲击膝关节再生制动最剧烈,硬件风险最高。

二、实际工程意义(为什么需要这个损失,必要性)

1.硬件层面的真实问题

四足机器人落地、腿部回弹,关节电机被外力反向拖动,电机变成发电机,产生再生电能

  • 小再生功率:电路板电容可以吸收,无害;
  • 大再生功率(落地冲击膝关节):大量电能倒灌,电容电压飙升,会击穿驱动器、烧毁电机驱动板,真实物理硬件损坏风险

强化学习仿真有sim(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})to(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})real(仿真迁移到实物)问题:仿真中不考虑硬件烧毁,算法会肆无忌惮使用巨大再生制动,仿真跑得很好,部署到真实硬件直接炸驱动板。 这个loss就是在仿真训练阶段就约束策略:不要产生过大再生制动,提升仿真到真实硬件迁移成功率。

2.为什么不能简单限制功率,要用损失函数?

  • 方案A:直接硬约束,超过功率就截断。会破坏优化梯度,强化学习很难收敛;
  • 方案B:增加惩罚损失项。属于软约束,给优化器梯度信号:越越界代价越高,引导策略主动避开危险工况,保留完整可微分梯度,适合强化学习。

3.为什么要有死区$P_{\text{db}}$,而不是只要负功率就惩罚?

少量再生制动是正常现象,完全禁止负功率会严重限制机器人运动能力,机器人没法缓冲落地、不能柔顺接触地面。

死区含义:小的再生制动允许存在;只有超过安全上限的大功率再生才罚。兼顾硬件安全 + 机器人运动柔顺性。

4.为什么是平方(二次惩罚)而不是绝对值(L1)

  • L1(绝对值惩罚):超出阈值,惩罚线性增长。大越界和小越界惩罚是线性关系。
  • L2二次平方:惩罚随越界程度平方放大。轻微超阈值惩罚小;一旦严重过载,惩罚会急剧飙升,强烈压制策略产生极端大功率再生制动。

    工程意图:轻微越界可以容忍;坚决杜绝大幅度再生制动过载

三、涉及的理论知识

1.机器人动力学

  • 关节功率定义 $P=\tau\cdot\dot{q}$:关节力矩 × 关节角速度; $(P<0)$:力矩和角速度反向 → 再生制动(发电模式);
  • 四足机器人落地冲击动力学,腿部柔顺、膝关节负载特性;
  • sim(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})to(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})real 仿真到现实的域迁移鸿沟。

2.优化 & 强化学习理论

  1. 带死区的损失函数(Dead(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})zone loss) $\(\max(x,0))$实现死区,在控制、强化学习约束优化很常见。死区损失:允许小范围内不受惩罚,超出之后才施加代价。
  2. 二次L2惩罚、软约束优化 硬约束 vs 软约束;强化学习很难处理等式/不等式硬约束,通常转化增加惩罚损失项。
  3. 多目标损失加权 总loss = 任务目标loss + 多个物理惩罚loss(功率、力矩、碰撞等),需要归一化,平衡各个项量级。

3.电机电力电子知识

  • 永磁同步电机再生制动原理;
  • 驱动器母线电容、泵升电压风险;反向发电对硬件的破坏机理。

4.Mu(\mathcal{J})oCo仿真背景

仿真器内部计算每个关节力矩$\tau$、关节角速度$\dot q$,可以实时算出$P_j$,每仿真一步,计算这个惩罚loss,回传给强化学习算法(PPO等)。

四、该惩罚函数核心特点总结

  1. 死区特性:安全范围内完全不惩罚,不干涉正常柔顺运动;
  2. 二次L2放大:越超过安全阈值,惩罚急剧增大,强力抑制极端过载;
  3. 可微分:全程可求导,适合强化学习反向传播;
  4. 可选择关节:可以只对高风险关节(膝关节)施加,其他关节不受限制;
  5. 归一化系数K,方便和其他损失平衡权重。

必要性小结

如果没有这个损失:强化学习策略为了完成任务,会利用仿真没有硬件损坏的漏洞,大量使用膝关节大功率再生制动。仿真内步态效果优秀,但部署实物机器人,落地冲击会频繁出现泵升高压,损坏驱动器。 这个损失在训练阶段就把硬件安全知识注入策略,缩小仿真与真实硬件之间差距,提升sim(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})to(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})real成功率。

五、如何系统学习这一块知识

路线1:先搞懂基础

  1. 机器人动力学:关节力矩、关节功率 $P=\tau \dot q$;理解什么时候出现负功率。 参考:《机器人学导论》Craig,重点关节动力学章节。
  2. 四足机器人电机再生制动现象,读四足机器人硬件相关论文,理解泵升电压问题。
  3. Mu(\mathcal{J})oCo仿真:读取关节力矩、关节角速度,自己写简单代码计算关节功率。

路线2:强化学习约束优化(重点)

  1. 理解软约束 vs 硬约束;死区损失、L1/L2损失特点。
  2. 四足强化学习经典论文:
    • MIT Cheetah系列;
    • Unitree 宇树相关sim(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})to(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})real论文;
    • 很多论文都会加入力矩、功率惩罚项,和这个公式是同类思想。

      搜索关键词:quadruped sim\(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power}\)to\(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power}\)real power penalty dead zone loss

路线3:动手实操(强烈建议)

  1. 在Mu(\mathcal{J})oCo/PyTorch写一个最小demo,复现这个损失函数:
import torch

def neg_power_loss(P_j, P_db, K):
    # P_j:关节功率张量
    exceed = torch.max(-P_j - P_db, torch.zeros_like(P_j))
    loss = torch.sum( torch.square(exceed / K) )
    return loss
  1. 测试几组输入,观察输出:
    • 制动功率小于阈值,loss输出0;
    • 轻微超过阈值,loss小;
    • 严重过载,loss平方级暴涨。
  2. 可以放到四足PPO训练框架中,观察打开/关闭这个惩罚,步态、关节功率统计的区别。

路线4:论文阅读关键词

regenerative braking penaltydead\(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power}\)zone losssoft constraint reinforcement learningsim\(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power}\)to\(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power}\)real safety loss

六、拓展:同类变体对比

  1. 如果去掉max,直接 $(-P_j-P_{db})^2$:没有死区,一点点负功率也会被惩罚,机器人无法做柔顺缓冲,动作僵硬。
  2. 如果把平方换成绝对值L1:惩罚线性增长,对极端过载压制力度不足。
  3. 可以增加权重系数 $\lambda$,总loss写成 $\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg(\mathcal L_{total}=L_{task}+\lambda\cdot \mathcal L_{neg‑power})power}$,调$\lambda$平衡任务性能和硬件安全。

这个属于机器人强化学习的工程性损失设计,