isaacgym(legged_gym)学习 (二)—— 设置环境地形



前言

如何设置isaacgym中的环境地形,来实现特殊任务需要的训练!!!!


一、了解isaacgym中地形如何构成的

isaacgym中的地形尤其三legged_gym中的地形,其实是模块化的,包含一下几种:
1、凸台阶
isaacgym(legged_gym)学习 (二)—— 设置环境地形-LMLPHP
2、凹台阶
isaacgym(legged_gym)学习 (二)—— 设置环境地形-LMLPHP
3、不平的地形
isaacgym(legged_gym)学习 (二)—— 设置环境地形-LMLPHP
4、有间隙的地形
isaacgym(legged_gym)学习 (二)—— 设置环境地形-LMLPHP
5、规则的起伏不平
isaacgym(legged_gym)学习 (二)—— 设置环境地形-LMLPHP
这5种地形,通过随机、难度递增和选择三种模式进行组合,形成一个大的训练地形环境,效果如下:

isaacgym(legged_gym)学习 (二)—— 设置环境地形-LMLPHP
(这个地形就是以随机的方式,按照5行5列的排列组合的

二、自定义修改

1.代码

对于地形的定义是在:legged_gym/legged_gym/utils/terrain.py文件中
我们可以不用管这个。我们需要修改的代码是:legged_gym/legged_gym/envs/base/legged_robbot_config.py

class terrain:
    mesh_type = 'trimesh' # 地形网格类型:'trimesh'(三角形网格),可选值包括 'none', 'plane', 'heightfield', 'trimesh'
    horizontal_scale = 0.1 # 水平缩放比例,单位:米
    vertical_scale = 0.005 # 垂直缩放比例,单位:米
    border_size = 25 # 边界大小,单位:米
    curriculum = True # 是否应用课程学习方法
    static_friction = 1.0 # 静态摩擦系数
    dynamic_friction = 1.0 # 动态摩擦系数
    restitution = 0. # 弹性恢复系数
    # 仅粗糙地形相关:
    measure_heights = True # 是否测量高度
    measured_points_x = [-0.8, -0.7, -0.6, ...] # 在1mx1.6m矩形范围内测量的点的x坐标(不包括中心线)
    measured_points_y = [-0.5, -0.4, -0.3, ...] # 测量点的y坐标
    selected = False # 是否选择唯一的地形类型并传递所有参数
    terrain_kwargs = None # 为所选地形类型指定的参数字典
    max_init_terrain_level = 5 # 课程学习开始的最大初始地形等级
    terrain_length = 8. # 地形长度,单位:米
    terrain_width = 8. # 地形宽度,单位:米
    num_rows= 20 # 地形行数(等级)
    num_cols = 20 # 地形列数(类型)
    # 地形类型:[平滑斜坡,粗糙斜坡,上楼梯,下楼梯,离散]
    terrain_proportions = [0.0, 0.1, 0.1, 0.35, 0.25, 0.2]
    # trimesh(三角形网格)仅适用:
    slope_treshold = 0.75 # 斜坡阈值,高于此阈值的斜坡将被修正为垂直表面

而我们需要重点关注的和修改的是其中这三个参数:

num_rows= 20 # 地形行数(等级)
num_cols = 20 # 地形列数(类型)
# 地形类型:[平滑斜坡,粗糙斜坡,上楼梯,下楼梯,离散]
terrain_proportions = [0.0, 0.1, 0.1, 0.35, 0.25, 0.2]

分别表示单位地形横向和纵向的个数,terrain_proportions = [0.0, 0.1, 0.1, 0.35, 0.25, 0.2]表示每种地形所占的比例,如我需要全部是粗糙斜坡则设置成terrain_proportions = [0.0, 1.0, 0.0, 0.0, 0.0, 0.0] 以此类推!

2.查看script/play.py

上面的配置修改好了,有可能实际仿真环境和你设置的不一样,那就有可能是play.py中对其中的某些参数进行了重新配置;

def play(args):
    env_cfg, train_cfg = task_registry.get_cfgs(name=args.task)
    # override some parameters for testing
    env_cfg.env.num_envs = min(env_cfg.env.num_envs, 50)
    env_cfg.terrain.mesh_type = 'trimesh'    # "heightfield" # none, plane, heightfield or trimesh
    env_cfg.terrain.num_rows = 5
    env_cfg.terrain.num_cols = 5
    env_cfg.terrain.curriculum = False
    env_cfg.terrain.selected = False
    env_cfg.noise.add_noise = False
    env_cfg.domain_rand.randomize_friction = False
    env_cfg.domain_rand.push_robots = False
    
    #  其他代码
    ..........

如上面的代码所示;play.py中对地形的横向和纵向个数以及网格类型和组合方式进行了重新配置。这里可以按照你自己的需要进行设置!!!


总结

以上是记录在isaacgym中地形的设置,后续会持续更新!!!!

01-08 12:04