Repository navigation
Conversation
wlgys8
left a comment
There was a problem hiding this comment.
静态代码审查:以下 4 项需要处理。未运行测试、训练或仿真。
| raise ImportError(f"Unable to load {SCRIPT}") | ||
| play_walk = importlib.util.module_from_spec(SPEC) | ||
| sys.modules[SPEC.name] = play_walk | ||
| SPEC.loader.exec_module(play_walk) |
There was a problem hiding this comment.
[P1] 补交评估脚本或同步移除对应测试
当前提交中已不存在 scripts/play_walk.py,但这里仍在模块顶层执行该文件。运行包含本测试的 pytest 时,会在 collection 阶段抛出 FileNotFoundError,导致测试收集失败,而不是仅跳过这几个测试。如果评估脚本已决定从本 PR 移除,请同步移除对应测试;否则需把脚本一并提交。
| "front_swing_width", | ||
| "front_stance_width", | ||
| } <= state.reward_terms.keys() | ||
|
|
There was a problem hiding this comment.
[P2] 移除对未配置前足 reward 的断言
当前 Go2 平地配置的 foot_lateral_terms 只有 rear_swing_width,运行时也只遍历已配置项生成 reward 键,因此这里要求的 front_swing_width 和 front_stance_width 不会出现,该测试会失败。建议通过显式构造 lateral reward 配置来测试通用计算和 phase mask,而不是绑定已经移除的任务 reward 组合。
There was a problem hiding this comment.
目前暂只使用rear_swing_width,已在测试文件中将front_swing_width 和 front_stance_width删除
|
|
||
| _, _, _, extras = wrapped.step(torch.zeros((_NUM_ENVS, _ACT_DIM))) | ||
|
|
||
| assert extras["log"]["Tracking/vx_mae"].item() == pytest.approx(0.2) |
There was a problem hiding this comment.
[P2] 将指标转发测试与实际 wrapper 行为保持一致
当前 RslrlNpEnvWrap.step() 只在 extras 中返回 time_outs,没有读取 state.metrics 或生成 log;本 PR 当前版本也没有对应 wrapper 修改。因此安装 RSLRL 后,此处会抛出 KeyError: 'log',Tracking 指标也不会经此 wrapper 进入日志。如果指标转发已决定不纳入本 PR,请同步移除本测试;否则需补上归约和转发实现,并保持张量 device 一致。
| def _reward_feet_slide(self, linvel, gyro, dof_pos) -> np.ndarray: | ||
| del linvel, gyro, dof_pos | ||
| support = self.feet_contact | ||
| speed = np.linalg.norm((self.feet_pos - self._previous_feet_pos) / self.cfg.ctrl_dt, axis=2) |
There was a problem hiding this comment.
[P2] 使用地面参考系速度计算 feet_slide
feet_pos 保存的是机身相对坐标(已有 swing-height 实现也明确说明这一点),它的差分不是足端相对地面的速度。机器人正常前进、支撑脚固定在地面时,脚在机身坐标系中仍向后移动,因此启用该项会惩罚正常无滑动支撑;脚与机身一起滑动时,相对坐标可能不变,实际滑动反而漏罚。建议使用世界坐标足端位置或速度计算接地足的地面切向速度,并覆盖“机身移动、脚的世界位置不变时不应罚滑动”的测试。当前默认零权重暂不影响默认训练,但启用此新增 reward 后会计算错误。
There was a problem hiding this comment.
在cfg.py里为四个足端加入世界系 framepos 传感器,更改walk_np.py中feet_slide仅惩罚接触足的世界 XY 位移速度,并同步配置了 anymalc.py的自定义传感器,防止环境初始化错误
Related to #118
摘要
将 Go2 平地行走任务从初始的通用 reward 配置,调整为面向步态稳定性、站立行为和足端横向摆动的可配置训练方案。
主要改动
1. 调整 Go2 平地任务的 reward 组合
最终 Go2 平地配置中显式调整或新增了以下 reward:
tracking_lin_vel=2.0flat_orientation=-2.5stand_still=-1.0rear_swing_width0.145 m。0.02 m,对于粗糙地形任务,显式关闭foot_lateral_terms,避免限制机器人在不平地形上进行必要的足端落点调整。对偏离目标的横向摆动宽度施加惩罚。同时,reward 系统新增了以下可配置项,在后续真机部署时可能会用到:
feet_slidedof_accaction_smoothness这些 reward 已加入通用
QuadrupedWalkTask,但当前 Go2 平地最终配置中仅启用了实际需要的项;未启用的项保持零权重,不会改变当前训练目标。2. 将足端横向约束做成通用配置
新增
FootLateralRewardCfg,支持:这样足端横向约束位于通用四足行走任务中,具体机器人只需要在配置中声明需要的足端和目标范围。
3. 速度指令采样
在原有随机平面速度和站立指令之外,新增:
single_axis_probabilityboundary_probability这使训练数据同时覆盖一般随机运动、单轴运动、站立状态和指令边界。
4. 评估脚本
新增
scripts/play_walk.py,用于在关闭观测噪声和随机指令后,对策略进行固定指令评估。评估指标主要包括:
vx、vy和yaw_rate跟踪误差;当前仿真结果
在平地固定指令短窗口评估中,最终策略相较初始策略表现为:
vx=0.5 m/s:实际平均速度由约0.251 m/s提升到约0.501 m/s;vx=1.0 m/s:实际平均速度由约0.415 m/s提升到约0.946 m/s;vy=0.5 m/s:实际平均速度由约0.132 m/s提升到约0.471 m/s;yaw_rate=0.5 rad/s:在当前测试窗口内保持可跟踪;尚未完成
vx=1.25 m/s和vx=1.5 m/s尚未通过当前跟踪门限;