当前位置: 首页 > 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 keyboardcontroller = 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'):breakelif 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 Controllercontroller = 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.mrgr.cn/news/92052.html

相关文章:

  • linux指令2
  • 以ChatGPT为例解析大模型背后的技术
  • 从零开始制作一个漂亮的悬浮按钮
  • SkyWalking集成Kafka实现日志异步采集经验总结
  • 详解Flask Flash Message(消息闪现)
  • comfy UI节点缺失dlib库处理
  • 基于 go-wrk 在 Windows 环境下对 Go Web 应用进行 HTTP 压力测试
  • Django-Vue 学习-VUE
  • Selenium控制已经打开的浏览器(Chrome,Edge)
  • IDEA使用Maven方式构建SpringBoot项目
  • 模型思维 - 领域模型的应用与解析
  • 【框架】参考 Spring Security 安全框架设计出,轻量化高可扩展的身份认证与授权架构
  • 綫性與非綫性泛函分析與應用_3.例題-母本
  • 【SpringMVC】十分钟跑起来一个SpringMVC项目
  • 轻松将 Python 应用移植到 Android,p4a 帮你实现
  • 每日一题——主持人调度(二)
  • STL容器终极解剖:C++ vector源码级实现指南 | 从内存分配到异常安全的全流程避坑
  • MySQL 入门大全:运算符
  • 蓝桥杯训练题目(一)—— 难度:简单(除了最后一题哈)
  • 20250223下载并制作RTX2080Ti显卡的显存的测试工具mats