AI2THOR 2.1.0使用教程
一、安装和入门
1.1 AI2-THOR使用要求
- 操作系统: Mac OS X 10.9+, Ubuntu 14.04+
- 显卡:DX9(着色器型号 3.0)或 DX11,功能级别为 9.3。
- CPU:支持 SSE2 指令集。
- Python 2.7 或 Python 3.5+
- Linux 用户:启用了 GLX 模块的 X 服务器
1.2 使用 pip 安装
您可以使用 pip 安装 AI2-THOR。创建 Python 2.7/3.5/3.6 虚拟环境,
conda create -n ai2thor_env python=3.6
然后进入虚拟环境
conda activate ai2thor_env
然后安装ai2thor
pip install ai2thor
在运行以下代码之前,请确保正在运行带有 OpenGL 的 X 服务器,并且已为您的显卡安装了 OpenGL 扩展。
import ai2thor.controller
controller = ai2thor.controller.Controller()
controller.start()
第一次使用控制器时,包含 3D 场景的游戏环境将被下载到 $HOME/.ai2thor。二进制文件的大小约为 500MB。
二、概念
-
Agent: 胶囊形状的实体,可在场景中导航并与物体互动。
-
Scene: AI2-THOR 中的场景代表一个虚拟房间,代理可以在其中导航并与之互动。有 4 个场景类别,每个类别有 30 个独特的场景: 厨房、起居室、卧室、浴室。
-
Action: 让代理在场景中执行的离散命令(例如,向前移动、向右旋转、拾取对象)
-
Sim Object: 可以与代理互动的对象。根据 “对象类型”(Object Type)所定义的 “承受能力”(affordanced),"对象 "具有一系列交互功能。
-
Object Visibility: 当一个对象满足三个条件时,它就被认为是可见的: 它必须位于摄像机的视口内,必须与 Agent 的中心距离在一个阈值范围内(默认值:1.5 米),并且从摄像机发射的光线必须在不首先击中其他障碍物的情况下击中该对象。请注意,图像中渲染的物体并不总是对 Agent 可见。例如,1.5 米阈值之外的物体可以在图像中看到,但对 Agent 来说将被报告为不可见。
-
Object Interactability: 如果一个物体被标记为可见,并且没有任何其他物体遮挡,那么这个物体就是可交互的。大多数对象只要也是可见的,就是可交互的,但有些对象是透明的,这可能会导致对象被报告为透过它们是可见的。例如,玻璃淋浴门后面有一个海绵物体。玻璃门将被标记为 "可见 "和 “可交互”,但海绵仅为 “可见”。如果试图与海绵进行交互,就会出现错误,因为无法通过玻璃门接触到海绵,只能看到海绵。
-
Receptacle: 一种可以容纳另一个物体的物体。例如 桌面、杯子、沙发、床、桌子、碗等。有些容器无法在场景中移动,它们大多是无法移动的大型物体(台面、水槽等)。有些收纳盒还可以打开和关闭(微波炉、橱柜、抽屉等),而有些收纳盒还可以被代理拿起来移动(盘子、碗、盒子等)。
三、示例
我们提供了一些示例来展示如何使用 AI2-THOR。
3.1 简单示例
一个简单的示例,将代理向前移动一步并返回相应的图像和元数据。
import ai2thor.controller
controller = ai2thor.controller.Controller()
controller.start()# Kitchens: FloorPlan1 - FloorPlan30
# Living rooms: FloorPlan201 - FloorPlan230
# Bedrooms: FloorPlan301 - FloorPlan330
# Bathrooms: FloorPLan401 - FloorPlan430controller.reset('FloorPlan28')
controller.step(dict(action='Initialize', gridSize=0.25))event = controller.step(dict(action='MoveAhead'))# Numpy Array - shape (width, height, channels), channels are in RGB order
event.frame# Numpy Array in BGR order suitable for use with OpenCV
event.cv2image()# current metadata dictionary that includes the state of the scene
event.metadata
3.2 调用复杂操作的示例
拿起杯子, 打开微波炉, 把杯子放在微波炉里
要拾取对象,代理必须首先导航到有可拾取/可见对象的区域。通常,它应该通过一系列 MoveAhead、RotateLeft、RotateRight 命令来完成。在这里,我们直接传送到一个已知的位置,那里有一个杯子。
import ai2thor.controller
controller = ai2thor.controller.Controller()
controller.start()controller.reset('FloorPlan28')
controller.step(dict(action='Initialize', gridSize=0.25))controller.step(dict(action='Teleport', x=-2.5, y=0.900998235, z=-3.0))
controller.step(dict(action='LookDown'))
event = controller.step(dict(action='Rotate', rotation=180))
# In FloorPlan28, the agent should now be looking at a mug
for o in event.metadata['objects']:if o['visible'] and o['pickupable'] and o['objectType'] == 'Mug':event = controller.step(dict(action='PickupObject', objectId=o['objectId']), raise_for_failure=True)mug_object_id = o['objectId']break# the agent now has the Mug in its inventory
# to put it into the Microwave, we need to open the microwave firstevent = controller.step(dict(action='LookUp'))
event = controller.step(dict(action='RotateLeft'))event = controller.step(dict(action='MoveLeft'))
event = controller.step(dict(action='MoveLeft'))
event = controller.step(dict(action='MoveLeft'))
event = controller.step(dict(action='MoveLeft'))event = controller.step(dict(action='MoveAhead'))
event = controller.step(dict(action='MoveAhead'))
event = controller.step(dict(action='MoveAhead'))
event = controller.step(dict(action='MoveAhead'))
event = controller.step(dict(action='MoveAhead'))
event = controller.step(dict(action='MoveAhead'))for o in event.metadata['objects']:if o['visible'] and o['openable'] and o['objectType'] == 'Microwave':event = controller.step(dict(action='OpenObject', objectId=o['objectId']), raise_for_failure=True)receptacle_object_id = o['objectId']breakevent = controller.step(dict(action='PutObject',receptacleObjectId=receptacle_object_id,objectId=mug_object_id), raise_for_failure=True)# close the microwave
event = controller.step(dict(action='CloseObject',objectId=receptacle_object_id), raise_for_failure=True)
3.3 多智能体示例
此示例说明如何在多代理设置中运行 AI2-THOR。
import ai2thor.controller
controller = ai2thor.controller.Controller()
controller.start()# agentCount specifies the number of agents in a scene
multi_agent_event = controller.step(dict(action='Initialize', gridSize=0.25, agentCount=2))# print out agentIds
for e in mult_agent_event.events:print(e.metadata['agentId'])# move the second agent ahead, agents are 0-indexed
multi_agent_event = controller.step(dict(action='MoveAhead', agentId=1))
3.4 多线程示例
此示例演示如何以多线程方式运行代理的多个实例。
mport threading
import time
import ai2thor.controllerthread_count = 8def run():controller = ai2thor.controller.Controller()controller.start()# 100 is an arbritary numberfor _ in range(100):t_start = time.time()controller.reset('FloorPlan1')controller.step({'action' : 'Initialize', 'gridSize' : 0.25})print('init time', time.time() - t_start)t_start_total = time.time()for _ in range(10):controller.step({'action' : 'MoveAhead'})controller.step({'action' : 'RotateRight'})total_time = time.time() - t_start_totalprint('total time', total_time, 20 / total_time, 'fps')threads = [threading.Thread(target=run) for _ in range(thread_count)]
for t in threads:t.daemon = Truet.start()time.sleep(1)for t in threads:# calling join() in a loop/timeout to allow for Python 2.7# to be interrupted with SIGINTwhile t.isAlive():t.join(1)print('done')
3.5 一个示例结果

