1. 项目背景与核心问题
walk_these_ways项目是一个专注于四足机器人运动控制的开源研究项目,其核心目标是通过行为多样性(MoB)方法实现机器人在复杂地形上的泛化能力。在第七篇学习记录中,作者深入探讨了LeggedRobot环境的核心实现机制,特别是reward计算、torque生成、物理随机化和地形创建这四大支柱。
现代腿式机器人控制面临的核心挑战在于:如何在仿真环境中训练出能够适应真实世界复杂性和不确定性的控制策略。传统方法往往过于依赖精确的物理建模和固定环境,导致训练出的策略难以应对真实场景中的参数变化和意外扰动。walk_these_ways项目通过系统性的环境设计,构建了一个包含丰富随机性和多样性的训练框架。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 奖励系统的架构与实现
2.1 模块化奖励设计
项目采用了"配置驱动+容器分发"的奖励架构,而非传统的硬编码方式。在legged_robot.py中,奖励系统通过以下方式初始化:
python复制from go2_gym.envs.rewards.corl_rewards import CoRLRewards
reward_containers = {"CoRLRewards": CoRLRewards}
self.reward_container = reward_containers[self.cfg.rewards.reward_container_name](self)
这种设计的关键优势在于:
- 奖励项可以灵活配置,无需修改环境代码
- 不同奖励策略可以方便地切换和组合
- 奖励计算逻辑与主环境解耦,便于维护和扩展
2.2 奖励项的动态绑定
系统会根据配置文件自动绑定奖励函数:
python复制for key in list(self.reward_scales.keys()):
if self.reward_scales[key] != 0:
self.reward_names.append(key)
self.reward_functions.append(getattr(self.reward_container, '_reward_' + key))
这种动态绑定机制使得:
- 只需在配置中设置非零的scale值,即可激活对应奖励项
- 新增奖励项只需在corl_rewards.py中添加对应方法,无需修改绑定逻辑
- 不同实验可以快速调整奖励组合,方便消融研究
2.3 奖励计算流程
每一步的奖励计算遵循清晰的流程:
- 清空奖励缓冲区
- 遍历所有激活的奖励函数,计算原始奖励值
- 应用对应的scale系数
- 累加到总奖励中
- 根据配置进行后处理(如只保留正奖励)
python复制for i in range(len(self.reward_functions)):
name = self.reward_names[i]
rew = self.reward_functions[i]() * self.reward_scales[name]
self.rew_buf += rew
self.episode_sums[name] += rew
2.4 典型奖励项分析
corl_rewards.py中定义了丰富的奖励项,主要分为几类:
-
运动性能奖励:
- 线速度跟踪:
_reward_tracking_lin_vel - 角速度跟踪:
_reward_tracking_ang_vel
- 线速度跟踪:
-
稳定性惩罚:
- 机身垂直速度:
_reward_lin_vel_z - 机身倾斜度:
_reward_orientation
- 机身垂直速度:
-
能量效率惩罚:
- 力矩大小:
_reward_torques - 动作变化率:
_reward_action_rate
- 力矩大小:
-
步态相关奖励:
- 接触力塑形:
_reward_contacts_shaped_force - 足端速度塑形:
_reward_contacts_shaped_vel - Raibert启发式落脚点:
_reward_raibert_heuristic
- 接触力塑形:
这些奖励项共同作用,不仅鼓励机器人完成基本运动任务,还塑造了符合物理直觉和能量效率的运动风格。
3. 力矩生成与控制链
3.1 动作到力矩的转换流程
控制链的核心函数是_compute_torques(),其处理流程如下:
-
动作缩放:将策略输出的归一化动作映射到实际关节空间
python复制actions_scaled = actions[:, :12] * self.cfg.control.action_scale actions_scaled[:, [0, 3, 6, 9]] *= self.cfg.control.hip_scale_reduction -
控制延迟模拟:
python复制if self.cfg.domain_rand.randomize_lag_timesteps: self.lag_buffer = self.lag_buffer[1:] + [actions_scaled.clone()] self.joint_pos_target = self.lag_buffer[0] + self.default_dof_pos -
执行器模型应用:
- 理想PD模式
- actuator_net模式
3.2 actuator_net的作用与实现
actuator_net是一个关键的仿真到现实转换组件:
-
输入特征:
- 当前关节位置误差
- 前两帧位置误差
- 当前关节速度
- 前两帧速度
-
网络结构:
python复制xs = torch.cat((joint_pos.unsqueeze(-1), joint_pos_last.unsqueeze(-1), joint_pos_last_last.unsqueeze(-1), joint_vel.unsqueeze(-1), joint_vel_last.unsqueeze(-1), joint_vel_last_last.unsqueeze(-1)), dim=-1) -
物理意义:
- 建模电机动态响应特性
- 模拟真实执行器的非线性和延迟
- 提供更真实的力矩输出
3.3 控制延迟的重要性
控制延迟模拟是提高策略鲁棒性的关键设计:
- 真实机器人从命令发出到执行存在不可避免的延迟
- 仿真中建模这一延迟可以防止策略依赖瞬时响应
- 随机化的延迟时间进一步增强了泛化能力
4. 物理随机化机制
4.1 随机化类型与实现
系统实现了全面的物理参数随机化:
-
刚体属性随机化:
- 质量与质心位置
- 摩擦系数
- 恢复系数
-
执行器属性随机化:
- 电机强度
- 电机偏移
- PD增益系数
-
环境条件随机化:
- 重力大小和方向
- 外部扰动力
4.2 随机化时机策略
随机化并非一次性应用,而是分层级实施:
- 环境创建时初始随机化
- Episode重置时重新随机化
- 训练过程中周期性刷新
python复制env_ids = (self.episode_length_buf % int(self.cfg.domain_rand.rand_interval) == 0).nonzero(...).flatten()
self._call_train_eval(self._randomize_dof_props, env_ids)
这种多时间尺度的随机化策略确保了策略能适应各种动态变化。
5. 地形生成与环境创建
5.1 地形系统架构
地形生成的核心流程:
-
创建基础高度场
python复制self.height_field_raw = np.zeros((self.tot_rows, self.tot_cols), dtype=np.int16) -
根据配置选择生成模式:
- 课程式递增难度
- 指定类型地形
- 完全随机地形
-
应用具体地形生成算法:
python复制
terrain_utils.pyramid_sloped_terrain(...) terrain_utils.discrete_obstacles_terrain(...)
5.2 环境实例化过程
_create_envs()函数完成以下工作:
-
加载机器人资产模板
python复制self.robot_asset = self.gym.load_asset(self.sim, asset_root, asset_file, asset_options) -
获取刚体和关节信息
python复制body_names = self.gym.get_asset_rigid_body_names(self.robot_asset) self.dof_names = self.gym.get_asset_dof_names(self.robot_asset) -
计算环境初始位置
python复制self._call_train_eval(self._get_env_origins, torch.arange(self.num_envs, device=self.device)) -
为每个环境创建机器人实例
python复制anymal_handle = self.gym.create_actor(env_handle, self.robot_asset, start_pose, "anymal", i, ...)
5.3 地形课程设计
地形难度可以按课程逐步提升:
- 初始阶段:平坦地形
- 中级阶段:规则障碍(楼梯、斜坡)
- 高级阶段:随机复杂地形(离散障碍、梅花桩)
这种渐进式训练显著提高了策略的最终性能。
6. 系统整合与训练效果
6.1 四大组件的协同作用
- 地形系统:提供多样化的训练场景
- 随机化机制:增强策略的鲁棒性
- 控制链:确保动作的物理合理性
- 奖励系统:引导期望的行为风格
6.2 实际训练中的观察
- 奖励塑形对最终行为有决定性影响
- 适度的随机化显著提升sim-to-real效果
- actuator_net减少了仿真与现实间的差距
- 地形课程加速了学习过程
6.3 调参经验分享
- 奖励权重需要平衡各项指标
- 随机化强度应逐步增加
- 地形难度需匹配当前策略能力
- 控制延迟时间影响策略稳定性
7. 扩展思考与未来方向
7.1 现有系统的局限性
- 计算资源需求较高
- 部分物理效应仍难以精确模拟
- 复杂地形下的长期稳定性有待提升
7.2 可能的改进方向
- 更高效的地形表示方法
- 分层强化学习架构
- 在线适应机制
- 多模态感知融合
这个环境的设计理念和实现细节为腿式机器人的仿真训练提供了宝贵参考,其模块化架构和系统性随机化方法尤其值得借鉴。通过深入理解这些核心机制,研究者可以更有效地利用该平台开展相关研究,也能将这些设计思想应用到其他机器人学习任务中。
