From 60f7a08e91e83e8662483caad5c89373d615e21d Mon Sep 17 00:00:00 2001 From: eastzio <3156045992@qq.com> Date: Mon, 27 Jul 2026 12:39:27 +0800 Subject: [PATCH] =?UTF-8?q?[train]=20=E5=A2=9E=E5=BC=BASim2Real=E8=AE=AD?= =?UTF-8?q?=E7=BB=83=E9=9A=8F=E6=9C=BA=E5=8C=96=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_doc/version_history.md | 11 +++++++ 05_software/README.md | 2 +- 05_software/train/README.md | 4 ++- 05_software/train/rc_mjlab/README.md | 2 +- .../rc_mjlab/src/robot/config/env_cfgs.py | 32 +++++++++++++++---- README.md | 3 +- 6 files changed, 43 insertions(+), 11 deletions(-) diff --git a/01_doc/version_history.md b/01_doc/version_history.md index 2607850..c11560a 100644 --- a/01_doc/version_history.md +++ b/01_doc/version_history.md @@ -9,6 +9,7 @@ | `v0.3.0` | 第一代软件闭环 | 早期训练、MJCF、MuJoCo、Sim2Sim、IK 与 Python Sim2Real | | `v0.3.1` | 实机记录 | 补充第一代 Sim2Real 实机视频 | | `v0.4.0` | 新训练基线 | 第一份完整的新 MJCF、新 mjlab 框架和 Rough 策略工程 | +| `v0.5.0` | 随机化增强 | 扩大观测、延迟和动力学随机化,加入持续外力扰动 | ## `v0.4.0` 的模型变化 @@ -17,3 +18,13 @@ - mjlab 上游基准从 `00409797` 更新到 `40f8d93e`。 - 保留轮腿分组执行器随机化所需的本地补丁。 - 本阶段归档 `model_rough.pt`,不将生成日志、缓存和临时 XML 纳入版本库。 + +## `v0.5.0` 的训练变化 + +- MJCF、mjlab 基准和已有模型文件保持不变。 +- 投影重力噪声由 `±0.05` 扩大到 `±0.08`。 +- 腿与轮动作的最大随机延迟由 2 步增加到 4 步。 +- 地面摩擦随机范围由 `0.3–1.0` 扩大到 `0.15–1.25`。 +- 执行器刚度和阻尼缩放由 `0.9–1.1` 扩大到 `0.5–1.5`。 +- 增加膝部和轮部质量的 `0.7–1.3` 随机缩放。 +- 增加作用于机身的连续随机外力和力矩扰动。 diff --git a/05_software/README.md b/05_software/README.md index b0bc2b3..1367fbd 100644 --- a/05_software/README.md +++ b/05_software/README.md @@ -26,7 +26,7 @@ MJCF + mjlab task 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`。 详细说明见: diff --git a/05_software/train/README.md b/05_software/train/README.md index cc6c4d9..9343672 100644 --- a/05_software/train/README.md +++ b/05_software/train/README.md @@ -2,7 +2,7 @@ `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.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)。 diff --git a/05_software/train/rc_mjlab/README.md b/05_software/train/rc_mjlab/README.md index b690c7a..2fae555 100644 --- a/05_software/train/rc_mjlab/README.md +++ b/05_software/train/rc_mjlab/README.md @@ -2,7 +2,7 @@ 基于 [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` 查看。 --- diff --git a/05_software/train/rc_mjlab/src/robot/config/env_cfgs.py b/05_software/train/rc_mjlab/src/robot/config/env_cfgs.py index 7b720de..6bacc38 100644 --- a/05_software/train/rc_mjlab/src/robot/config/env_cfgs.py +++ b/05_software/train/rc_mjlab/src/robot/config/env_cfgs.py @@ -153,7 +153,7 @@ def _make_base_env_cfg() -> ManagerBasedRlEnvCfg: ), "projected_gravity": ObservationTermCfg( 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( 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"), scale={".*_hip_abduction_joint": 0.125, "^(?!.*_hip_abduction_joint).*": 0.25}, use_default_offset=True, 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( entity_name="robot", actuator_names=(".*_wheel_joint",), scale=5.0, offset=0.0, use_default_offset=False, 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( 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)}}, ), "body_friction": EventTermCfg( 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( 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( 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( func=envs_dr.body_mass, mode="startup", @@ -285,6 +285,24 @@ def _make_base_env_cfg() -> ManagerBasedRlEnvCfg: "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, + }, + ), } # ------------------ diff --git a/README.md b/README.md index d98e2e1..9a50dfb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ 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] 整理 IK 真机控制与第一代 Python Sim2Real - [x] 整理第一份新版 MJCF 与 mjlab 训练框架 +- [x] 整理第二版 Sim2Real 随机化训练配置 - [ ] 核对比赛机械与仿真模型参数 - [ ] 整理 URDF/MJCF 机器人描述 - [ ] 整理后续统一训练、ROS 2 和比赛版本