讲座|人形机器人多姿态站起控制HoST及宇树G1部署


目的:基于learnningbase 不需要依赖于预定义好的轨迹(No Predefined Motion),并且具有human size,High DoF,Posture Diversity
把剧烈运动进行了2阶段分解,但是第一阶段无法学到比较‘优雅’的policy
Framework Overview

Challenge1:violent and osillatory motion剧烈且抖动 motion

action bounds 和 scaler
- 动作边界约束(结合 PD 控制器公式 );

- 平滑正则化(L₂C₂损失函数 )。

- 动作边界 + PD:给 RL 的 “激进指令” 套上 “减速带”,让控制器的目标更温和,避免 “猛踩油门 / 刹车”;
- 平滑正则化:给 RL 的 “决策逻辑” 加上 “记忆”,让动作变化更连贯,避免 “朝三暮四”。
两者结合,就能让机器人(或智能体)的运动从 “抽风式乱动” 变成 “稳稳当当的可控运动”。
Challenge2:要是把motion speed限制的非常小,RLAgent探索非常难.所以需要“trade-off” 指 “权衡取舍”(两者间需平衡,优化一方往往以牺牲另一方为代价)。“探索新策略(exploration)” 和 “运动速度(motion speed)” 无法同时最优:
- 想多探索(让智能体试新动作)→ 动作可能很激进 → 运动容易失控(速度、姿态乱套);
- 想稳速度(动作平缓)→ 探索不足 → 学不到更优策略。

- 动作边界课程学习(Rescaler):逐步放宽动作幅度限制(如从 “动作幅度 ×1” 过渡到 “×0.25” ,让智能体先稳后大胆探索);
- 拉力辅助探索:训练初期施加外力(如图示 “200N→0N” ,类似 “辅助轮”,帮智能体保持姿态,逐步撤力自主探索)。
Challenge3:奖励设计繁琐(需协调多目标) + 策略优化难,由于站起这个动作是whole body且与地形接触

Task Reward Style Reward Regulariation Reward Post-task Reward
- 任务奖励(Wtask=2.5):定义起身核心目标(头部高度、基座朝向);
- 风格奖励(Wstytle=1):约束关节角度 / 姿态,规范起身动作;
- 正则奖励(Wregu=0.1):惩罚剧烈运动(加速度、力矩突变等),保障平稳;
- 任务后奖励(Wpost=1):起身成功后,约束基座运动 / 姿态,维持稳定。
- 奖励拆分:总奖励 = 任务、风格、正则、后任务奖励的加权和(w 为权重);
- 优化:通过多评价器损失和策略损失,平衡多目标,降低奖励设计成本。

