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.rhkb.cn/news/248048.html

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

相关文章

【C++进阶】STL容器--list使用迭代器问题分析

目录 前言 1. list的基本使用 1.1 list构造函数 1.2 list迭代器 1.3 list capacity 1.4 list元素访问 1.5 list 修改操作 insert erase swap resize clear 2. list失效迭代器问题 3. list使用算法库函数问题 总结 前言 list(链表)在C中非常重要…

OpenAI发布新模型!ChatGPT性能重磅提升,API大幅降价,GPT-4 「变懒」被修复

OpenAI 对ChatGPT进行了大更新:推出了新一代的嵌入模型,对GPT-4 Turbo模型进行了更新,并将很快对GPT-3.5 Turbo的API进行大幅降价,GPT-4「变懒」行为也被修复。 接下来二狗就带大家看看ChatGPT的这次详细更新。 推出新的嵌入模型…

Shell中sed编辑器

1.简介 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个 命令文本文件中。 2.sed编辑器的工作流程 sed…

Adobe Photoshop 2024 v25.4.0 - 专业的图片设计软件

Adobe Photoshop 2024 v25.4.0更新了,从照片编辑和合成到数字绘画、动画和图形设计,任何您能想象到的内容都能通过PS2024轻松实现。 利用人工智能技术进行快速编辑。学习新技能并与社区分享您的工作。借助我们的最新版本,做令人惊叹的事情从未…

【C/C++ 05】快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序算法,其基本思想是:任取待排序序列中的某元素作为基准值,按照该基准值将待排序集合分割成两个子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于…

uniapp H5 实现上拉刷新 以及 下拉加载

uniapp H5 实现上拉刷新 以及 下拉加载 1. 先上图 下拉加载 2. 上代码 <script>import DragableList from "/components/dragable-list/dragable-list.vue";import {FridApi} from /api/warn.jsexport default {data() {return {tableList: [],loadingHi…

路由反射器 RR 配置实验

一、预习&#xff1a; RR&#xff1a;Route Reflect&#xff0c;是为了解决 IBGP 水平分割问题&#xff0c;即&#xff1a;【BGP 路由器从 IBGP 收到的路由&#xff0c;不会传递给其他 IBGP 邻居】&#xff0c;因此需要使用路由反射器&#xff0c;这样&#xff0c;未收到路由的…

【Java反序列化】Shiro-550漏洞分析笔记

目录 前言 一、漏洞原理 二、Shiro环境搭建 三、Shiro-550漏洞分析 解密分析 加密分析 四、URLDNS 链 前言 shiro-550反序列化漏洞大约在2016年就被披露了&#xff0c;在上学时期也分析过&#xff0c;最近在学CC链时有用到这个漏洞&#xff0c;重新分析下并做个笔记&…

260:vue+openlayers 通过webgl方式加载矢量图层

第260个 点击查看专栏目录 本示例介绍如何在vue+openlayers中通过webgl方式加载矢量图层。在做这个示例的时候,采用vite的方式而非webpack的方式。这里的基础设置需要改变一下。 ol的版本7.5.2或者更高。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文…

如何使用docker compose安装APITable并远程访问登录界面

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 …

【虚拟机数据恢复】异常断电导致虚拟机无法启动的数据恢复案例

虚拟机数据恢复环境&#xff1a; 某品牌R710服务器MD3200存储&#xff0c;上层是ESXI虚拟机和虚拟机文件&#xff0c;虚拟机中存放有SQL Server数据库。 虚拟机故障&#xff1a; 机房非正常断电导致虚拟机无法启动。服务器管理员检查后发现虚拟机配置文件丢失&#xff0c;所幸…

idea 打包跳过测试

IDEA操作 点击蓝色的小球 手动命令 mvn clean package -Dmaven.test.skiptrue# 下载源码![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ff15aad1c9a546b6ab0556b5b135f409.png)

Linux:重定向

Linux&#xff1a;重定向 输出重定向追加重定向输出重定向与追加重定向的本质输入重定向 输出重定向 在Linux中&#xff0c;输出重定向是一种将命令的输出发送到不同位置的方法。通常&#xff0c;执行命令时&#xff0c;输出会显示在终端上。然而&#xff0c;使用输出重定向&a…

C语言菜鸟入门·判断语句(if语句、if...else语句、嵌套if语句)详细介绍

目录 1. if语句 2. if...else语句 3. if...else if...else 语句 4. 嵌套if语句 C 语言把任何非零和非空的值假定为 true&#xff0c;把零或 null 假定为 false。 语句描述if语句一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。if...else语句一个 if 语句 后可跟…

HDFS Federation前世今生

一 背景 熟悉大数据的人应该都知道&#xff0c;HDFS 是一个分布式文件系统&#xff0c;它是基于谷歌的GFS实现的开源系统&#xff0c;设计目的就是提供一个高度容错性和高吞吐量的海量数据存储解决方案。在经典的HDFS架构中有2个NameNode和多个DataNode&#xff0c;如下 从上面…

etcd技术解析:构建高可用分布式系统的利器

1. 引言 随着云原生技术的兴起&#xff0c;分布式系统的构建变得愈发重要。etcd作为一个高可用的分布式键值存储系统&#xff0c;在这个领域发挥着至关重要的作用。本文将深入探讨etcd的技术细节&#xff0c;以及如何利用它构建高可用的分布式系统。 2. etcd简介 etcd是一个开…

力扣238. 除自身以外数组的乘积(前后缀和)

Problem: 238. 除自身以外数组的乘积 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1&#xff1a; 1.先求取数组的包括当前下标值得前后缀乘积&#xff08;利用两个数组记录下来分别为leftProduct和rightProduct&#xff09; 2.当求取一个下标为i的数组中的元素&#x…

2024年阿里云幻兽帕鲁Palworld游戏服务器优惠价格表

自建幻兽帕鲁服务器租用价格表&#xff0c;2024阿里云推出专属幻兽帕鲁Palworld游戏优惠服务器&#xff0c;配置分为4核16G和4核32G服务器&#xff0c;4核16G配置32.25元/1个月、10M带宽66.30元/1个月、4核32G配置113.24元/1个月&#xff0c;4核32G配置3个月339.72元。ECS云服务…

msvcr120.dll丢失的三种解决办法,分享详细解决教程

msvcr120.dll文件丢失有这三种方法可以解决&#xff0c;学会这三种方法的任何一种&#xff0c;以后再出现dll文件丢失的情况都能很好地解决&#xff0c;第一种方法最为简单。先给大家说说msvcr120.dll文件为什么会丢失&#xff1f;丢失的原因是什么&#xff1f; 一.msvcr120.d…

如何获得《幻兽帕鲁》隐藏帕鲁唤夜兽?13000个配种配方查询 幻兽帕鲁Steam好评率还在涨 Mac苹果电脑玩幻兽帕鲁 Crossover玩Windows游戏

《幻兽帕鲁》是一款Steam平台热门游戏&#xff0c;开放式大陆和养成式冒险结合&#xff0c;成为2024首款热门游戏&#xff0c;不过由于官方仅发布了Windows版的游戏客户端&#xff0c;Mac用户无法直接玩&#xff0c;好在有Crossover这样的神器&#xff0c;让苹果电脑也能玩上《…