Miniworld
纯Python轻量级3D室内导航模拟器,pip一键安装,无GPU也能跑,适合RL教学和轻量级导航研究
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
纯Python轻量级3D室内导航模拟器,pip一键安装,无GPU也能跑,适合RL教学和轻量级导航研究
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这样的画面:你在一个陌生的办公室里找人,地板是黑白瓷砖,墙角放着红色药盒,目标是捡起它。这是人类再熟悉不过的空间推理任务——但对AI来说,这是个相当复杂的感知与决策问题。强化学习智能体需要理解图像输入、记忆房间结构、规划移动路径,并对视觉变化做出反应。
MiniWorld 正是为解决这个难题而生的工具:它用纯Python构建了一个可配置的3D室内环境,智能体可以像 FPS 游戏主角一样在其中移动、探索、交互——而整个模拟器只需不到150MB,无需GPU,普通笔记本即可运行。
图1:MiniWorld 项目Logo
MiniWorld 最初由开发者 Maxime Coutté 创建(2017年前后),后因其优秀的代码质量和教学价值被 Farama Foundation(原 OpenAI Gym 维护团队)接纳为官方项目,与 Gymnasium、PettingZoo 并列为基金会的三大核心库。Farama Foundation 专注于为强化学习和多智能体研究提供高质量、可持续维护的开源基础设施,MiniWorld 作为其生态中唯一的轻量级3D环境,承担着"降低3D导航任务研究门槛"的使命。
在学术圈,MiniWorld 已被多篇顶会论文采用:CVPR 2022有论文用它做基于 differentiable planner 的真实世界导航研究;ICML 2021有工作做元强化学习的探索-利用权衡;ICLR 2021有团队提出"Rank the Episodes"方法在程序生成环境中进行离线强化学习。足以证明其在学术研究中的认可度。
MiniWorld 的设计原则是"Few dependencies, easy to modify"——整个模拟器只依赖三个核心库:gymnasium(标准化RL接口)、pyglet(轻量级OpenGL绑定)、numpy(数值计算)。相比之下,VizDoom 需要预编译C++引擎,DMLab-30 需要 DeepMind 的专有模拟器,MiniWorld 让学生和研究者可以在完全透明、可调试的Python代码中理解3D模拟器的内部原理。
架构层面,核心代码分为:
miniworld/miniworld.py:环境基类 MiniWorldEnv,继承自 gymnasium.Env。包含渲染循环(pyglet/OpenGL)、物理步进、碰撞检测、图像采集等核心逻辑。通过 pyglet 的 Immediate Mode OpenGL 直接绘制3D几何体(墙面、地板、天花板),而非加载外部3D模型。miniworld/entity.py:实体系统。Entity 基类定义所有可放置对象(物品、门、墙)的属性;Agent 类代表智能体,包含位置、朝向、速度等状态。miniworld/envs/:15+ 预置环境。Maze(迷宫)、FourRoom(四房间)、Sidewalk(人行道)、PickupObjects(拾取物品)、PutNext(放置物品)、TMaze(T型迷宫)、YMAZE(Y型迷宫)等。每个环境都是一个独立类,通过 room1 = Room(...) + self.place_entity(agent) 的方式组合构建。miniworld/wrappers.py:Gymnasium标准包装器,包括 PyTorchObsWrapper(CHW格式转换)、GreyscaleWrapper(灰度化)、StochasticActionWrapper(随机动作注入)。
图2:迷宫环境俯视图,红色圆点为智能体位置
MiniWorld 提供丰富的环境变体,满足不同研究需求:
| 环境类型 | 文件 | 特点 |
|---|---|---|
| 导航型 | Maze, TMaze, YMAZE | 需要记忆路径,适合空间推理研究 |
| 收集型 | PickupObjects, CollectHealth | 目标导向,适合目标条件RL |
| 放置型 | PutNext | 要求智能体将物品放到指定位置 |
| 开放型 | Sidewalk, Hallway | 连续长走廊,测试长距离导航 |
| 领域随机化 | 所有环境 | 内置域随机化支持,sim-to-real迁移 |
MiniWorld 支持多种观测类型,通过 env.reset() 参数控制:
这种灵活性使得同一个环境可以用于不同的研究场景——从端到端视觉策略学习到基于深度图的里程计研究。
创建一个自定义环境只需几十行代码:
from miniworld.miniworld import MiniWorld
class MyRoom(MiniWorld):
def __init__(self, size=10, **kwargs):
super().__init__(**kwargs)
self.size = size
self.room = self.add_rect_room(
min_x=0, max_x=size,
min_z=0, max_z=size
)
def step(self, action):
obs, reward, terminated, truncated, info = super().step(action)
# 自定义奖励逻辑
return obs, reward, terminated, truncated, info
继承 MiniWorldEnv,添加房间,放置实体,覆写 step() ——这就是MiniWorld的"无限扩展"哲学。
pip install miniworld
依赖非常轻量:Python 3.8+,NumPy,pyglet 1.x,Gymnasium 0.29+。在 macOS/Linux 原生环境通常能直接运行,Windows 用户可能需要额外安装 Mesa OpenGL 库(pip install PyOpenGL PyOpenGL_accelerate)。
import gymnasium as gym
import miniworld
env = gym.make('MiniWorld-Hallway-v0')
obs, info = env.reset()
for _ in range(200):
obs, reward, terminated, truncated, info = env.step(env.action_space.sample())
env.render() # 弹出 pyglet 窗口显示
if terminated or truncated:
obs, info = env.reset()
env.close()
注意:渲染依赖图形界面,SSH 无头环境需要使用 env.reset(mode='rgb_array') 获取像素数组而非弹出窗口。
MiniWorld 官方已于 2025年8月11日 宣布项目 deprecated(弃用),原因是社区使用率不足,未来不再计划接收新功能或支持更新。这是一个重要的信号——如果你的研究需要长期维护保障,应当考虑其替代品:
不过对于学习和快速原型验证,MiniWorld 仍然是极佳选择——代码透明、逻辑清晰,且已有大量学术参考。
此外,MiniWorld 的渲染质量确实"basic"(官方文档承认),不追求照片级真实感。物理引擎也非常基础,不适合机械臂操作等精细物理交互任务。
MiniWorld 是一个定位明确的工具:不是要替代 VizDoom 或 Habitat,而是为强化学习教学和轻量级研究提供一个完全透明、Python原生、零门槛的3D模拟环境。其价值在于代码可读性(你可以一行行debug渲染管线)和部署便利性(pip安装,无外部依赖)。
FARAMA 基金会将其纳入官方生态,本身就是对其代码质量的背书——这批维护者以代码整洁度和文档完备性著称,MiniWorld 虽已弃用,但其架构设计和API风格仍是 Gymnasium 环境开发的范本。
如果你正在研究室内导航、空间推理或多智能体协同,且需要一个能让学生在课堂上当场跑通的3D环境,MiniWorld 依然是目前最合适的选择之一。