Habitat环境学习二:导航任务中的Habitat-sim基础Habitat-sim Basics for Navigation

导航任务在Habitat-sim任务中的实现

  • 官方教程
  • 概述
  • 重要概念
  • 1、Hello World程序
      • 1.0.1 基础设置Basic settings
      • 1.0.2 模拟器设置Configurations for the simulator
      • 1.0.3 创建模拟器实例
      • 1.0.4 初始化Agent
      • 1.0.5 导航和探索

官方教程

Habitat是一个高效的真实的3D模拟器,旨在促进具身智能的研究。它相较于其他的仿真环境的优势在于速度非常快,采用单个线程可以达到每秒几千帧。
官方视频教程链接
官方jupyter文件链接

概述

这一部分旨在通过一系列编码说明如何使用Habitat-sim进行导航。

重要概念

Habitat-sim用于建模在三维室内仿真环境中进行的具体代理和任务领域。

  • Agent:虚拟的具有一套传感器的实体代理(例如,机器人)。它可以观察环境并能够执行改变代理或环境状态的动作;
  • Sensor:与特定Agent相关联,能够以指定频率返回环境中的观察数据;
  • Scene:虚拟的3D环境,其中包含Agent、场景网格、物体和传感器的三维环境;
  • SceneGraph:对Scene进行管理是模拟器中的代码数据结构,场景的分层表示类似于一个树,将环境组织成区域和物体。可以通过编程方式操作。所有场景组件都存在于场景图上;(不能直接被操作)
  • Simulator:仿真器后端的实例。给定一组已配置的代理和场景图的动作,可以更新代理和场景图的状态,并为代理拥有的所有活动传感器提供观察。

1、Hello World程序

Habitat Sim由三个重要概念组成:

  • 可配置的具身Agent:需要进行配置的虚拟具身Agent。在导航方面,Agent可能是机器人或其他虚拟Agent,其行为和能力可以进行定制;
  • 多种传感器:仿真器支持多种传感器类型,用于模拟代理对环境的不同感知方式。这些传感器可以包括视觉传感器(如RGB摄像头)、深度传感器等,以模拟代理在环境中的感知能力;
  • Scene场景:仿真器可以处理的通用三维数据集,例如 Matterport、Gibson 和 Replica 数据集。场景是仿真的虚拟环境,包括场景网格、物体、代理和传感器。

1.0.1 基础设置Basic settings

首先,我们指定要加载的场景,指定一个默认代理,并描述一些基本的传感器参数,例如观察的类型、位置以及分辨率(宽度和高度)。

# This is the scene we are going to load.
# we support a variety of mesh formats, such as .glb, .gltf, .obj, .ply
# 加载场景文件
test_scene = os.path.join(data_path, "scene_datasets/mp3d_example/17DRP5sb8fy/17DRP5sb8fy.glb"
)
# 指定默认的Agent和几个传感器参数,如与Agent的相对位置
sim_settings = {"scene": test_scene,  # Scene path,场景路径"default_agent": 0,  # Index of the default agent,默认的Agent索引值"sensor_height": 1.5,  # Height of sensors in meters, relative to the agent,传感器参数与Agent的相对位置"width": 256,  # Spatial resolution of the observations,观测的分辨率"height": 256,
}

1.0.2 模拟器设置Configurations for the simulator

为了运行仿真器,我们需要创建一个仿真器能理解的配置。

  • 用于仿真器后端的部分。它指定启动和运行仿真器所需的参数。例如,要加载的场景、是否加载语义网格、是否启用物理引擎等(具体代码);
  • 用于Agent的部分。它描述了初始化代理的参数,如高度、质量,以及附加传感器的配置。用户还可以定义位移量,例如在前进操作中的位移量和转向角度(具体代码)。
# This function generates a config for the simulator.
# It contains two parts:
# one for the simulator backend
# one for the agent, where you can attach a bunch of sensors
# 配置包括两部分:模拟器后端和Agent;
def make_simple_cfg(settings):# simulator backend,模拟器后端配置sim_cfg = habitat_sim.SimulatorConfiguration()sim_cfg.scene_id = settings["scene"]# agent,Agent配置agent_cfg = habitat_sim.agent.AgentConfiguration()# In the 1st example, we attach only one sensor,# a RGB visual sensor, to the agent# 可以将多个传感器加到Agent上,这里加了一个RGBD相机rgb_sensor_spec = habitat_sim.CameraSensorSpec()rgb_sensor_spec.uuid = "color_sensor" # 名称rgb_sensor_spec.sensor_type = habitat_sim.SensorType.COLOR # 传感器类型rgb_sensor_spec.resolution = [settings["height"], settings["width"]] # 分辨率rgb_sensor_spec.position = [0.0, settings["sensor_height"], 0.0] # 相对位置agent_cfg.sensor_specifications = [rgb_sensor_spec] # 通过列表的形式设定传感器return habitat_sim.Configuration(sim_cfg, [agent_cfg]) # 返回模拟器的配置cfg = make_simple_cfg(sim_settings)

这就算配置完成了。在Habitat仿真器的使用中配置是很重要的工作。

1.0.3 创建模拟器实例

配置完成后可以执行,个人的理解是和程序语言中初始化变量一样,只有经过初始化后才能进行执行。

try:  # Needed to handle out of order cell run in Jupytersim.close()
except NameError:pass
sim = habitat_sim.Simulator(cfg)

如果成功执行后会打印Loaded navmesh导航网格,而其中navmesh是一个非常重要的概念。
成功执行后结果

1.0.4 初始化Agent

在初始化仿真器之后,我们可以将代理放置在场景中,设置和查询其状态,例如位置和方向。

