本帖最后由 十日无冬 于 2024-9-4 16:10 编辑
什么是地形
在人型机器人行走的强化学习中,"地形"指的是机器人在其环境中行走时所接触的物理表面或环境条件。地形的复杂性和多样性对机器人行走的能力和稳定性提出了挑战。在青龙的训练中,使用了楼梯地形,波浪地形,斜坡地形,垫脚石地形等。
为什么需要地形
在强化学习中,地形的多样性是训练模型的重要因素。通过在不同地形上训练,机器人可以学习到更通用的行走策略,从而提高其在真实环境中的适应能力和鲁棒性。不同地形的设计和使用可以帮助研究人员测试和改进机器人在各种环境下的表现,从而开发出更智能和可靠的行走算法。
如何创建地形
- def jump_plat_terrain(terrain, height, platform_size=1.):
- height = int(height / terrain.vertical_scale)
- platform_size = int(platform_size / terrain.horizontal_scale / 2)
- x1 = terrain.length // 2 - platform_size
- x2 = terrain.length // 2 + platform_size
- y1 = terrain.width // 2 - platform_size
- y2 = terrain.width // 2 + platform_size
- terrain.height_field_raw[x1:x2, y1:y2] = height
-
复制代码
这是一个AzureLoong/gpugym/utils路径下的terrain.py文件中的一个函数,它被用以创建一个凸起的平台,其中平台高度为height,平台大小为platform_size。
Terrain类的定义也在此文件中,结构比较简单,在这里就不做详细解释了。
Terrain类中最重要的一个参数就是height_field_raw,它的定义语句是
- self.height_field_raw = np.zeros((self.tot_rows , self.tot_cols), dtype=np.int16)
复制代码
它具体的作用是,以坐标形式表现地形中某处位置的高度。
所以terrain.height_field_raw[x1:x2, y1:y2] = height的意思就是在x1到x2,y1到y2区域创建高度为height的地形。
另外的,因为height_field_raw以数组形式存储高度数据,所以x1,x2,y1,y2都需要是整数。另一个值得注意的问题是x1,x2,y1,y2相比于platform_size都乘上了一个horizontal_scale参数,而高度height则乘上了一个vertical_scale参数,这是为了以后方便对所有的地形做统一调整而添加的参数。
上文中给出了如何创建一个凸起的跳台jump_plat的函数,通过修改上文中的代码语句的最后一行则能让它创建一个下凹的jump_pit
- terrain.height_field_raw[x1:x2, y1:y2] = -height
复制代码
|