奖励函数
面详细介绍每个奖励函数的设计目的、计算方法和示例说明:
1. 方向奖励 (_reward_orientation)
目的:保持身体垂直方向
计算:
非高斯模式:计算重力投影向量与理想方向[0,0,1]的均方误差,通过指数函数转换误差,同时要求基座高度>0.4m,奖励 = exp(误差/σ) * (高度>0.4)
高斯模式:当重力投影的负Z分量超过阈值时给予奖励
奖励 = tolerance(-重力投影Z, [阈值, ∞], 1.0, 0.05)
示例:机器人直立时重力投影接近[0,0,1],奖励≈1.0;倾斜45°时奖励≈0.2
2. 头部高度奖励 (_reward_head_height)
目的:维持头部在目标高度
计算:
非高斯模式:直接返回头部高度值(截断到[0,1])
高斯模式:计算头部相对于脚部的高度,使用tolerance函数
示例:目标高度1.2m时,头部在1.1-1.3m区间内奖励≈1.0
3. 关节加速度惩罚 (_reward_dof_acc)
目的:减少关节抖动
计算:惩罚 = Σ((当前速度 - 上一帧速度)/Δt)²
示例:膝关节1秒内速度变化10rad/s → 惩罚值=100
4. 动作变化率惩罚 (_reward_action_rate)
目的:鼓励动作平滑
计算:惩罚 = Σ(当前动作 - 上一帧动作)²
示例:机械臂指令从[0.5]突变为[1.0] → 惩罚=0.25
5. 动作平滑度惩罚 (_reward_smoothness)
目的:二阶平滑约束
计算:惩罚 = Σ(当前动作 - 2×上一帧动作 + 上上帧动作)²
示例:连续三帧动作[0.3, 0.5, 0.9] → 惩罚=(0.9-1.0+0.3)²=0.04
6. 关节扭矩惩罚 (_reward_torques)
目的:降低能耗
计算:惩罚 = Σ(关节扭矩)²
示例:四关节扭矩[2,3,1,2]Nm → 惩罚=4+9+1+4=18
7. 关节功率惩罚 (_reward_joint_power)
目的:减少能量消耗
计算:惩罚 = Σ|速度×扭矩|
示例:关节速度2rad/s,扭矩3Nm → 功率惩罚=6
8. 关节速度惩罚 (_reward_dof_vel)
目的:防止高速运动
计算:惩罚 = Σ(关节速度)²
示例:髋关节速度[1.5, -2.0]rad/s → 惩罚=2.25+4=6.25
9. 关节跟踪误差惩罚 (_reward_joint_tracking_error)
目的:精确跟踪目标角度
计算:惩罚 = Σ(目标角度 - 实际角度)²
示例:膝关节目标1.0rad,实际1.2rad → 惩罚=0.04
10. 关节限位惩罚 (_reward_dof_pos_limits)
目的:防止超出机械限位
计算:惩罚 = Σ(低于下限值 + 超过上限值)
示例:关节下限0rad,当前-0.1rad → 惩罚=0.1
11. 关节速度限位惩罚 (_reward_dof_vel_limits)
目的:防止速度超限
计算:惩罚 = Σmax(|速度| - 软限位, 0)
示例:速度限位5rad/s,当前6rad/s → 惩罚=1
12. 扭矩限位惩罚 (_reward_torque_limits)
目的:防止扭矩超限
计算:惩罚 = Σmax(|扭矩| - 软限位, 0)
示例:扭矩限位20Nm,当前25Nm → 惩罚=5
13. 腰部偏移惩罚 (_reward_waist_deviation)
目的:保持腰部中立
计算:惩罚 = 1 if |腰部角度|>1.4rad else 0
示例:腰部左倾50°(>1.4rad) → 惩罚=1
14. 髋关节偏航惩罚 (_reward_hip_yaw_deviation)
目的:防止髋关节过度外展
计算:惩罚 = 1 if 最大|角度|>1.4rad 或 最小|角度|>0.9rad
示例:双髋关节角度[1.5,1.2]rad → 惩罚=1
15. 髋关节滚转惩罚 (_reward_hip_roll_deviation)
目的:保持髋关节稳定
计算:类似髋关节偏航惩罚
示例:髋关节过度内收时触发惩罚
16. 肩关节滚转惩罚 (_reward_shoulder_roll_deviation)
目的:保持手臂自然下垂
计算:惩罚 = 1 if 左肩< -0.02 或 右肩>0.02
示例:左肩-0.03rad → 惩罚=1
17. 左脚位移奖励 (_reward_left_foot_displacement)
目的:站立时脚部靠近身体中心
计算:奖励 = exp(脚-基座距离×σ) × (脚高<0.3m) × (站立标志)
示例:站立时左脚距中心0.2m → 奖励≈0.8
18. 右脚位移奖励 (_reward_right_foot_displacement)
目的:同左脚
计算:类似左脚
19. 膝关节偏移惩罚 (_reward_knee_deviation)
目的:防止膝盖过伸/过屈
计算:惩罚 = 1 if 最大|角度|>2.85rad 或 最小角度<-0.06rad
示例:膝关节170°(>163°) → 惩罚=1
20. 小腿方向奖励 (_reward_shank_orientation)
目的:保持小腿垂直
计算:奖励 = tolerance(小腿垂直分量, [0.8,∞], 1, 0.1)
示例:小腿与地面夹角<30°时奖励≈1.0
21. 脚底平行奖励 (_reward_ground_parallel)
目的:双脚平贴地面
计算:奖励 = 1 if 双脚踝高度方差<0.05
示例:双脚高度差<1cm → 奖励=1
22. 双脚间距惩罚 (_reward_feet_distance)
目的:防止分腿过大
计算:惩罚 = 1 if 脚间距>0.9m
示例:双脚相距1.0m → 惩罚=1
23. 身体角速度奖励 (_reward_style_ang_vel_xy)
目的:保持上半身稳定
计算:奖励 = exp(-2×Σ(身体XY角速度)²)
示例:身体旋转速度0.5rad/s → 奖励≈0.6
24. 站立角速度奖励 (_reward_ang_vel_xy)
目的:完全站立时保持稳定
计算:类似身体角速度奖励,仅在站立阶段激活
示例:站立时轻微晃动→奖励降低
25. 站立线速度奖励 (_reward_lin_vel_xy)
目的:站立时保持静止
计算:奖励 = exp(-5×Σ(身体XY线速度)²)
示例:站立时移动速度0.1m/s → 奖励≈0.95
26. 脚高差异奖励 (_reward_feet_height_var)
目的:站立时双脚均匀承重
计算:奖励 = exp(-2×|左脚高-右脚高|)
示例:双脚高度差3cm → 奖励≈0.94
27. 上半身姿势奖励 (_reward_target_upper_dof_pos)
目的:控制上半身达到目标姿态
计算:奖励 = exp(Σ(目标-实际角度)²×σ)
示例:手臂位置误差0.1rad → 奖励≈0.9
28. 站立方向奖励 (_reward_target_orientation)
目的:站立时保持身体直立
计算:奖励 = exp(-5×Σ(重力投影XY)²)
示例:身体倾斜5° → 奖励≈0.8
29. 基座高度奖励 (_reward_target_base_height)
目的:维持目标站立高度
计算:奖励 = exp(-20×|实际高度-目标高度|)
示例:目标高度1.0m,实际1.02m → 奖励≈0.67
关键函数说明:
tolerance函数:
python
def tolerance(x, bounds, margin, sig):
# x在[bounds[0], bounds[1]]区间内奖励1.0
# 在区间外呈高斯衰减
示例:tolerance(0.2, [0.3, 0.5], 0.1, 0.1) → ≈0.8
阶段控制:
target_base_height_phase1:爬行阶段高度阈值
phase3:完全站立阶段标志
post_task:站立后行为优化标志
这些奖励函数共同构成多目标优化系统,通过调整cfg中的权重系数,可平衡不同行为目标(稳定性、能效、生物相似性等)。实际应用中需配合课程学习策略,分阶段激活不同奖励项。
Challenge4:Sim-to-Real Transfer

