当前位置: 首页 > news >正文

技术视界|青龙机器人训练地形详解(二):添加地形到训练环境

上一篇文章讲了如何创建一个机器人训练地形,本篇文章将一步讲解如何添加地形到训练环境。

地形初始化逻辑

地形的创建函数 create_sim 位AzureLoong/gpugym/envs/base/legged_robot.py 中,它会在模拟初始化之后,机器人环境创造之前执行,具体代码如下

def create_sim(self):""" Creates simulation, terrain and evironments"""self.up_axis_idx = 2  # 2 for z, 1 for y -> adapt gravity accordinglyself.sim = self.gym.create_sim(self.sim_device_id, self.graphics_device_id, self.physics_engine, self.sim_params)mesh_type = self.cfg.terrain.mesh_typeif mesh_type in ['heightfield', 'trimesh']:self.terrain = Terrain(self.cfg.terrain, self.num_envs)if mesh_type=='plane':self._create_ground_plane()elif mesh_type=='heightfield':self._create_heightfield()elif mesh_type=='trimesh':self._create_trimesh()elif mesh_type is not None:raise ValueError("Terrain mesh type not recognised. Allowed types are [None, plane, heightfield, trimesh]")self._create_envs()

图片
图片来源于网络

通常的,我们创建地形会选用的 mesh_type 是 trimesh,所以在这段代码中,将会执行的是 Terrain 的初始化和 _create_trimesh 函数。_create_trimesh 函数会初始化仿真环境并设置动静摩擦系数等物理属性,这里就不展开讲解了。


在 create_sim 方法执行结束后会调用生成机器人的方法,这也意味着地形已经生成完毕,可以添加机器人到地形上了。

地形创建和添加

地形的使用主要包括了如何创建一个地形和如何把这个地形放入仿真环境中两部分,而这两部分都在 Terrain 类中。

图片
图片来源于网络

Terrain 中有三种添加地形的逻辑,分别为课程地形,选定地形,和随机地形。

if cfg.curriculum:self.curiculum()elif cfg.selected:self.selected_terrain()else:   self.randomized_terrain()
 

它们和根据 env.terrain.curriculum和env.terrain.selected 参数选择执行。而这三种地形创建逻辑的创建方式都大同小异,其中最关键的两行代码为:

terrain = self.make_terrain(choice, difficulty)
self.add_terrain_to_map(terrain, i, j)

selected_terrain  中创建地形的代码稍有不同,但是创建方式仍然是一样的。

以之前讲解的 jump_plat 举例,它被创建需要经过三个主要步骤:初始化 subTerrain,根据 difficulty 确定参数,创建地形(修改height_field_raw)。在上一篇中的 jump_plat_terrain 函数就承担了最后的创建地形的任务。


这些步骤都在 make_terrain 函数中,它需要两个入参,其中 choice 表示从众多地形中选择一种,而 difficulty 表示该地形的难度。make_terrain 函数可以被简化如下:

def make_terrain(self, choice, difficulty):terrain = terrain_utils.SubTerrain(   "terrain",width=self.width_per_env_pixels,length=self.width_per_env_pixels,vertical_scale=self.cfg.vertical_scale,horizontal_scale=self.cfg.horizontal_scale)height = 0.7 * difficultyjump_plat_terrain(terrain, height = height,  platform_size=2.)return terrain

通过上述的操作一个 subTerrain 就被创建好了,接下来就要通过 add_terrain_to_map 函数将其添加到地图上。该函数主要承担了协调地形位置的任务,即将地形放入对应的行列位置上而不重叠,这里就不展开解析了。

实战问题案例

在仿真训练中,经常会遇到各种无法溯源无法解决的问题。在青龙机器人的平地移动训练过程中,我们就发现在 mesh_type='plane' 的情况下,无法准确的测量足底接触力,非常影响对训练结果的观测和下一步调优的方向确定。


为了解决这一问题,我们选择将 mesh_type 改为 trimesh,但是注释掉了添加地形的函数,这样确保了训练地形仍是平地,且对整体代码的影响最小。

terrain = self.make_terrain(choice, difficulty)
# self.add_terrain_to_map(terrain, i, j)
 

图片

通过学习如何添加地形到训练环境,相信你已经掌握了关键操作!然而,真正的挑战在于复杂地形,你了解多少呢?下一篇,我们将为大家带来精讲复杂地形精讲之台阶,敬请期待~

"OpenLoong" 是全球领先的人形机器人开源社区,秉承技术驱动与开放透明的价值观,致力于汇聚全球开发者推动人形机器人产业发展。由国家地方共建人形机器人创新中心发起的 OpenLoong 项目,是业内首个全栈、全尺寸的开源人形机器人项目,有着人人都可以打造属于自己的机器人的美好愿景,旨在推动人形机器人全场景应用、助力具身智能时代的到来。

欢迎加入 OpenLoong 开源社区,探索人形机器人技术,共享创新成果,在这里一起见证开源的力量!

http://www.xdnf.cn/news/316927.html

相关文章:

  • 光伏“531”政策倒逼下,光储充一体化系统如何破解分布式光伏收益困局?
  • sql错题(3)
  • 学习记录:DAY23
  • 发那科机器人3(机器人编程基础)
  • Python小酷库系列:5个常用的dict属性化访问扩展库
  • Kubernetes调度技术:污点与容忍生产级应用指南
  • Selenium使用指南
  • 7.2.安全防御
  • 一个项目的周测试的文档(Billing Service 测试文档)
  • pcie协议复位
  • 1688拍立淘搜索相似商品API接口概述,json数据示例参考
  • 适合java程序员的Kafka消息中间件实战
  • 用 NGINX 打造高性能 FastCGI 加速 `ngx_http_fastcgi_module`
  • 深入理解Java三大特性:封装、继承和多态
  • 国家信息中心:基于区块链和区块链服务网络(BSN)的可信数据空间建设指引
  • jenkins配置多nexus仓库多maven版本
  • 深入解析华为交换机中的VRRP原理
  • P值、置信度与置信区间的关系:统计推断的三大支柱
  • 三、Hadoop1.X及其组件的深度剖析
  • iOS蓝牙技术实现及优化
  • 【神经网络与深度学习】VAE 在解码前进行重参数化
  • 指定Docker镜像源,使用阿里云加速异常解决
  • lvgl多语言设置
  • Diamond iO:实用 iO 的第一缕曙光
  • 台州智惠自动化签约智橙PLM,让创新持续发生
  • 开发搭载阿里云平台的物联网APP(支持数据接收与发送)
  • 【C++】类和对象
  • Vue3+TS+vite项目本地测试数据接口搭建
  • 1.1.2 简化迭代器 yield return的使用
  • 音乐网站|基于SprinBoot+vue的音乐网站(源码+数据库+文档)