本仓库为 Atom01 双足机器人提供两个 MuJoCo 仿真场景文件:atom01.xml 面向标准平地基准测试,atom01_terrain.xml 面向复杂地形鲁棒性验证。两者在机器人本体模型、执行器配置、传感器系统与控制接口上保持完全一致,仅在地面几何与初始投放高度上存在差异,形成"同构模型、异构场景"的清晰架构。这种设计使得研究者可以在不修改上层控制代码的前提下,通过切换 XML 文件快速对比算法在结构化与非结构化地面上的行为差异。
graph LR
A[共享机器人模型<br/>actuator / sensor / body] --> B[平地场景 atom01.xml]
A --> C[地形场景 atom01_terrain.xml]
B --> B1[地面: plane geom<br/>无限水平面 @ z≈0]
B --> B2[base_link 初始高度: 0.75m]
B --> B3[资产: hfield hf0<br/>200×200 程序化生成]
C --> C1[地面: hfield geom<br/>terrain_hfield.png 位图]
C --> C2[base_link 初始高度: 2.75m]
C --> C3[资产: hfield terrain_hfield<br/>20×20m, 3.4m 高程]
Sources: atom01.xml, atom01_terrain.xml
场景架构差异总览
两个 MJCF 文件仅有三处不同:asset 段中的高程场定义、worldbody 段中的地面几何类型、以及机器人根节点的初始高度。其余包括编译器参数、仿真选项、默认属性、连杆与关节树、23 个执行器电机与 63 个传感器在内,均逐字节保持一致。
| 对比维度 | 平地场景 atom01.xml |
地形场景 atom01_terrain.xml |
|---|---|---|
| 地面几何类型 | plane 无限平面 |
hfield 高程场 |
| 地面材质 | matplane 棋盘格纹理 |
matplane 棋盘格纹理 |
| 高程场资产 | hf0:程序化 200×200 网格 |
terrain_hfield:PNG 位图 |
| 高程场水平范围 | 20 m × 10 m(半尺寸 10×5) | 20 m × 20 m(半尺寸 10.0×10.0) |
| 高程场高度参数 | 最大 0.2 m,底部偏移 0.1 m | 最大 3.4 m,底部偏移 2.0 m |
| 地面碰撞配置 | condim="1" conaffinity="15" |
condim="1" conaffinity="15" |
| 机器人初始高度 | base_link @ z = 0.75 m |
base_link @ z = 2.75 m |
| 执行器与传感器 | 23 电机 + 63 传感器 | 完全相同 |
Sources: atom01.xml, atom01_terrain.xml
地面几何配置详解
平地场景:无限平面
平地场景采用 MuJoCo 的 plane 类型几何体作为地面。size="0 0 1" 中的前两个零表示平面在 X、Y 方向无限延伸,第三个值 1 定义了参与碰撞检测的边界厚度。pos="0.001 0 0" 在 X 轴上引入 1 mm 的微小偏移,这通常用于避免网格纹理与坐标轴完美对齐时可能出现的渲染伪影。condim="1" 表示接触法向仅沿单一维度计算,适合水平面接触;conaffinity="15" 则允许该地面与所有具有碰撞标志的机器人连杆发生交互。
Sources: atom01.xml
地形场景:位图高程场
地形场景将地面替换为 type="hfield" 的高程场几何体,并通过 hfield="terrain_hfield" 引用在 asset 段中预先加载的高度图资产。高程场表面由灰度 PNG 位图 terrain_assets/terrain_hfield.png 逐像素驱动,每个像素的亮度值经线性映射后决定对应位置的地形高度。与平面场景相同,地形地面也使用 condim="1" 和 conaffinity="15",这意味着接触模型仍简化为单法向,但接触点的空间位置会随着机器人行走而在三维曲面上持续变化。
Sources: atom01_terrain.xml
高程场(hfield)资产对比
两个文件均在 asset 段声明了 hfield,但用途截然不同:平地场景中的 hf0 是一份程序化生成的备用资产,并未被实际地面几何引用;地形场景中的 terrain_hfield 则是核心地面数据源。
| 属性 | hf0(平地备用) |
terrain_hfield(地形主数据) |
|---|---|---|
| 声明行 | <hfield name="hf0" nrow="200" ncol="200" size="10 5 0.2 .1"/> |
<hfield name="terrain_hfield" file="../terrain_assets/terrain_hfield.png" size="10.0 10.0 3.4 2.0"/> |
| 数据来源 | 程序化(无外部文件) | 外部 PNG 位图 |
| 网格分辨率 | 200 × 200(由 nrow/ncol 指定) |
由图像像素尺寸决定 |
| 水平半尺寸 | X=10 m, Y=5 m | X=10.0 m, Y=10.0 m |
| 最大高度 Zmax | 0.2 m | 3.4 m |
| 底部偏移 Zbase | 0.1 m | 2.0 m |
MuJoCo 中 hfield 的 size 参数遵循 "X Y Zmax Zbase" 的语义:X 与 Y 为水平方向的半尺寸(实际覆盖范围为 2X × 2Y);Zmax 为相对于基座平面的最大隆起高度;Zbase 为基座平面在几何中心下方的下沉深度。地形场景的 terrain_hfield 因此覆盖 20 m × 20 m 的广阔区域,并允许地表在竖直方向产生显著起伏,这对双足机器人的平衡控制提出了更高要求。
Sources: atom01.xml, atom01_terrain.xml
初始姿态适配原理
机器人在两个场景中的初始投放高度存在 2.0 m 的差异:平地场景下 base_link 位于 z = 0.75 m,地形场景下则被提升至 z = 2.75 m。这一调整并非随意设置,而是基于地面几何特性的必要适配。平地 plane 表面严格位于 z ≈ 0 m,机器人以 0.75 m 的初始高度投放即可直接处于站立姿态附近;而地形高程场由于 Zbase=2.0 与 Zmax=3.4,其表面在竖直方向上存在大幅变化,且基座下沉较深。将根节点抬升至 2.75 m 可以确保机器人初始时刻悬浮于地形最高点之上,避免在仿真第 0 步发生穿透碰撞,同时为机器人提供一个短暂的自由下落过程,使其通过物理接触自然贴合地形表面。
Sources: atom01.xml, atom01_terrain.xml
仿真行为差异分析
由于地面几何的根本变化,同一套控制策略在两个场景中会表现出截然不同的物理行为。理解这些差异有助于开发者在算法调试阶段正确归因问题来源。
| 维度 | 平地场景 | 地形场景 | 工程启示 |
|---|---|---|---|
| 接触法向 | 恒定为世界坐标系 +Z | 随地形局部曲面法向变化 | 地形场景下足底力方向需分解到世界坐标系 |
| 零力矩点约束 | 仅需考虑水平投影 | 需额外考虑地形坡度 | 平衡控制器需引入地形倾角补偿 |
| IMU 基座激励 | 理想水平,无额外噪声 | 基座倾斜引入重力分量耦合 | 状态估计需区分本体倾斜与地形倾斜 |
| 足端轨迹规划 | 固定离地高度即可 | 需实时感知或估计地形高度 | 建议集成足端力传感器或地形感知模块 |
| 接触点数量 | 稳定、规则 | 可能出现不规则多点接触 | 地形仿真对 timestep 和 solver 稳定性更敏感 |
| 关节负载分布 | 左右腿对称性高 | 随地形起伏呈现显著不对称 | 可用于验证力控分配算法的鲁棒性 |
Sources: atom01.xml, atom01_terrain.xml
场景选用建议
两个场景面向不同的开发与验证阶段,推荐按以下逻辑进行选择:
flowchart TD
Start[开始仿真实验] --> Q{实验目的?}
Q -->|基准测试 / 控制器初调 / 回归验证| A[加载 atom01.xml<br/>平地场景]
Q -->|鲁棒性验证 / 强化学习训练 / 非结构化地面泛化| B[加载 atom01_terrain.xml<br/>地形场景]
A --> C[统一控制接口<br/>上层代码无需修改]
B --> C
C --> End[读取传感器 / 发送电机指令]
- 算法开发初期:优先使用 平地场景
atom01.xml。排除地形不确定性干扰,集中验证逆运动学、轨迹跟踪、基础平衡等核心功能。 - 策略鲁棒性验证:切换至 地形场景
atom01_terrain.xml。利用高程场的非结构化特征,测试控制策略在斜坡、起伏地面上的泛化能力,尤其适用于强化学习训练中的域随机化(Domain Randomization)环节。 - 无缝迁移:由于 actuator 与 sensor 接口在两个文件中完全一致,切换场景时只需更改 MuJoCo 加载的 XML 路径,所有控制、观测、日志代码均可复用。
如需进一步了解模型中的执行器配置与传感器布局,请参考前文 执行器与控制接口 与 传感器系统与 IMU 配置。若需深入理解 plane 与 hfield 在接触动力学层面的底层差异,可继续阅读 URDF 到 MJCF 的映射与差异 以及 仿真稳定性优化指南。