当前位置: 首页 > news >正文

AI2-THOR环境下实现机器人导航、物体定位与抓取

1. 依赖安装

pip install ai2thor
pip install numpy pillow opencv-python

在这里插入图片描述

2. 验证安装

# 运行测试脚本验证安装 test_thor.py
from ai2thor.controller import Controller
controller = Controller(scene="FloorPlan1")
controller.step(action="MoveAhead")
print("Success!")
## 

3.手动键盘控制

# 创建文件 manual_control.py
from ai2thor.controller import Controller
import keyboard

controller = Controller(
    scene="FloorPlan1", 
    gridSize=0.25,  # 移动步长0.25米
    rotateStepDegrees=45  # 旋转步长45度
)

print("WASD控制移动,QE旋转,F抓取,ESC退出")

while True:
    event = controller.step(action="Pass")  # 保持场景更新
    if keyboard.is_pressed('esc'):
        break
    elif keyboard.is_pressed('w'):
        event = controller.step(action="MoveAhead")
    elif keyboard.is_pressed('s'):
        event = controller.step(action="MoveBack")
    elif keyboard.is_pressed('a'):
        event = controller.step(action="MoveLeft")
    elif keyboard.is_pressed('d'):
        event = controller.step(action="MoveRight")
    elif keyboard.is_pressed('q'):
        event = controller.step(action="RotateLeft")
    elif keyboard.is_pressed('e'):
        event = controller.step(action="RotateRight")
    elif keyboard.is_pressed('f'):
        # 抓取最近的可交互物体
        objects = [obj for obj in event.metadata["objects"] if obj["visible"]]
        if objects:
            event = controller.step(
                action="PickupObject",
                objectId=objects[0]["objectId"],
                forceAction=True
            )

controller.stop()

4. 定位目标物体(以微波炉为例)

# 创建文件 auto_grab.py
from ai2thor.controller import Controller

controller = Controller(
    scene="FloorPlan1",
    visibilityDistance=1.5,  # 可见距离1.5米
    renderInstanceSegmentation=True  # 启用实例分割
)

# 查找所有微波炉
microwaves = [obj for obj in controller.last_event.metadata["objects"]
              if obj["objectType"] == "Microwave"]

if microwaves:
    target_id = microwaves[0]["objectId"]
    # 导航到目标附近
    controller.step(
        action="MoveToObject",
        objectId=target_id,
        moveMagnitude=0.5
    )
    # 抓取动作
    event = controller.step(
        action="PickupObject",
        objectId=target_id
    )
    if event.metadata["lastActionSuccess"]:
        print("抓取成功!")
    else:
        print("抓取失败:", event.metadata["errorMessage"])
else:
    print("场景中没有微波炉")

controller.stop()

5. 多房间导航

# 切换到多楼层场景(如FloorPlan201为厨房+客厅)
controller.reset(scene="FloorPlan201")

# 获取场景拓扑图
event = controller.step(action="GetReachablePositions")
reachable_positions = event.metadata["actionReturn"]

# 随机导航到可达点
import random
target_pos = random.choice(reachable_positions)
controller.step(
    action="MoveTo",
    position=target_pos,
    forceAction=True
)

6. 视觉辅助抓取

# 使用实例分割定位物体
event = controller.step(action="Pass")
for obj in event.instance_segmentation_frame:
    if obj["objectType"] == "Mug":
        # 计算物体中心坐标
        center_x = obj["axisAlignedBoundingBox"]["center"]["x"]
        center_z = obj["axisAlignedBoundingBox"]["center"]["z"]
        controller.step(
            action="MoveTo",
            position=dict(x=center_x, y=0, z=center_z),
            forceAction=True
        )
        controller.step(action="PickupObject", objectId=obj["objectId"])
        break

7. 语音控制

import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:
    print("请说指令:")
    audio = r.listen(source)
    command = r.recognize_google(audio, language='zh-CN')
http://www.dtcms.com/a/33823.html

相关文章:

  • C++经典框架案例(六)
  • CentOS停服后的替代选择:openEuler、Rocky Linux及其他系统的未来展望
  • 《离线唤醒+离线Vosk识别+DeepSeek+离线合成,你的第二大脑》
  • RFID涉密载体柜:智能安全,全程守护,提供智能化的安全管控
  • QEMU源码全解析 —— 内存虚拟化(18)
  • DeepSeek绘制UML设计图
  • HTTP实验(ENSP模拟器实现)
  • 【Python量化金融实战】-第1章:Python量化金融概述:1.2 Python在量化金融中的优势与生态
  • 愿在线段树中搁浅
  • ARM指令集
  • Python 元组全解析:与其他数据类型的对比与应用题】
  • 医疗AI领域中GPU集群训练的关键技术与实践经验探究(下)
  • 更改conda 环境默认安装位置
  • 机器学习数学基础:31.Z检验
  • [python脚本]论文1.(一)CPU/内存数据分析和分组
  • 【AI】DeepSeek 概念/影响/使用/部署
  • Python 高级特性-迭代器
  • 【练习】【子集NO.1】力扣78. 子集
  • 【Research Proposal】基于提示词方法的智能体工具调用研究——难点
  • 解决 Nginx 代理后 HTTP 头部丢失的问题:以 access_token 为例
  • 蛋白质研究常用数据库系列1
  • Windows 下 Visual Studio Code 常用快捷键指南
  • IoT设备硬件攻击技术与接口漏洞利用
  • 【量化科普】Arbitrage,套利
  • The Heliosphere 日球层
  • 如何让大模型理解变量,扣子(coze)智能体中变量描述起着啥作用?程序员看了集体惊呆!扣子免费系列教程(19)
  • 记录spring-boot 3.X版本整合RocketMq
  • AMBA-CHI协议详解(二十)
  • 智慧废品回收小程序php+uniapp
  • PD协议芯片:推动快充技术革新的核心引擎