type
Post
status
Published
date
Jan 30, 2026
slug
summary
tags
anymal_c
robotics
navigation
仿真
category
技术
icon
password
文本
概述
本文档详细描述了基于 ANYmal-C 四足机器人的崎岖地形导航任务环境。该环境是从 Isaac Lab 的
isaac-navigation-flat-anymal-c-v0 任务迁移到 MotrixLab 框架,并将地形从平面改为复杂崎岖地形的完整实现。环境利用 MotrixLab 的高度场(Heightfield)地形系统,提供了使用强化学习训练四足机器人在复杂地形上执行目标位置和朝向导航的完整方案。动作空间 | Box(-1.0, 1.0, (12,), float32) |
观测空间 | Box(-inf, inf, (54,), float32) |
导入方式 | registry.make("anymal_c_navigation_rough", backend="np") |
代码文件:
环境描述
ANYmal-C 崎岖地形导航任务环境基于真实的 ANYmal-C 四足机器人构建,旨在训练机器人在高度变化的复杂地形上导航至指定的目标位置和朝向。相比平面地形版本,崎岖地形版本提供了更具挑战性和真实性的训练环境。
机器人结构
ANYmal-C 是一个四足机器人,由以下主要部分组成:
- 基座(Base):机器人的核心躯干,包含 IMU 传感器、摄像头、激光雷达等传感器模块
- 四条腿:每条腿包含三个关节
- HAA(Hip Abduction/Adduction):髋部外展/内收关节
- HFE(Hip Flexion/Extension):髋部屈伸关节
- KFE(Knee Flexion/Extension):膝关节屈伸
- 四个足端(Feet):球形接触几何体,与地面产生摩擦接触
崎岖地形系统
环境使用 MuJoCo Heightfield 系统生成复杂的三维地形:
地形参数:
- 尺寸:40m × 40m(X半径20m,Y半径20m)
- 高度范围:-1m 到 +1.5m(最大高度变化 2.5m)
- 高度图分辨率:257 × 257 像素(heightmap.png)
- 基准高度:Z = -1m(heightfield 的基准位置)
地形特征:
- 多层次高度区域:低地(-0.20.2m)、中地(0.40.7m)、高地(1.0~1.3m)
- 平滑坡度过渡:使用图像插值生成自然的地形起伏
- 边界保护:19m半径边界,超出自动终止
- 物理真实性:摩擦系数 0.6,与真实地形接近
任务目标
机器人需要完成以下导航目标:
- 位置导航:移动到指定的目标位置(XY平面坐标),即使目标在不同高度层
- 朝向控制:调整机器人朝向至目标航向角(yaw角)
- 稳定停止:到达目标后保持稳定站立,线速度和角速度接近零
- 地形适应:在崎岖地形上保持平衡,避免翻倒或失稳
环境提供可视化标记:
- 绿色箭头(目标标记):指示目标位置和朝向,动态调整 Z 高度以显示在地形表面上
- 机器人上方绿色箭头:当前实际运动方向
- 机器人上方蓝色箭头:期望运动方向
与平面地形版本的主要区别
特性 | 平面地形 ( anymal_c_navigation_flat) | 崎岖地形 ( anymal_c_navigation_rough) |
地形类型 | 平面(plane geom) | 高度场(heightfield) |
高度变化 | 无(Z固定) | 2.5m 高度变化 |
场景文件 | scene.xml | scene_rough.xml |
地形尺寸 | 无限平面 | 40m × 40m 有限区域 |
目标采样 | 简单随机采样 | 智能采样(考虑高度差和坡度) |
重置策略 | 随机位置 | 渐进式训练(初级随机/高级网格) |
奖励函数 | 基础速度跟踪 | 额外地形稳定性奖励 |
终止条件 | 基本物理失败 | 额外边界检查 |
训练难度 | 基础 | 进阶 |
Episode 时长 | 10秒(1000步) | 15秒(1500步) |
代码行数 | ~1300行 | ~1850行 |
动作空间
动作空间为
Box(-1.0, 1.0, (12,), float32),表示施加到 12 个关节的位置控制指令(相对于默认站立姿态的偏移量)。控制模式
环境使用 PD 位置控制模式,动作通过以下方式转换为关节目标位置:
其中:
- 动作缩放系数:
control_config.action_scale = 0.05(参考 go1 的成功配置)
- 比例增益:kp = 80 N·m/rad
- 微分增益:kd = 1 N·m·s/rad动作维度详细说明
编号 | 动作说明 | 控制范围 | 对应关节名称 | 关节类型 | 单位 |
0 | 左前腿髋部外展/内收 | -1.0 ~ 1.0 | LF_HAA | hinge | 位置偏移量 |
1 | 左前腿髋部屈伸 | -1.0 ~ 1.0 | LF_HFE | hinge | 位置偏移量 |
2 | 左前腿膝关节屈伸 | -1.0 ~ 1.0 | LF_KFE | hinge | 位置偏移量 |
3 | 右前腿髋部外展/内收 | -1.0 ~ 1.0 | RF_HAA | hinge | 位置偏移量 |
4 | 右前腿髋部屈伸 | -1.0 ~ 1.0 | RF_HFE | hinge | 位置偏移量 |
5 | 右前腿膝关节屈伸 | -1.0 ~ 1.0 | RF_KFE | hinge | 位置偏移量 |
6 | 左后腿髋部外展/内收 | -1.0 ~ 1.0 | LH_HAA | hinge | 位置偏移量 |
7 | 左后腿髋部屈伸 | -1.0 ~ 1.0 | LH_HFE | hinge | 位置偏移量 |
8 | 左后腿膝关节屈伸 | -1.0 ~ 1.0 | LH_KFE | hinge | 位置偏移量 |
9 | 右后腿髋部外展/内收 | -1.0 ~ 1.0 | RH_HAA | hinge | 位置偏移量 |
10 | 右后腿髋部屈伸 | -1.0 ~ 1.0 | RH_HFE | hinge | 位置偏移量 |
11 | 右后腿膝关节屈伸 | -1.0 ~ 1.0 | RH_KFE | hinge | 位置偏移量 |
PD控制参数
使用参考 go1 的成功配置:
- kp(比例增益):80 N·m/rad(相比 ANYmal-C 默认的 200,更柔和)
- kd(微分增益):1 N·m·s/rad
- 力矩限制:-140 N·m ~ 140 N·m
- 动作缩放:0.05(相比平面地形的 0.06,更保守)
设计考虑:
- 较低的 kp 值提供更柔和的控制,适应地形冲击
- 较小的动作缩放避免在崎岖地形上过激反应
- 保持与 go1 一致的参数以利用其在复杂地形上的成功经验
奖励函数
奖励函数采用复合设计 + 地形增强策略,继承平面地形版本的双阶段奖励机制,并添加针对崎岖地形的额外奖励项。
基础奖励(继承自平面地形)
未到达目标时的奖励
总奖励 = 速度跟踪奖励 + 接近奖励 - 惩罚项
主要奖励项:
- 线速度跟踪奖励(权重:1.5)
- 计算公式:
1.5 × exp(-||v_xy - v_cmd||² / 0.25) - 激励机器人跟踪期望的XY平面线速度
- 角速度跟踪奖励(权重:0.3)
- 计算公式:
0.3 × exp(-(ωz - ωz_cmd)² / 0.25) - 激励机器人跟踪期望的偏航角速度
- 接近奖励
- 计算公式:
clip((历史最小距离 - 当前距离) × 4.0, -1.0, 1.0) - 奖励机器人每次距离目标更近时的进步
惩罚项:
- Z轴线速度惩罚(权重:-2.0):
2.0 × vz²
- XY轴角速度惩罚(权重:-0.05):
0.05 × (ωx² + ωy²)
- 力矩惩罚(权重:-0.00001):
0.00001 × ||τ||²
- 动作变化率惩罚(权重:-0.001):
0.001 × ||Δa||²
到达目标后的奖励
总奖励 = 停止奖励 + 首次到达奖励 - 惩罚项
主要奖励项:
- 停止基础奖励
- 计算公式:
2 × [0.8 × exp(-(v_xy/0.2)²) + 1.2 × exp(-(ωz/0.1)⁴)] - 激励机器人在到达后保持低速度和角速度
- 零角速度奖励(额外奖励:6.0)
- 条件:到达目标且 |ωz| < 0.05 rad/s
- 激励机器人完全停止旋转
- 首次到达奖励(一次性:10.0)
- 条件:首次同时满足位置和朝向到达条件
- 提供到达目标的明确信号
崎岖地形增强奖励
在基础奖励之上,添加以下针对复杂地形的奖励项:
1. 地形稳定性奖励(权重:0.5)
设计理念:
- 使用高斯核函数替代阶跃函数,提供更平滑的梯度
- σ = 0.1 使得 vz 在 ±0.3 m/s 范围内获得显著奖励
- 鼓励机器人在地形起伏时保持稳定的垂直速度
- 防止在坡度变化时过度跳跃或下落
奖励曲线:
- vz = 0 m/s:奖励 = 0.5(完美稳定)
- vz = ±0.1 m/s:奖励 ≈ 0.45(轻微波动)
- vz = ±0.3 m/s:奖励 ≈ 0.20(明显波动)
- vz = ±0.5 m/s:奖励 ≈ 0.02(剧烈波动)
2. 姿态稳定性惩罚(权重:-0.15)
设计理念:
- 惩罚投影重力向量的 XY 分量(理想值为 [0, 0, -1])
- XY 分量越大说明机身倾斜越严重
- 在崎岖地形中保持机身水平比平面地形更重要
- 防止机器人在坡面上过度倾斜导致翻倒
惩罚示例:
- 机身水平(gx=0, gy=0):惩罚 = 0
- 倾斜 10°(gx≈0.17):惩罚 ≈ -0.004
- 倾斜 30°(gx≈0.50):惩罚 ≈ -0.038
- 倾斜 45°(gx≈0.71):惩罚 ≈ -0.076
3. 足部接触奖励(权重:0.2)
设计理念:
- 鼓励四足稳定着地,提高在不平地面上的稳定性
- 归一化到 [0, 0.2],四脚全部着地时达到最大值
- 在崎岖地形上,保持多点接触比平面地形更关键
- 防止单脚或双脚悬空导致的不稳定
奖励示例:
- 4 脚着地:奖励 = 0.2(最稳定)
- 3 脚着地:奖励 = 0.15(可接受)
- 2 脚着地:奖励 = 0.1(不稳定)
- 1 脚着地:奖励 = 0.05(危险)
奖励汇总
理论奖励范围:
- 最大额外奖励:≈ 0.7(完美地形适应)
- 最大额外惩罚:≈ -0.15(严重倾斜)
终止条件惩罚
以下情况会额外施加 -20.0 的惩罚(与平面地形版本相同):
- 关节速度超限(超过
max_dof_vel配置值)
- 关节速度出现 NaN 或 Inf
- 机器人基座接触地面
- 机器人侧翻(倾斜角度超过75°)
- 超出地形边界(距离原点超过 19m)
到达判定标准
- 位置到达:距离目标 < 0.3 米
- 朝向到达:朝向误差 < 15°
- 完全到达:同时满足位置到达和朝向到达
- 停止就绪:完全到达 且 |ωz| < 0.05 rad/s
info 返回内容
每步返回的 info 字典包含以下调试信息:
pose_commands:当前目标位置和朝向 [x, y, yaw]
last_actions:上一时刻的动作
current_actions:当前时刻的动作
steps:当前回合步数
ever_reached:是否曾经到达过目标
min_distance:历史最小距离(用于计算接近奖励)
初始状态
崎岖地形版本的初始化相比平面地形更加复杂,需要考虑地形高度和坡度。
机器人初始化
位置初始化(支持渐进式训练)
环境支持两种初始化策略,根据训练级别自动切换:
初级阶段(training_level = 0):
- 在配置范围内随机采样 XY 坐标
- 动态查询该位置的地形高度
- 计算正确的 Z 坐标:
Z = 地形高度 + 机器人站立高度(0.56m) + 安全余量(0.2m)
- 检查生成位置的坡度,超过阈值则重新采样
- 适合训练早期,提供多样化的地形体验
高级阶段(training_level ≥ 1):
- 使用预计算的 5×5 网格位置(共25个位置)
- 每个网格位置已经过地形高度查询和安全性验证
- 循环放置机器人,确保均匀覆盖不同地形区域
- 参考 go1 的成功经验,避免重复查询提升性能
渐进式训练优势:
- 初级阶段:随机探索,学习基本地形适应能力
- 高级阶段:系统化训练,覆盖所有地形类型
- 自动切换:根据训练进度调整策略
位置采样约束
采样流程:
- 随机采样 XY 坐标
- 查询地形高度 → 计算 Z 坐标
- 计算该位置坡度
- 如果坡度 > max_spawn_slope,重新采样(最多20次)
- 设置机器人位置为 [X, Y, Z]
姿态初始化
- 机器人朝向(四元数):初始化为单位四元数 [1, 0, 0, 0](Motrix格式),表示正向朝向
- 姿态扰动:无随机噪声添加到四元数(保证初始稳定性,避免在坡面上翻倒)
关节初始化
关节角度设置为默认站立姿态,由配置参数
init_state.default_joint_angles 定义。无随机噪声添加到关节角度(保证在崎岖地形上初始稳定站立)。速度初始化
所有线速度和角速度初始化为零,确保机器人从静止状态开始。
目标生成(智能采样)
崎岖地形版本使用智能目标采样算法,确保生成的目标位置可达且合理。
采样约束条件
智能采样算法
设计优势:
1. 可达性保证:高度差限制确保机器人能够到达
2. 安全性保证:坡度限制确保目标点适合停稳
3. 鲁棒性保证:失败时使用最佳候选或安全回退
4. 训练效率:避免生成不合理的目标浪费训练时间
目标朝向
目标朝向(yaw角)在绝对参考系中随机生成(与平面地形相同):
- 朝向角度:[pose_command_range[2], pose_command_range[5]] = [-π, π]
可视化标记初始化
- 目标标记(绿色箭头):设置为目标位置和朝向,Z 坐标根据地形高度动态调整
- 计算方式:
Z = 地形高度(target_x, target_y) + 0.1m - 确保标记始终显示在地形表面上方
- 运动方向箭头:初始化在机器人上方 0.76 米高度处
回合终止
崎岖地形版本继承了平面地形的所有终止条件,并添加了边界检查。
终止条件(Termination)
环境在以下任一条件满足时终止回合:
1. 超时终止
- 条件:回合步数达到
max_episode_steps = 1500(15秒)
- 说明:崎岖地形比平面地形延长了50%,考虑到导航难度增加
2. 关节速度异常
- 条件:任一关节速度的绝对值超过
max_dof_vel = 100.0 rad/s
- 条件:关节速度出现 NaN、Inf 或超过 1e6
- 说明:防止数值发散和物理不稳定
3. 基座接触地面
- 条件:机器人基座(配置参数
terminate_after_contacts_on定义的几何体)与地形接触
- 说明:机器人跌倒或姿态失败
4. 侧翻倾覆
- 条件:机器人倾斜角度超过 75°
- 计算:通过投影重力向量计算倾斜角
arctan2(||g_xy||, |g_z|)
- 说明:机器人严重侧翻
5. 超出地形边界(新增)
- 条件:机器人距离原点的距离超过
border_size = 19m
- 计算:
sqrt(x² + y²) > 19
- 说明:地形尺寸为 40m×40m(半径20m),19m边界提供安全余量
- 行为:超出边界前会自动将目标设为原点,引导机器人返回
成功条件
虽然环境不会因成功而终止,但任务成功的定义为:
- 机器人到达目标位置和朝向(同时满足位置阈值 < 0.3m 和朝向阈值 < 15°)
- 机器人保持稳定停止(线速度 < 0.05 m/s,角速度 < 0.05 rad/s)
- 在地形表面上稳定站立(四足接触地面,机身保持水平)
截断(Truncation)
默认回合最大长度由配置参数
max_episode_steps = 1500 指定(15秒)。地形系统详解
崎岖地形系统是本环境的核心创新,基于 MuJoCo Heightfield 实现。
Heightfield 参数
XML 定义 (
scene_rough.xml):参数解释:
- size=“20 20 2.5 0.1”:
- 前两个参数(20, 20):X和Y方向的半尺寸(米),总尺寸 40m × 40m
- 第三个参数(2.5):高度缩放系数,图像值 0-1 映射到 0-2.5m
- 第四个参数(0.1):基础厚度(米),用于碰撞检测
- pos=“0 0 -1”:heightfield 的基准位置,Z = -1m
- friction=“0.6”:摩擦系数,与真实土地接近
高度计算公式:
高度图(Heightmap)
文件:
xmls/assets/heightmap.png规格:
- 分辨率:257 × 257 像素
- 格式:灰度 PNG(8位)
- 大小:683 KB
- 生成方式:使用 MotrixLab 提供的地形生成工具
高度分布:
- 低地形区(深色):像素值 ≈ 50-100,世界高度 ≈ -0.2 到 0.2m
- 中地形区(中灰):像素值 ≈ 140-180,世界高度 ≈ 0.4 到 0.7m
- 高地形区(浅色):像素值 ≈ 200-240,世界高度 ≈ 1.0 到 1.3m
地形特征:
- 平滑过渡的坡度(无陡峭悬崖)
- 多样化的高度层次(3个主要层级)
- 适合四足机器人导航的难度设计
地形高度查询
环境实现了高效的地形高度查询方法:
关键实现细节:
- Y轴翻转:MuJoCo heightfield 的 row=0 对应世界 Y=+size_y,需要翻转映射
- 边界裁剪:确保像素坐标在有效范围内
- 向量化:支持批量查询,提升性能
地形坡度计算
环境提供了坡度计算功能,用于目标采样和安全检查:
应用场景:
- 目标位置采样:确保目标点坡度适合停稳
- 机器人生成位置验证:避免在陡坡上初始化
- 渐进式训练:选择不同难度的地形区域
预计算网格系统
为了提升性能和训练稳定性,环境使用预计算的 5×5 网格系统(参考 go1 的成功经验):
网格分布:
使用方式(高级训练阶段):
渐进式训练系统
崎岖地形环境支持渐进式训练(Curriculum Learning),根据训练进度自动调整难度。
训练级别
级别定义:
- 级别 0(初级):随机位置放置,动态查询地形高度
- 级别 1+(高级):网格循环放置,覆盖所有地形类型
级别切换策略
训练级别可以手动设置或根据性能指标自动提升:
初级阶段(Level 0)
特点:
- 在随机位置生成机器人
- 动态查询地形高度
- 检查生成位置坡度
- 提供多样化的地形体验
适用场景:
- 训练早期,机器人学习基本的地形适应能力
- 探索不同地形类型的导航策略
- 建立鲁棒的平衡和步态控制
实现:
高级阶段(Level 1+)
特点:
- 使用预计算的 5×5 网格位置
- 循环放置,确保覆盖所有地形区域
- 无需动态查询,提升性能
- 系统化训练,避免遗漏难点
适用场景:
- 训练中后期,机器人已掌握基本能力
- 系统化提升在特定地形类型上的表现
- 准备部署前的全面测试
实现:
渐进式训练优势
- 平滑学习曲线:从简单到复杂,避免早期崩溃
- 训练效率:高级阶段使用预计算位置,避免重复查询
- 全面覆盖:网格系统确保所有地形类型都被训练
- 性能提升:参考 go1 的成功经验,显著提高训练稳定性
配置参数
ANYmal-C 崎岖地形导航环境通过配置类
AnymalCRoughEnvCfg 提供丰富的参数自定义选项。环境配置参数说明
继承自平面地形的参数
参数类别 | 参数名称 | 类型 | 默认值 | 说明 |
资产配置 | asset.body_name | str | “base” | 机器人基座body名称 |
ㅤ | asset.ground_name | str | “ground” | 地面几何体名称(heightfield) |
ㅤ | asset.foot_names | list | [LF/RF/LH/RH_FOOT] | 四个足部几何体名称 |
ㅤ | asset.terminate_after_contacts_on | list | [“base”] | 接触终止检测的几何体列表 |
传感器配置 | sensor.base_linvel | str | “base_linvel” | 基座线速度传感器名称 |
ㅤ | sensor.base_gyro | str | “base_gyro” | 陀螺仪传感器名称 |
控制配置 | control_config.stiffness | float | 80.0 | PD控制器比例增益(N·m/rad) |
ㅤ | control_config.damping | float | 1.0 | PD控制器微分增益(N·m·s/rad) |
ㅤ | control_config.action_scale | float | 0.05 | 动作缩放系数 |
命令配置 | commands.pose_command_range | list[6] | [-3, -3, -π, 3, 3, π] | 目标位置和朝向范围 |
初始状态配置 | init_state.pos | list[3] | [0, 0, 0.5] | 机器人初始位置基准值 |
ㅤ | init_state.pos_randomization_range | list[4] | [-10, -10, 10, 10] | 位置随机化范围 |
ㅤ | init_state.default_joint_angles | dict | {…} | 默认关节角度字典 |
归一化配置 | normalization.lin_vel | float | 2.0 | 线速度归一化系数 |
ㅤ | normalization.ang_vel | float | 0.25 | 角速度归一化系数 |
ㅤ | normalization.dof_pos | float | 1.0 | 关节位置归一化系数 |
ㅤ | normalization.dof_vel | float | 0.05 | 关节速度归一化系数 |
终止条件配置 | max_episode_steps | int | 1500 | 单回合最大步数(延长50%) |
ㅤ | max_dof_vel | float | 100.0 | 关节速度阈值 |
崎岖地形特有参数
参数类别 | 参数名称 | 类型 | 默认值 | 说明 |
模型文件 | model_file | str | “xmls/scene_rough.xml” | 崎岖地形场景文件路径 |
Episode配置 | max_episode_seconds | float | 15.0 | 单回合最大时长(延长50%) |
ㅤ | render_spacing | float | 0.0 | 渲染间距(崎岖地形不需要) |
地形配置 | terrain_config.height_list | tuple | (0.0, 0.5, 1.0) | 地形高度级别列表(米) |
ㅤ | terrain_config.grid_size | int | 5 | 网格大小(5×5) |
ㅤ | terrain_config.cell_size | float | 8.0 | 每个网格单元尺寸(米) |
ㅤ | terrain_config.border_size | float | 19.0 | 地形边界半径(米) |
目标采样配置 | commands.max_height_diff | float | 0.5 | 目标与机器人最大高度差(米) |
ㅤ | commands.max_target_slope | float | 0.2 | 目标点最大坡度(弧度,≈11°) |
ㅤ | commands.max_spawn_slope | float | 0.26 | 生成点最大坡度(弧度,≈15°) |
ㅤ | commands.max_resample_attempts | int | 20 | 目标采样最大尝试次数 |
迁移技术细节
从 Isaac Lab 到 MotrixLab 的主要差异
方面 | Isaac Lab | MotrixLab |
物理引擎 | Isaac Sim (PhysX) | MotrixSim (MuJoCo) |
地形系统 | USD mesh / Terrain generator | MuJoCo Heightfield |
坐标系 | Z-up, 右手系 | Z-up, 右手系(一致) |
四元数格式 | [w, x, y, z] | [x, y, z, w](Motrix格式) |
DOF结构 | 分离的 body 和 joint | 统一的 DOF 数组 |
传感器 | USD sensor API | MuJoCo sensor API |
地形查询 | Ray casting | Image sampling |
关键迁移决策
1. 地形表示方式:
- Isaac Lab:使用程序化地形生成器(Terrain Generator)
- MotrixLab:使用 MuJoCo Heightfield + 预生成的 heightmap.png
- 决策:使用 heightmap 可以精确控制地形形状,且性能更好
2. 地形高度查询:
- Isaac Lab:使用射线投射(ray casting)实时查询
- MotrixLab:从 heightmap 图像采样
- 决策:图像采样速度快数百倍,适合批量查询
3. 目标采样策略:
- Isaac Lab:简单随机采样,依赖射线投射验证可达性
- MotrixLab:智能采样算法,预先检查高度差和坡度
- 决策:预检查避免生成不合理目标,提升训练效率
4. 渐进式训练:
- Isaac Lab:未实现(使用固定难度)
- MotrixLab:参考 go1,实现初级/高级两阶段训练
- 决策:渐进式训练显著提高收敛速度和稳定性
5. PD控制参数:
- Isaac Lab:kp=200(ANYmal-C 默认)
- MotrixLab:kp=80(参考 go1)
- 决策:较低的 kp 提供更柔和的控制,适应地形冲击
相关资源
MotrixLab 资源
- MotrixSim 文档:[链接待补充]
- MotrixLab GitHub:[链接待补充]
- 训练示例脚本:
scripts/train.py
- 可视化脚本:
scripts/view.py
- 评估脚本:
scripts/eval.py
ANYmal-C 机器人
- ANYmal-C 官方网站:https://www.anybotics.com/
- MuJoCo Menagerie ANYmal-C:https://github.com/google-deepmind/mujoco_menagerie/tree/main/anymal_c
Isaac Lab 参考
- Isaac Lab 文档:https://isaac-sim.github.io/IsaacLab
- 原始任务:isaac-navigation-flat-anymal-c-v0
- Isaac Sim:https://developer.nvidia.com/isaac-sim
MuJoCo Heightfield
- MuJoCo 文档:https://mujoco.readthedocs.io/en/stable/XMLreference.html#asset-hfield
- Heightfield 教程:https://mujoco.readthedocs.io/en/stable/modeling.html#cheightfields
强化学习框架
- Gymnasium 文档:https://gymnasium.farama.org/
- SKRL 文档:https://skrl.readthedocs.io/
附录:文件结构
新增文件说明:
-
scene_rough.xml:崎岖地形场景,使用 heightfield
- materials.xml:地形材质定义(checker 纹理)
- heightmap.png:257×257 灰度高度图
- AnymalCRoughEnv 类:继承自 AnymalCEnv,新增 541 行代码附录:关键方法速查
方法名 | 行数 | 功能 | 是否重写 |
__init__ | 6 | 初始化,调用地形网格初始化 | ✅ |
_init_terrain_grid | 70 | 预计算地形网格和高度 | 🆕 |
_get_terrain_height | 40 | 查询地形高度(图像采样) | 🆕 |
_get_terrain_slope | 30 | 计算地形坡度 | 🆕 |
_border_check | 7 | 边界检查,越界引导返回 | 🆕 |
_update_target_marker | 38 | 更新目标标记(Z高度动态) | ✅ |
update_state | 4 | 状态更新,添加边界检查 | ✅ |
_compute_terminated | 9 | 终止条件,添加边界检测 | ✅ |
_compute_reward | 52 | 奖励计算,添加地形奖励 | ✅ |
reset | 170 | 重置环境,智能采样+渐进式训练 | ✅ |
图例:
- ✅ 重写(Override):继承自平面地形版本并修改
- 🆕 新增(New):崎岖地形版本特有的方法