# initialize an agent,初始化Agent
agent = sim.initialize_agent(sim_settings["default_agent"])# Set agent state,设定Agent的状态
agent_state = habitat_sim.AgentState()
agent_state.position = np.array([-0.6, 0.0, 0.0])  # in world space,设定Agent在世界中的初始位置
agent.set_state(agent_state)# Get agent state,获取Agent的状态
agent_state = agent.get_state()
print("agent_state: position", agent_state.position, "rotation", agent_state.rotation) # 打印Agent当前位置以及四元数的旋转

显示Agent的位置

1.0.5 导航和探索

# obtain the default, discrete actions that an agent can perform
# default action space contains 3 actions: move_forward, turn_left, and turn_right
# 定义了包含三个动作的离散动作空间:前进、左转和右转,可以自定义离散动作空间自定义动作
action_names = list(cfg.agents[sim_settings["default_agent"]].action_space.keys())
print("Discrete action space: ", action_names)def navigateAndSee(action=""):if action in action_names:observations = sim.step(action)print("action: ", action)if display:display_sample(observations["color_sensor"])action = "turn_right"
navigateAndSee(action)action = "turn_right"
navigateAndSee(action)action = "move_forward"
navigateAndSee(action)action = "turn_left"
navigateAndSee(action)# action = "move_backward"   // #illegal, no such action in the default action space,非法动作空间中无该动作
# navigateAndSee(action)

以上就是如何加载场景、如何设置带有传感器的Agent、指示Agent进行导航、查看并获取观测结果。
观测结果1

观测结果2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/440121.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习(7)--卷积神经网络项目详解

一.项目介绍: 用Keras工具包搭建训练自己的一个卷积神经网络(Simple_VGGNet,简单版VGGNet),用来识别猫/狗/羊三种图片。 数据集: 二.卷积神经网络构造 查看API文档 Convolution layers (keras.io)https://keras.io/api/layers/…

某知名乳业集团:夯实软件安全基础,助力乳业数字化创新发展

某知名乳业集团,是中国奶粉行业的先驱,其高品质产品和对“更新鲜、更适合”理念的不懈追求,赢得了市场的广泛认可。近年来,屡创营收奇迹,充分展现出强劲的发展韧性,这背后与集团数字化战略转型密不可分。 代…

浅谈安科瑞电力监控系统的设计与应用-安科瑞 蒋静

摘要:介绍上海东华大学电力监控系统,采用综合保护装置、多功能仪表、变压器温控仪、直流屏,采集配电现场的各种电参量和状态信号。系统采用现场就地组网的方式,组网后通过现场总线通讯并远传至后台,通过安科瑞电力监控…

作业车间调度问题:P还是NP

获取更多资讯,赶快关注上面的公众号吧! 文章目录 基本概念多项式时间指数时间 P问题(多项式问题)NP问题(非确定性多项式问题)暴力穷举法动态规划 P与NP关系:作业车间调度问题是典型的NP难问题 …

信息安全考证攻略

🔥在信息安全领域,拥有相关的证书不仅能提升自己的专业技能,更能为职业生涯增添不少光彩。下面为大家盘点了一些国内外实用的信息安全证书,让你一睹为快! 🌟国内证书(认证机构:中国信…

《Numpy 简易速速上手小册》第5章:Numpy高效计算与广播(2024 最新版)

文章目录 5.1 向量化计算5.1.1 基础知识5.1.2 完整案例:股票数据分析5.1.3 拓展案例 1:多维数组运算5.1.4 拓展案例 2:复杂函数的向量化应用 5.2 广播机制5.2.1 基础知识5.2.2 完整案例:二维数据与一维数据运算5.2.3 拓展案例 1&a…

Electron桌面应用实战:Element UI 导航栏橙色轮廓之谜与Bootstrap样式冲突解决方案

目录 引言 问题现象及排查过程 描述问题 深入探索 查明原因 解决方案与策略探讨 重写样式 禁用 Bootstrap 样式片段 深度定制 Element UI 组件 隔离样式作用域 结语 引言 在基于 Electron 开发桌面应用的过程中,我们可能时常遇到各种意想不到的问题…

JDK Locale的妙用:探索多语言和地区设置的强大功能

文章目录 前言应用场景国际化(Internationalization)格式化(Formatting)日期格式化数字格式化金额格式化百分比形式格式化 获取Locale信息 前言 JDK(Java Development Kit)的Locale类用于表示特定的地理、…

【C深度解剖】计算机数据下载和删除原理

简介:本系列博客为C深度解剖系列内容,以某个点为中心进行相关详细拓展 适宜人群:已大体了解C语法同学 作者留言:本博客相关内容如需转载请注明出处,本人学疏才浅,难免存在些许错误,望留言指正 作…

Spring Boot + security + jwt 测试安全策略

一、测试概述 主要目的是测试security的用法。因测试搭建mysql和redis比较麻烦,所以我这里将自定义的jwt和用户信息缓存到程序的内存中。 本人测试的项目比较混乱,Spring Boot父类只标出有用的依赖。其子类用的版本为jdk11。后续会继续深入oauth2&#x…

N65总账凭证管理凭证查询(sql)

--核算账簿 select code , name , pk_setofbook from org_setofbook where ( pk_setofbook in ( select pk_setofbook from org_accountingbook where 1 1 and ( pk_group N0001A11000000000037X ) and ( accountenablestate 2 ) ) ) order by code;--核算账簿 select code …

Python(19)Excel表格操作Ⅰ

目录 导包 读取EXCEL文件 1、获取worksheet名称 2、设定当前工作表 3、输出目标单元格数据 4、工作表.rows(行) 5、工作表.columns(列) 小结 导包 要想使用 python 操作 Excel 文件,应当导入 openpyxl 包。在…