[train] 增强Sim2Real训练随机化配置

This commit is contained in:
2026-07-27 12:39:27 +08:00
parent b08956aec7
commit 60f7a08e91
6 changed files with 43 additions and 11 deletions
+11
View File
@@ -9,6 +9,7 @@
| `v0.3.0` | 第一代软件闭环 | 早期训练、MJCF、MuJoCo、Sim2Sim、IK 与 Python Sim2Real | | `v0.3.0` | 第一代软件闭环 | 早期训练、MJCF、MuJoCo、Sim2Sim、IK 与 Python Sim2Real |
| `v0.3.1` | 实机记录 | 补充第一代 Sim2Real 实机视频 | | `v0.3.1` | 实机记录 | 补充第一代 Sim2Real 实机视频 |
| `v0.4.0` | 新训练基线 | 第一份完整的新 MJCF、新 mjlab 框架和 Rough 策略工程 | | `v0.4.0` | 新训练基线 | 第一份完整的新 MJCF、新 mjlab 框架和 Rough 策略工程 |
| `v0.5.0` | 随机化增强 | 扩大观测、延迟和动力学随机化,加入持续外力扰动 |
## `v0.4.0` 的模型变化 ## `v0.4.0` 的模型变化
@@ -17,3 +18,13 @@
- mjlab 上游基准从 `00409797` 更新到 `40f8d93e` - mjlab 上游基准从 `00409797` 更新到 `40f8d93e`
- 保留轮腿分组执行器随机化所需的本地补丁。 - 保留轮腿分组执行器随机化所需的本地补丁。
- 本阶段归档 `model_rough.pt`,不将生成日志、缓存和临时 XML 纳入版本库。 - 本阶段归档 `model_rough.pt`,不将生成日志、缓存和临时 XML 纳入版本库。
## `v0.5.0` 的训练变化
- MJCF、mjlab 基准和已有模型文件保持不变。
- 投影重力噪声由 `±0.05` 扩大到 `±0.08`
- 腿与轮动作的最大随机延迟由 2 步增加到 4 步。
- 地面摩擦随机范围由 `0.31.0` 扩大到 `0.151.25`
- 执行器刚度和阻尼缩放由 `0.91.1` 扩大到 `0.51.5`
- 增加膝部和轮部质量的 `0.71.3` 随机缩放。
- 增加作用于机身的连续随机外力和力矩扰动。
+1 -1
View File
@@ -26,7 +26,7 @@ MJCF + mjlab task
IK real --------------------------------> 电机 IK real --------------------------------> 电机
``` ```
`rc_mjlab` 是自包含工程。训练、MJCF、Sim2Sim 和策略权重通过相对路径绑定,因此保留其内部布局,没有为了目录外观拆散。第一代完整闭环见 `v0.3.0`,第一份新版 MJCF 与训练框架见 `v0.4.0` `rc_mjlab` 是自包含工程。训练、MJCF、Sim2Sim 和策略权重通过相对路径绑定,因此保留其内部布局,没有为了目录外观拆散。第一代完整闭环见 `v0.3.0`,第一份新版 MJCF 与训练框架见 `v0.4.0`,增强 Sim2Real 随机化的第二版训练配置见 `v0.5.0`
详细说明见: 详细说明见:
+3 -1
View File
@@ -2,7 +2,7 @@
`rc_mjlab/` 保存 16DOF 轮足机器人的当前训练与 Sim2Sim 工程。历史快照由 Git Tag 保留,不在目录中复制 `old``new``final` 版本。 `rc_mjlab/` 保存 16DOF 轮足机器人的当前训练与 Sim2Sim 工程。历史快照由 Git Tag 保留,不在目录中复制 `old``new``final` 版本。
当前内容对应 `v0.4.0`是第一份完整采用新版 MJCF 和新版 mjlab 框架的训练工程 当前内容对应 `v0.5.0``v0.4.0` 的完整新版训练工程上增强了面向 Sim2Real 的随机化配置
## 内容 ## 内容
@@ -15,4 +15,6 @@
`v0.3.0` 相比,本版本更新了 MJCF 质量和惯性参数,并将 mjlab 上游基准从 `00409797` 更新到 `40f8d93e`。机械 CAD 未发生变化。 `v0.3.0` 相比,本版本更新了 MJCF 质量和惯性参数,并将 mjlab 上游基准从 `00409797` 更新到 `40f8d93e`。机械 CAD 未发生变化。
`v0.4.0` 相比,本版本没有再次修改 MJCF 和训练框架,只调整训练环境配置:投影重力噪声从 `±0.05` 扩大到 `±0.08`,最大动作延迟从 2 步增加到 4 步,扩大摩擦、刚度和阻尼随机化,增加腿部质量随机化与连续外力/力矩扰动。
工程命令和任务说明见 [`rc_mjlab/README.md`](rc_mjlab/README.md),本地依赖来源见 [`rc_mjlab/DEPENDENCIES.md`](rc_mjlab/DEPENDENCIES.md)。 工程命令和任务说明见 [`rc_mjlab/README.md`](rc_mjlab/README.md),本地依赖来源见 [`rc_mjlab/DEPENDENCIES.md`](rc_mjlab/DEPENDENCIES.md)。
+1 -1
View File
@@ -2,7 +2,7 @@
基于 [mjlab](https://github.com/google-deepmind/mjlab) 框架的四轮腿混合机器人强化学习训练与部署部署项目,面向机器人竞赛场景(如越障、匍匐、斜坡、台阶等复合任务)。 基于 [mjlab](https://github.com/google-deepmind/mjlab) 框架的四轮腿混合机器人强化学习训练与部署部署项目,面向机器人竞赛场景(如越障、匍匐、斜坡、台阶等复合任务)。
> 本目录对应 `v0.4.0`:第一份完整的新 MJCF 与新框架训练工程。该快照包含 `model_rough.pt`;未包含独立 `mujoco_sim` 工具和单独的 Crawl 策略权重,相关早期内容仍可通过 `v0.3.0` 查看。 > 本目录对应 `v0.5.0`第一份完整的新 MJCF 与新框架训练工程上,扩大观测噪声、动作延迟和动力学随机化范围,并加入持续外力扰动。该快照包含 `model_rough.pt`;未包含独立 `mujoco_sim` 工具和单独的 Crawl 策略权重,相关早期内容仍可通过 `v0.3.0` 查看。
--- ---
@@ -153,7 +153,7 @@ def _make_base_env_cfg() -> ManagerBasedRlEnvCfg:
), ),
"projected_gravity": ObservationTermCfg( "projected_gravity": ObservationTermCfg(
func=velocity_mdp.projected_gravity, func=velocity_mdp.projected_gravity,
noise=Unoise(n_min=-0.05, n_max=0.05), noise=Unoise(n_min=-0.08, n_max=0.08),
), ),
"command": ObservationTermCfg( "command": ObservationTermCfg(
func=velocity_mdp.generated_commands, func=velocity_mdp.generated_commands,
@@ -212,13 +212,13 @@ def _make_base_env_cfg() -> ManagerBasedRlEnvCfg:
actuator_names=(".*_hip_abduction_joint", ".*_hip_pitch_joint", ".*_knee_joint"), actuator_names=(".*_hip_abduction_joint", ".*_hip_pitch_joint", ".*_knee_joint"),
scale={".*_hip_abduction_joint": 0.125, "^(?!.*_hip_abduction_joint).*": 0.25}, use_default_offset=True, scale={".*_hip_abduction_joint": 0.125, "^(?!.*_hip_abduction_joint).*": 0.25}, use_default_offset=True,
control_frequency=50.0, cut_off_frequency=5.0, control_frequency=50.0, cut_off_frequency=5.0,
min_delay=0, max_delay=2, min_delay=0, max_delay=4,
), ),
"wheel_joint_vel": JointVelocityDelayedLowPassActionCfg( "wheel_joint_vel": JointVelocityDelayedLowPassActionCfg(
entity_name="robot", actuator_names=(".*_wheel_joint",), entity_name="robot", actuator_names=(".*_wheel_joint",),
scale=5.0, offset=0.0, use_default_offset=False, scale=5.0, offset=0.0, use_default_offset=False,
control_frequency=50.0, cut_off_frequency=15.0, control_frequency=50.0, cut_off_frequency=15.0,
min_delay=0, max_delay=2, min_delay=0, max_delay=4,
), ),
} }
@@ -262,20 +262,20 @@ def _make_base_env_cfg() -> ManagerBasedRlEnvCfg:
), ),
"base_com": EventTermCfg( "base_com": EventTermCfg(
func=envs_dr.body_com_offset, mode="startup", func=envs_dr.body_com_offset, mode="startup",
params={"asset_cfg": SceneEntityCfg("robot", body_names=("base_link",)), params={"asset_cfg": SceneEntityCfg("robot", body_names=(".*",)),
"operation": "add", "ranges": {0: (-0.05, 0.05), 1: (-0.05, 0.05), 2: (-0.05, 0.05)}}, "operation": "add", "ranges": {0: (-0.05, 0.05), 1: (-0.05, 0.05), 2: (-0.05, 0.05)}},
), ),
"body_friction": EventTermCfg( "body_friction": EventTermCfg(
func=envs_dr.geom_friction, mode="startup", func=envs_dr.geom_friction, mode="startup",
params={"asset_cfg": SceneEntityCfg("robot", geom_names=(".*",)), "operation": "abs", "ranges": (0.3, 1.0)}, params={"asset_cfg": SceneEntityCfg("robot", geom_names=(".*",)), "operation": "abs", "ranges": (0.15, 1.25)},
), ),
"actuator_stiffness": EventTermCfg( "actuator_stiffness": EventTermCfg(
func=envs_dr.joint_stiffness, mode="startup", func=envs_dr.joint_stiffness, mode="startup",
params={"asset_cfg": SceneEntityCfg("robot"), "ranges": (0.9, 1.1), "operation": "scale", "distribution": "log_uniform"}, params={"asset_cfg": SceneEntityCfg("robot"), "ranges": (0.5, 1.5), "operation": "scale", "distribution": "log_uniform"},
), ),
"actuator_damping": EventTermCfg( "actuator_damping": EventTermCfg(
func=envs_dr.joint_damping, mode="startup", func=envs_dr.joint_damping, mode="startup",
params={"asset_cfg": SceneEntityCfg("robot"), "ranges": (0.9, 1.1), "operation": "scale", "distribution": "log_uniform"}, params={"asset_cfg": SceneEntityCfg("robot"), "ranges": (0.5, 1.5), "operation": "scale", "distribution": "log_uniform"},
), ),
"body_mass_base": EventTermCfg( "body_mass_base": EventTermCfg(
func=envs_dr.body_mass, mode="startup", func=envs_dr.body_mass, mode="startup",
@@ -285,6 +285,24 @@ def _make_base_env_cfg() -> ManagerBasedRlEnvCfg:
"ranges": (-1.0, 3.0), "ranges": (-1.0, 3.0),
}, },
), ),
"body_mass_limbs": EventTermCfg(
func=envs_dr.body_mass, mode="startup",
params={
"asset_cfg": SceneEntityCfg("robot", body_names=(".*_knee_.*", ".*_wheel_.*")),
"operation": "scale",
"ranges": (0.7, 1.3),
},
),
"apply_continuous_disturbance": EventTermCfg(
func=apply_continuous_disturbance, mode="step",
params={
"asset_cfg": SceneEntityCfg("robot", body_names=("base_link",)),
"force_range": (-10.0, 10.0),
"torque_range": (-10.0, 10.0),
"resample_time_range": (5.0, 10.0),
"time_constant": 1.0,
},
),
} }
# ------------------ # ------------------
+2 -1
View File
@@ -2,7 +2,7 @@
RC_WheelLeg 是山东华宇工学院 16DOF 串联轮足机器人项目。 RC_WheelLeg 是山东华宇工学院 16DOF 串联轮足机器人项目。
当前 `16dof` 分支用于整理 16DOF 机械、强化学习训练、Sim2Sim、Sim2Real、ROS 2 部署和比赛版本。机械资料、第一代软件闭环和第一份新版 MJCF/训练框架已经完成整理。 当前 `16dof` 分支用于整理 16DOF 机械、强化学习训练、Sim2Sim、Sim2Real、ROS 2 部署和比赛版本。机械资料、第一代软件闭环和前两版新版训练配置已经完成整理。
## 平台概览 ## 平台概览
@@ -34,6 +34,7 @@ RC_WheelLeg/
- [x] 整理第一代 MuJoCo、Sim2Sim 和 MJCF - [x] 整理第一代 MuJoCo、Sim2Sim 和 MJCF
- [x] 整理 IK 真机控制与第一代 Python Sim2Real - [x] 整理 IK 真机控制与第一代 Python Sim2Real
- [x] 整理第一份新版 MJCF 与 mjlab 训练框架 - [x] 整理第一份新版 MJCF 与 mjlab 训练框架
- [x] 整理第二版 Sim2Real 随机化训练配置
- [ ] 核对比赛机械与仿真模型参数 - [ ] 核对比赛机械与仿真模型参数
- [ ] 整理 URDF/MJCF 机器人描述 - [ ] 整理 URDF/MJCF 机器人描述
- [ ] 整理后续统一训练、ROS 2 和比赛版本 - [ ] 整理后续统一训练、ROS 2 和比赛版本