详解Virtualhome环境搭建教程 | 智能体

news/2025/2/23 14:35:09
🙋大家好!我是毛毛张!
🌈个人首页: 神马都会亿点点的毛毛张

本篇文章毛毛张想分享的是搭建VitrualHome环境的教程,这个内容在国内很少有人在做,或者做的时候分享的教程比较少,毛毛张在此记录一下

文章目录

  • 1.前言
  • 2.搭建教程
    • 2.1 下载代码
    • 2.2 配置虚拟环境
    • 2.3 毛毛张遇到的问题
      • 2.3.1 将numpy的版本降低为1.x
      • 2.3.2 导入函数问题
      • 2.3.3 No module named 'unity_simulator'
      • 2.3.4 Exception: Error, environment was found but could not be launched
  • 3.代码测试
    • 3.1 检验环境是否配置成功
    • 3.2 仿真动画
    • 3.3 官网教程
  • 4.其它问题
  • 参考文献

1.前言

  • 最近毛毛张在做智能体任务规划,看到了几篇文章,他们都是基于VirtualHome这个虚拟环境来做的
    • 相关文章:https://progprompt.github.io/
    • 相关文章:https://tannl.github.io/FLTRNN.github.io/
  • VirtualHome官网介绍:VirtualHome 是一个交互式平台,可通过程序模拟复杂的家庭活动。VirtualHome 的关键之处在于,它支持与环境进行复杂交互,例如拿起物品、打开 / 关闭电器、打开家电设备等等。我们的模拟器可通过 Python API 轻松调用:将活动编写为简单的指令序列,随后便能在 VirtualHome 中呈现出来。用户可以在不同的智能体和环境之间进行选择,还能随时修改环境。此外,该平台还能输出各类真实数据,比如带时间戳的动作、实例 / 语义分割数据,以及光流和深度数据。这个平台能够模拟多智能体活动,可用作训练具身人工智能任务智能体的环境。
  • VirtualHome官网链接:https://github.com/xavierpuigf/virtualhome
  • VirtualHome官网教程:http://virtual-home.org/documentation/master/

话不多说,下面开始VirtualHome的搭建教程

2.搭建教程

  • 本搭建教程使用的版本为:
  • 说明:尽量不要改动版本,免得容易报错

2.1 下载代码

  • 下载官网代码:https://github.com/xavierpuigf/virtualhome,下图是毛毛张下载官网代码之后使用vscode打开的文件目录结构
    QQ_1739954039812

2.2 配置虚拟环境

虚拟环境配置不熟悉的可以参看毛毛张的这篇文章:【万字长文】【超详尽的配置教程】Anaconda配置深度学习环境教程 | Pytorch | Tensorflow | conda | pip | cuda | cudnn | torch

1.首先创建一个虚拟环境:

conda create -n virtualhome python=3.9

2.激活创建好的虚拟环境:

conda activate virtualhome

3.安装virtualhome

pip install virtualhome

QQ_1739954689097

4.下图则表明virtualhome库安装完成,可以留意一下,当前命令安装的opencv-python版本为4.5.1.48
QQ_1739954959711
5.切换到官网下载的代码目录virtuahome下,注意virtualhome目录下还有一个virtualhome目录,是切换到最外层目录下,然后执行pip install -e .代码,该命令的本质就是运行该目录下的setup.py代码

cd virtualhome
pip install -e .

报错:但是根据官网的代码执行pip install -e .会报错,如下图所示,报错信息显示他需要有一个src文件夹,但下载下来的文件里并没有
QQ_1739964238685
解决方案:修改virtualhome目录下的setup.py的第42行的python_requires=">=3.10",将python版本限制改为3.9,然后可以成功安装。最后setup.py的文件修改为如下情况
在这里插入图片描述

python">import setuptools

with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()

setuptools.setup(
    name="virtualhome",
    version="2.3.0",
    author="Xavier Puig",
    author_email="xavierpuig@csail.mit.edu",
    description="Python API to communicate with the VirtualHome environment",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/xavierpuigf/virtualhome",
    project_urls={
        "Documentation": "http://virtual-home.org/docs/",
        "Bug Tracker": "https://github.com/xavierpuigf/virtualhome/issues"
    },
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    install_requires=[
        'certifi==2024.7.4',
        'chardet==3.0.4',
        'idna==2.8',
        'matplotlib>=3.4.2',
        'networkx==2.3',
        'numpy>=1.19.3',
        'opencv-python==4.8.1.78',
        'pillow>=8.3.1',
        'plotly==3.10.0',
        'requests>=1.21.0',
        'ipdb==0.13.9',
        'termcolor==1.1.0',
        'tqdm==4.66.3',
        'urllib3>=1.24.3'
    ],
    package_dir={"": "."},
    packages=setuptools.find_packages(where="."),
    python_requires=">=3.9",
)