参考文献
[1] https://allenai.github.io/ai2thor-v2.1.0-documentation/installation#
[2] https://ai2thor.allenai.org/
相关文章:
AI2THOR 2.1.0使用教程
一、安装和入门 1.1 AI2-THOR使用要求 操作系统: Mac OS X 10.9, Ubuntu 14.04显卡:DX9(着色器型号 3.0)或 DX11,功能级别为 9.3。CPU:支持 SSE2 指令集。Python 2.7 或 Python 3.5Linux 用户…...
在Nginx中配置php程序环境。
1、前言。 我一开始是想 搭建 Tomcat PHP 环境。 Tomcat并不能直接运行PHP,因为Tomcat是一个Java Web服务器,主要用于运行Java应用程序。但是,我们可以通过一些配置和工具来使Tomcat能够运行PHP。 在配置Tomcat支持PHP 项目的时…...
!力扣70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 1. 递归(超时) class Solution { public:int climbStairs(int n) {if(n1){return 1;}if(n2){return 2;}return climbStairs…...
Spring boot+vue前后端分离
目录 1、前端vue的搭建 2、后端项目的构建 pom文件中引入的jar包 yml文件用来配置连接数据库和端口的设置 application.property进行一些整合 service层 imp层 mapper 实体类 额外写一个类、解决跨域问题 3、测试 1、前端vue的搭建 建立项目的过程略 开启一个建立好…...
Python基础总结之列表转字符串
Python基础总结之列表转字符串 在Python中,将列表转换为字符串有多种方法,最常用的是使用str.join()方法。这里有一些示例: 使用str.join()方法 这是将列表转换为字符串的最直接和最常用的方法。你需要确保列表中的所有元素都是字符串类型…...
二分【1】二分查找框架 查找指定元素
目录 二分查找 基本思想 几种情况汇总 一。严格递增序列 1.查找本身 2.查找第一个大于等于自己的 3.查找第一个大于自己的 4.严格递减序列 二。有重复元素 1.取其中第一个出现的 2.取其中最后一个出现的 二分查找 基本思想 几种情况汇总 一。严格递增序列 1.查找本身…...
Python 中如何使用 lambda 函数
在 Python 中,可以使用 lambda 函数来创建匿名函数。lambda 函数的语法是:lambda 参数: 表达式。以下是一些使用 lambda 函数的例子: 通过 lambda 函数来计算两个数的和: add lambda x, y: x y print(add(2, 3)) # 输出 5通过…...
关于焊点检测(SJ-BIST)模块实现
关于焊点检测(SJ-BIST)模块实现 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于焊点检测(SJ-BIST)模块实现一、引言二、焊点检测功能的实现方法(1) 输入接口&#x…...
关于修改Python中pip默认安装路径的终极方法
别想了,终极方法就是手动复制,不过我可以给你参考一下手动复制的方法 关于手动移动pip安装包的方法 别想了,终极方法就是手动复制,不过我可以给你参考一下手动复制的方法一、首先确认一下pip默认安装路径二、再确认一下需要移动到…...
android集成百度文心一言实现对话功能,实战项目讲解,人人都能拥有一款ai应用
大家好,今天给大家讲解下如何实现一个基于百度文心一言的app功能,app内部同时集成了讯飞的语音识别。本文适用于有android基础的小伙伴阅读,文章末尾放上本项目用到的全部实例代码,在使用前请务必看完本文章。 先来给大家看看效果…...
事件总线vueEvent
一个组件结束后要更新另一个组件数据,但是另一个组件和这个组件没有上下级关系 在 Vue 中,非父子组件之间进行通信通常需要使用事件总线或者其他的全局事件管理器。vueEvent 似乎是一个事件总线对象,通过 emit 方法触发了名为 updateData 的事…...
设计模式之观察者模式ObserverPattern(十一)
一、概述 观察者模式 (Observer Pattern) 是一种行为型设计模式,又被称为发布-订阅 (Publish/Subscribe) 模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会自动收到通知并更新…...
JavaScript 编程语言【 数据类型】日期和时间
文章目录 日期和时间创建访问日期组件设置日期组件自动校准(Autocorrection)日期转化为数字,日期差值Date.now()基准测试(Benchmarking)对字符串调用 Date.parse总结✅任务创建日期显示星期数欧洲的星期表示方法许多天…...
RabbitMQ简单使用方法,以异步处理日志为例:
在RabbitMQ中异步记录日志的实现可以分为生产者将日志消息发送到队列,以及消费者从队列中取出消息并记录日志。当搭建好消息队列后,需要确保消费者持续运行,以便随时处理新进入的日志消息。 步骤一:设置生产者发送日志消息到Rabb…...
二分+模拟,CF1461D - Divide and Summarize
一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1461D - Codeforces 二、解题报告 1、思路分析 我们发现每次分裂操作结果都是固定的 我们从初始序列分裂出两个确定的子序列,两个确定的子序列又分裂出4个确定的子序列 那么也就是说…...
C#操作MySQL从入门到精通(16)——使用子查询
前言: 我们在查询数据的过程中有时候查询的数据不是从数据库中来的,而是从另一个查询的结果来的,这时候就需要使用子查询,本文使用的测试数据如下: 1、子查询 下面的代码就是先查询地址是安徽和广西的学生年龄,然后获取年龄对应的姓名 private void button__SubQuery…...
【vue实战项目】通用管理系统:图表功能
目录 前言 1.概述 2.数据概览页 2.1.柱状图 2.2.折线图 2.3.地图 前言 本文是博主前端Vue实战系列中的一篇文章,本系列将会带大家一起从0开始一步步完整的做完一个小项目,让你找到Vue实战的技巧和感觉。 专栏地址: https://blog.csd…...
第99天:权限提升-数据库提权口令获取MYSQLMSSQLOracleMSF
案例一:提权条件-数据库帐号密码获取方式 提权条件 - 数据库帐号密码获取方式 0 、网站存在高权限 SQL 注入点 1 、数据库的存储文件或备份文件 2 、网站应用源码中的数据库配置文件 3 、采用工具或脚本爆破 ( 需解决外联问题 ) sql注入点 xhcms后台管理系统…...
Java 环境配置 -- Java 语言的安装、配置、编译与运行
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 002 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...
升级最新版openssh-9.7p1及openssl-1.1.1h详细步骤及常见问题总结
近期因为openssh相继被漏洞扫描工具扫出存在漏洞,所以考虑升级操作系统中的openssh和openssl为最新版本,来避免漏洞风险。期间的升级过程及遇到的疑难问题,特此记录下来,供有需要的人参考。 本次目标是升级 openssh 为 9.7p1 版本…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