评估指标维度:1)success rate 2)feet movement 3)smoothness 4)energy
Comparison methods 1)crtitics 2)exploration strategies 3)motion constraints 4)histrory length
真机轨迹观测 和 仿真轨迹观测 发现脚踝轨迹diff很大,最后用宇树官方脚踝的几个point进行仿真

Suggestion:be patient to dirty things,a tiny point might be the key

1. Domain Randomization(领域随机化)
- 定义:仿真中故意随机改变环境 / 模型参数(如摩擦、质量、光照),让策略适应真实世界的不确定性。
- 举例:
仿真训练机器人走路时,随机让地面摩擦系数在 0.3~0.8 之间变化。这样,机器人不会只 “学懂” 某一种地面(比如光滑瓷砖),真实世界里不管是塑胶跑道(摩擦高)还是冰面(摩擦低),都能走稳。
2. CoM Offset(质心偏移)
- 定义:机器人质心(Center of Mass,CoM) 的实际位置与仿真假设位置的偏差(因零件误差、装配偏差等导致)。
- 举例:
仿真里假设机器人质心在身体正中间,但真实机器人因电池安装偏左,质心实际左移 2cm。如果仿真没考虑这种偏移,训练出的 “起身策略” 会让机器人往左边倒(因为质心计算错误,平衡控制失效)。
3. Torque Noise(力矩噪声)
- 定义:仿真中给关节力矩添加随机干扰,模拟真实电机的力矩输出误差(比如电机老化、电压波动导致力矩不准)。
- 举例:
仿真里让关节力矩随机 ±5% 波动(比如指令力矩是 10N・m,实际输出 9.5~10.5N・m)。训练出的策略会 “预留冗余”,即使真实电机力矩不准,机器人仍能稳定控制动作(比如走路时步幅不会突然失控)。
4. Control Delay(控制延迟)
- 定义:仿真中模拟真实系统的信号延迟(如传感器数据传输、控制器计算的时间差)。
- 举例:
真实机器人的控制指令需要 50 毫秒 才能执行(传感器→控制器→电机的延迟)。仿真里加入这 50ms 延迟,训练出的策略会 “提前预判”(比如更早调整关节力矩),避免延迟导致的动作滞后(比如本该及时刹车,却因为延迟摔倒是非)。
结论:CoM offset is important(质心偏移很重要)
对比实验中,“w/o CoM Offset(没补偿质心偏移)” 的机器人更容易摔倒 / 动作变形(如图中右上角组,机器人起身时歪倒)。这说明:
仿真必须准确建模 质心偏移,否则训练出的策略迁移到真实机器人时,会因质心计算错误导致平衡失控,无法完成任务(如起身、走路)。

与站起来相关的四个关节,仿真与真实机器人的 关节运动轨迹一致(相位图趋势重合),但 真实关节输出力矩不足(硬件或环境限制导致力矩未达仿真预期),结果:真机Kp弥补仿真中力矩不足,
1)缺少实时环境的感知
2)需要more diverse postures 缺少类似趴下来站起的姿态
3)未融合到现在humanoid systems
其他文章:

Takeaways:
Reward engineering is importang,but not all
Be patient to sim-to-real analysis
Be kind to the robot 优雅动作
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)