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

news2024/9/21 14:42:55

导航任务在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 Jupyter
    sim.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.coloradmin.cn/o/1424211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于C++的面向对象程序设计:类与对象的深入剖析

面向对象程序设计的基本特点 面向对象程序设计的基本特点包括:抽象、封装、继承、多态。 抽象 抽象是指对具体问题或对象进行概括,抽出其公共性质并加以描述的过程。一般情况抽象分为数据抽象和行为抽象,其中数据抽象是指一个对象区别于另…

idea/webstorm 创建Vue实例 Unresolved type Vue 处理方法

1.电脑本地安装node.js 官网下载 2. 其他: 未排除变量,前期试错(以下步骤配置了,但不确定对解决问题是否有帮助)

第 10 章:在C++中使用协程进行系统编程

最后一章专门介绍了一项对系统编程非常有用的功能,但这在C标准中相对较新。协程对象迅速找到了应用,成为了一等公民的状态机对象。它们的强大之处在于隐藏了协程帧后面的逻辑。请注意,这是一个高级主题,且C的协程接口既不简单也不…

216961-98-7,BODIPY 493/503 NHS 活化酯,可以应用于分子生物学等领域中

您好,欢迎来到新研之家 文章关键词:216961-98-7,BODIPY 493/503 NHS 活化酯,BODIPY 493/503 NHS ester,BODIPY 493/503 SE 一、基本信息 产品简介:BODIPY 493/503 NHS ester是一种特殊的染料&#xff0c…

【lesson4】高并发内存池ThreadCache(线程缓存)层实现

文章目录 ThreadCache层的结构申请内存逻辑释放内存逻辑自由链表的实现自由链表的成员变量自由链表的成员函数自由链表的完整实现 ThreadCache申请内存过程的实现ThreadCache需要的成员变量ThreadCache需要的成员函数ThreadCache.h文件代码Allocate的实现Deallocate的实现 封装…

02、全文检索 ------ Solr(企业级的开源的搜索引擎) 的下载、安装、Solr的Web图形界面介绍

目录 Solr 的下载和安装Solr的优势:Lucene与Solr 安装 Solr1、下载解压2、添加环境变量3、启动 Solr Solr 所支持的子命令:Solr 的 Core 和 Collection 介绍Solr 的Web控制台DashBoard(仪表盘)Logging(日志&#xff09…

理想架构的高回退Doherty功率放大器理论与ADS仿真-Multistage

理想架构的高回退Doherty功率放大器理论与仿真-Multistage 参考: 三路Doherty设计 01 射频基础知识–基础概念 Switchmode RF and Microwave Power Amplifiers、 理想架构的Doherty功率放大器(等分经典款)的理论与ADS电流源仿真参考&#x…

《云原生安全攻防》-- 云原生安全概述

从本节课程开始,我们将正式踏上云原生安全的学习之旅。在深入探讨云原生安全的相关概念之前,让我们先对云原生有一个全面的认识。 什么是云原生呢? 云原生(Cloud Native)是一个组合词,我们把它拆分为云和原生两个词来…

TS项目实战一:流淌的字符动画界面

使用ts实现虚拟世界,创建ts项目,并编写ts代码,使用tsc编译后直接加载到html界面,实现类似黑客帝国中的流淌的代码界面的效果。 源码下载地址:点击下载 讲解视频 TS实战项目一:数字流界面项目创建 TS实战项…

LRU缓存(Leetcode146)

例题: 分析: 题目要求函数get和put要达到O(1)的时间复杂度,可以用 hashMap 来实现,因为要满足逐出最久未使用的元素的一个效果,还需要配合一个双向链表来共同实现。链表中的节点为一组key-value。 我们可以用双向链表来…

前端工程化之:webpack1-9(plugin)

一、plugin loader 的功能定位是转换代码,而一些其他的操作难以使用 loader 完成,比如: 当 webpack 生成文件时,顺便多生成一个说明描述文件;当 webpack 编译启动时,控制台输出一句话表示 webpack 启动了&…

Gas Hero Common Heroes NFT 概览与数据分析

作者:stellafootprint.network 编译:mingfootprint.network 数据源:Gas Hero Common Heroes NFT Collection Dashboard Gas Hero “盖世英雄” 是一个交互式的 Web3 策略游戏,强调社交互动,并与 FSL 生态系统集成…

THREE.JS动态场景开发实战【赛博朋克】

在本教程中,我们将探索如何创建类似 Three.js 的赛博朋克场景,灵感来自 Pipe 网站上的背景动画。 我们将指导你完成使用 Three.js 编码动态场景的过程,包括后处理效果和动态光照,所有这些都不需要任何着色器专业知识。 我用这个场…

自动保存知乎上点赞的内容至本地

背景:知乎上常有非常精彩的回答/文章,必须要点赞收藏,日后回想起该回答/文章时翻看自己的动态和收藏夹却怎么也找不到,即使之前保存了链接网络不好也打不开了(。所以我一般碰到好的回答/文章都会想办法保存它的离线版本…

文件上传的另类应用

1.Imagemagick CVE-2016-3714 CVE-2022-44268 CVE-2020-29599可在vulhub靶场进行复现1.1.Imagemagick简介 ImageMagic是一款图片处理工具,当传入一个恶意图片时,就有可能存在命令注入漏洞。 ImageMagick默认支持一种图片格式mvg,而mvg与svg…

USTC ICS(2023Fall) Lab2 The PingPong Sequence

LC-3汇编语言 .ORIG x3000LDI R0,n ;f(n)NOT R0,R0ADD R0,R0,#1 ;取R0补码用于减法AND R1,R1,#0 ;R1记录循环次数,先初始化为0ADD R2,R1,#0 ;R2记录符号,加号为0,减号为-1,f(1)对应加号ADD R3,R1,#3 ;记录f(n),f(1)3AND R5,R5,#0 ;R5存0000 1111 1111 1111…

ubuntu20配置mysql8

首先更新软件包索引运行 sudo apt update命令。然后运行 sudo apt install mysql-server安装MySQL服务器。 安装完成后,MySQL服务将作为systemd服务自动启动。你可以运行 sudo systemctl status mysql命令验证MySQL服务器是否正在运行。 连接MySQL 当MySQL安装…

华为mate60 pro与小米14 pro 的巅峰对决

今天我们换下思路,不讲技术了!我们一起讲讲手机!小编暂时充当一下业余的数码咖。 今天我们就讲讲华为mate60 pro和小米14pro 这两款手机。这两款手机都是近期新出的发行版本,热度那是一直未减啊。 华为mate60 Pro 我们先说说这个…

gitlab-runner注册到gitlab时报错:ERROR: Registering runner... failed xxxxxxxx

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

CRG设计之时钟

1. 前言 CRG(Clock and Reset Generation,时钟复位生成模块) 模块扮演着关键角色。这个模块负责为整个系统提供稳定可靠的时钟信号,同时在系统上电或出现故障时生成复位信号,确保各个模块按预期运行。简而言之,CRG模块就像是SoC系…