6.修改完python版本的限制之后,再执行命令即可安装成功!

pip install -e .

QQ_1739955806385

7.接着在官网下载VirtualHome仿真器,并将解压之后的文件放在virtualhome/virtualhome/simulation/unity_simulator目录下

  • 官网下载页面:http://virtual-home.org/documentation/master/downloads/downloads.html

QQ_1739956135274

8.下载仿真器解压之后的存放的文件目录结构如下图所示,这个比较重要,后面需要用到这个目录

QQ_1739956316027

2.3 毛毛张遇到的问题

2.3.1 将numpy的版本降低为1.x

  • 在上面的安装过程中如果不限制会默认安装最新版本的numpy,已经是2.x版本了,但是毛毛张在运行代码的时候会出现如下图所示报错,因此我们需要重新降低为1.x版本,通过如下命令:
    pip install "numpy<2.0"
    

QQ_1739957597897

  • 安装成功如下图所示:
    QQ_1739957863534

2.3.2 导入函数问题

  • 官网代码存在导入一个函数有问题,做出如下更改:
    QQ_1739956710516

2.3.3 No module named ‘unity_simulator’

报错代码:
QQ_1739957347646
解决方案: 找到virtualhome/virtualhome/__init__.py文件,将仿真器的目录添加到系统路径下,如下图所示:

python">import glob
import sys
from sys import platform

# Needs to be fixed!
original_path = sys.path[5]
new_path = "E:/Agent/text/virtualhome/virtualhome/simulation"
sys.path.append(new_path)

from unity_simulator.comm_unity import UnityCommunication
from unity_simulator import utils_viz

QQ_1739957543350

2.3.4 Exception: Error, environment was found but could not be launched

报错: 在运行下面的测试代码的时候可能会遇到下面的报错
在这里插入图片描述
解决方案:virtualhome\virtualhome\simulation\unity_simulator\communication.py文件的第180行左右添加下面的代码

python">if not env:
	env = None

QQ_1739961250846

3.代码测试

  • 下面毛毛张将通过官网的案例来教大家检验环境是否配置成功,前提需要大家把上面毛毛张遇到的问题都统一修改过来,再执行下面的代码,才能测试成功

3.1 检验环境是否配置成功

1.在virtualhome目录下创建代码test1.py,该测试的执行的任务是:把三文鱼放进微波炉

python">from virtualhome.simulation.unity_simulator.comm_unity import UnityCommunication
import matplotlib.pyplot as plt

# 定义 Unity 可执行文件的路径
YOUR_FILE_NAME = "E:/Agent/text/virtualhome/virtualhome/simulation/unity_simulator/windows_exec.v2.3.0/VirtualHome.exe"
port = "8080"  # 选择一个端口号

# 初始化 UnityCommunication 对象
comm = UnityCommunication(file_name=YOUR_FILE_NAME, port=port)

try:
    # 重置环境
    env_id = 0  # env_id 范围为 0 到 6
    res = comm.reset(env_id)
    comm.add_character('Chars/Female2')

    # Get graph
    s, g = comm.environment_graph()
    if not res:
        raise ValueError("环境重置失败!")

    print("环境重置成功:", res)

    # Get nodes for salmon and microwave
    salmon_id = [node['id'] for node in g['nodes'] if node['class_name'] == 'salmon'][0]
    microwave_id = [node['id'] for node in g['nodes'] if node['class_name'] == 'microwave'][0]

    # Put salmon in microwave
    script = [
        '<char0> [walk] <salmon> ({})'.format(salmon_id),
        '<char0> [grab] <salmon> ({})'.format(salmon_id),
        '<char0> [open] <microwave> ({})'.format(microwave_id),
        '<char0> [putin] <salmon> ({}) <microwave> ({})'.format(salmon_id, microwave_id),
        '<char0> [close] <microwave> ({})'.format(microwave_id)
    ]
    comm.render_script(script, recording=True, frame_rate=30)


except Exception as e:
    print(f"发生错误:{e}")

