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 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iTunes Connect 中修改后的内购(IPA)审核所需的时间

引言 在 iOS 开发过程中,将应用上传到 App Store 是一个重要的步骤。应用审核和 IAP 商品审核是分开的,审核一般需要等待一周左右。如果审核通过,我们会收到 Apple 发来的反馈邮件,根据邮件中的指示进行后续操作。如果已经上架的…

客户点赞,“信”任满满 | 竹云喜获近百封感谢信!

玉兔辞旧岁,威龙迎新春 在新春佳节来临之际 一封封感谢信、表扬信 纷至沓来 纸短情长 每一封感谢信的背后 都记载着一个动人的故事 字里行间情真意切 激励着竹云继续前行! 国家电投 竹云项目组成员凭借丰富的业务、技术经验、专业的职业素养和较…

从换脸到克隆:IP Adapter FaceID的技术突破与应用

引言 换脸技术,一直以来都是数字图像处理领域的热门话题。从最早的传统方法到现在的AI驱动技术,换脸技术已经经历了多次重大的技术革新。近年来,随着深度学习和计算机视觉技术的发展,换脸技术开始向更加智能化、自动化的方向演进…

Springboot自定义线程池实现多线程任务

1. 在启动类添加EnableAsync注解 2.自定义线程池 package com.bt.springboot.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTask…

移动端深度编辑产品技术解决方案

视频编辑已经成为企业宣传、教育、娱乐等多个领域的重要工具。美摄科技凭借其深厚的技术积累和对市场需求的敏锐洞察,开发出业界领先的移动端深度编辑产品,为企业提供高效、专业的视频编辑解决方案。 美摄科技移动端深度编辑产品方案,基于多…

思维导图:大神教你如何画思维导图

思维导图是什么? 思维导图是一种图形化的工具,用于组织和展示思维过程、概念关系和信息结构。它以一个中心主题为起点,通过分支和连接的方式,将相关的想法、概念、关键词等呈现在一个图形化的结构中。 思维导图通常以中心节点开始…

自动化测试——selenium工具(web自动化测试)

1、自动化测试 优点:通过自动化测试有效减少人力的投入,同时提高了测试的质量和效率。 也用于回归测试。随着版本越来越多,版本回归的压力越来越大,仅仅通过人工测试 来回归所以的版本肯定是不现实的,所以…

备战蓝桥杯--数据结构及STL应用(基础)

今天轻松一点&#xff0c;讲一讲stl的基本操作吧&#xff01; 首先&#xff0c;让我们一起创建一个vector容器吧&#xff01; #include<bits/stdc.h> using namespace std; struct cocoack{ int coco,ck; } void solve(){vector<cocoack> x;for(int i0;i<5;i){…

springboot3+vue3支付宝在线支付案例-渲染产品列表页面

springboot3vue3支付宝在线支付案例-渲染产品列表页面&#xff01;今天折腾了半天&#xff0c;完成了vue3前端项目的产品列表选染。 我们使用到了技术有axios&#xff08;发送跨域的请求获取产品&#xff09;。pinia&#xff08;绑定数据&#xff09;, import { ref } from vu…

203.移除链表元素(力扣LeetCode)

文章目录 203.移除链表元素题目描述原链表删除元素虚拟头节点 203.移除链表元素 题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head …

redis-4 集群

应用场景 为什么需要redis集群&#xff1f; 当主备复制场景&#xff0c;无法满足主机的单点故障时&#xff0c;需要引入集群配置。 一般数据库要处理的读请求远大于写请求 &#xff0c;针对这种情况&#xff0c;我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服…

网安文件包含漏洞

文件包含概念&#xff1a; 开发人员通常会把可重复使用的函数写到单个文件中&#xff0c;在使用某些函数时&#xff0c;直接调用此文件&#xff0c;而无需再次编写&#xff0c;这种调用文件的过程一般被称为包含。为了使代码更加灵活&#xff0c;通常会将被包含的文件设置为变…

【C/C++ 01】初级排序算法

排序算法通常是针对数组或链表进行排序&#xff0c;在C语言中&#xff0c;需要手写排序算法完成对数据的排序&#xff0c;排序规则通常为升序或降序&#xff08;本文默认为升序&#xff09;&#xff0c;在C中&#xff0c;<algorithm>头文件中已经封装了基于快排算法的 st…

Python采集学习笔记-读取excel数据

表格格式 方法一:使用xlrd import xlrd 1.读取Excel文件 workbook xlrd.open_workbook(plc.xlsx) 2.读取第一个表 sheet workbook.sheet_by_index(0) 3.获取表格总行数 total_rows sheet.nrows 4.创建列表,存储表格一行中每一列信息 plc_info [] for row in range(1…

【Linux】System V 共享内存

文章目录 一、System V共享内存的原理共享内存的内核数据结构 二、共享内存的使用1. 创建shmget()系统调用创建shm在命令行中查询共享内存 2. 释放使用命令释放共享内存资源使用shmctl释放共享内存资源 3. 关联4. 去关联 三、用共享内存实现server&client通信 一、System V…

【架构】Docker实现集群主从缩容【案例4/4】

实现集群主从缩容【4/4】 接上一节&#xff0c;在当前机器为4主4从的架构上&#xff0c;减缩容量为3主3从架构。即实现删除6387和6388. 示意图如下&#xff1a; 第一步&#xff1a;查看集群情况&#xff08;第一次&#xff09; redis-cli --cluster check 127.0.0.1:6387roo…

负载均衡技术助力企业数字化转型和高可用架构实现

文章目录 什么是高可用架构什么是负载均衡负载均衡设备硬件负载均衡的代表产品软件负载均衡的代表产品 负载均衡基于OSI模型分层负载均衡在网络层负载均衡在传输层负载均衡在应用层 优先考虑负载均衡的场景硬件负载均衡的缺点云负载均衡正在成为最佳选择企业数字化转型对负载均…

Spring-boot项目+Rancher6.3部署+Nacos配置中心+Rureka注册中心+Harbor镜像仓库+NFS存储

目录 一、项目概述二、环境三、部署流程3.1 Harbor部署3.1.1 docker安装3.1.2 docker-compose安装3.1.3 安装证书3.1.4 Harbor下载配置安装 3.2 NFS存储搭建3.3 Rancher平台配置3.3.1 NFS存储相关配置3.3.2 Harbor相关配置3.3.3 Nacos部署及相关配置3.3.4 工作负载deployment配…

石油化工设备状态监测与健康管理

在石油化工行业&#xff0c;设备长时间稳定运行至关重要&#xff0c;而PreMaint作为智能监测与健康管理领域的领军者&#xff0c;正在为该行业设备状态的实时监测、健康管理以及智能诊断提供全新的解决方案。 一、状态监测的必要性 石化行业设备的特殊性质要求对其状态进行持续…

如何在 Mac 中运行 Office 办公软件

虽然 Office 软件也有 Mac 版本的&#xff0c;但是有蛮多小伙伴用起来还是感觉不得劲&#xff0c;毕竟接触了太久的 Windows&#xff0c;所以想要使用 Windows 版本的 Office 软件。 今天就给大家介绍一下怎么在 Mac 电脑中运行 Windows 版本的办公软件&#xff0c;在这里就需…