finally:
    # 关闭通信
    comm.close()
    print("Unity 通信已关闭")

2.稍等一会之后,出现下面结果表示运行成果:
QQ_1739961542917
3.同时还会在当前工作目录下生成一个Output目录,这个目录下存放的时执行的动作生成的视频的每一帧的图像,在上面的测试代码中可以参见毛毛张把帧率设置为30
QQ_1739961600144

3.2 仿真动画

  • 上面的代码运行的时候只能在控制台输出结果,想要看见实际的效果图,可以双击仿真器目录下的VirtualHome.exe文件
    • 注意事项:刚打开的时候是黑的是正常的
    • 注意事项:上面的代码中comm.render_script(script, recording=True, frame_rate=60),这一行代码中的recording设置为true是能看见动画的关键
  • 毛毛张已经将输出的动画结果上传到B站:VirtualHome智能体交互Demo:将三文鱼放进冰箱

3.3 官网教程

  • 更多的测试代码,可以查看官网教程进行学习,如果能够把环境配置成功,剩下的就可以通过官方文档自学了:http://virtual-home.org/documentation/master/

4.其它问题

  • 如果还有其它问题可以在评论区和毛毛张交流,或者在官网上面去提交问题!

参考文献

  • https://blog.csdn.net/rabbit9798/article/details/135635313

都看到这了,不妨一键三连再走吧!

🌈欢迎和毛毛张一起探讨和交流!
联系方式点击下方个人名片


http://www.niftyadmin.cn/n/5863480.html

相关文章

趣味数学300题1981版-十五个正方形

分析&#xff1a;移动两根变成11个正方形很简单&#xff1a; 移动4根变成15个正方形&#xff0c;分析&#xff1a; 一个田字格包含5个正方形&#xff0c;若要15个正方形需要3个田字格&#xff0c;如果3个田字格完全不重合&#xff0c;需要6*318根火柴。如果合并正方形的边&…

AI大模型学习(二): LangChain(二)

Langchain构建聊天机器人 安装依赖 pip install langchain_community Chat History:它允许聊天机器人"记住"过去的互动,并在回应后续问题时考虑他们 代码 # 创建模型 from langchain_core.messages import HumanMessage from langchain_core.prompts import ChatP…

如何保存爬虫获取商品评论的数据?

保存爬取的评论数据是爬虫项目中的一个重要环节。根据需求&#xff0c;你可以选择将数据保存为本地文件&#xff08;如CSV、JSON、TXT&#xff09;&#xff0c;或者存储到数据库&#xff08;如MySQL、MongoDB等&#xff09;。以下是几种常见的数据保存方式及其示例代码。 1. 保…

ChatGPT平替自由!DeepSeek-R1私有化部署全景攻略

一、DeepSeek-R1本地部署配置要求 &#xff08;一&#xff09;轻量级模型 ▌DeepSeek-R1-1.5B 内存容量&#xff1a;≥8GB 显卡需求&#xff1a;支持CPU推理&#xff08;无需独立GPU&#xff09; 适用场景&#xff1a;本地环境验证测试/Ollama集成调试 &#xff08;二&a…

python: 并发编程 (Concurrent Programming) Simple example

# encoding: utf-8 # 版权所有 2025 ©涂聚文有限公司™ # 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎 # 描述&#xff1a;并发编程 (Concurrent Programming) pip install mysql.connector # Author : geovindu,Geovin Du 涂…

力扣每日一题【算法学习day.132】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&#xff01;&#xff01;&#xff01; 习题 1.统计相似字符串对的数目 题目链…

Cannot deserialize instance of java.lang.String out of START_ARRAY token

这个错误 Cannot deserialize instance of java.lang.String out of START_ARRAY token 表示 Jackson 正在尝试将一个 JSON 数组反序列化成一个 String 类型的字段&#xff0c;但是 JSON 中传递的是一个数组而不是单一的字符串。 具体来说&#xff0c;这段堆栈信息&#xff1a…

Spring Boot3+Vue2极速整合:10分钟搭建DeepSeek AI对话系统

前言 在生成式AI技术蓬勃发展的今天&#xff0c;大语言模型已成为企业智能化转型和个人效率提升的核心驱动力。作为国产大模型的优秀代表&#xff0c;DeepSeek凭借其卓越的中文语义理解能力和开发者友好的API生态&#xff0c;正在成为构建本土化AI应用的首选平台。 本文将以S…