内容来自Datawhale社区教程every-bodied整理

目标:一次性完成 Habitat-Sim 和 Habitat-Lab 的安装,下载测试数据集,并验证环境可用。

一、硬件与环境要求

面向在自己的笔记本或台式机上学习:

类别 要求 我的环境
操作系统 Linux(Ubuntu 20.04+)或 WSL2 Ubuntu 22.04
GPU 有更好,没有也能跑(见下方说明) NVIDIA 5070Ti
内存 8 GB 以上(推荐 16 GB) 32 GB
磁盘 约 1.5 ~ 2 GB(见下方明细) 200 GB
Python 3.9 3.9
包管理 Conda(建议额外装 Mamba,速度更快) Conda + Mamba

没有 GPU 能跑吗?

能跑。 Habitat-Sim 支持纯 CPU 渲染,安装命令完全一样,不需要改任何东西。区别在于:

有 GPU 没有 GPU
教程里的脚本 正常运行 正常运行(都能跑通)
渲染速度 慢一些(但学习够用)
大规模并行训练 几千个环境同时跑 性能不够

简单说:学习阶段没有 GPU 完全没问题,教程里所有脚本(生成图片、路径规划、自动导航等)都不依赖 GPU 加速。只有后续做大规模 RL 训练时才真正需要 GPU。

磁盘空间明细

整套环境搭完大概占 1.5 ~ 2 GB,不算大:

内容 大小 说明
habitat-sim(conda/mamba 安装) ~500 MB 包管理器自动下载,不需要 clone 源码
habitat-lab 源码仓库(git clone) ~100-200 MB 源码 + git 历史
mp3d_example_scene(Sim 教程数据) ~93 MB 1 个 MP3D 场景 + 语义标注
habitat_test_scenes(Lab 教程数据) ~211 MB 3 个 GLB 场景 + navmesh
habitat_test_pointnav_dataset(Lab 教程数据) < 1 MB 导航 episode 的 JSON 数据
合计 约 1.5 ~ 2 GB

以下所有步骤均在上述环境下实际跑通。

二、Habitat 平台简介

Habitat 是 Meta AI 开源的具身智能仿真平台,专为室内场景下的智能体导航、交互、决策等研究设计。

为什么要学它? 因为你想训练一个会走路、会找东西的 AI 机器人,总不能直接拿真机器人去撞墙吧?Habitat 就是让机器人在"虚拟房间"里练习的训练场,也是目前具身导航领域最主流的仿真平台——绝大多数 PointNav、ObjectNav、VLN 论文都在 Habitat 上跑实验。

Habitat 由两个互补组件构成:

组件 定位 核心能力
Habitat-Sim 仿真引擎(底层) 高保真渲染、物理模拟、传感器仿真、高效场景加载
Habitat-Lab 算法框架(上层) 任务定义、YAML 配置、标准化评估、RL/IL 训练

跟 NVIDIA Isaac Sim/Lab 的区别

你可能听说过 NVIDIA 的 Isaac 也有 Sim/Lab 的分层,名字很像,但定位完全不同

对比项 Habitat(Meta) Isaac(NVIDIA)
一句话定位 室内导航研究(练走路找东西) 机器人操控 + 工业仿真(练抓取装配)
Sim 层 轻量渲染,追求速度 基于 Omniverse,重量级物理渲染
Lab 层 导航任务框架(PointNav / VLN) 机器人控制框架(RL 训练关节控制)
物理引擎 Bullet(轻量够用) PhysX 5(NVIDIA 自研,精度高)
偏向 学术研究(论文导向) 工业落地(产品导向)

打个比方:Habitat 是给机器人修的"虚拟样板房"——练走路找东西;Isaac 是给机器人修的"虚拟工厂"——练抓东西装零件。

两者的设计思路一样:底层 Sim 管物理渲染,上层 Lab 管任务训练。理解了一个,另一个也能快速上手。我们这章学 Habitat,因为后续要做 VLN(视觉语言导航)研究,这正是 Habitat 最擅长的领域。

Habitat-Sim 四大特性

  1. 高保真渲染:支持 RGB、深度图、语义分割图,支持自定义传感器(相机、激光雷达、IMU)
  2. 高效场景加载:原生支持 GLB/GLTF 格式,兼容 Matterport3D、Gibson、Replica、HM3D 等主流数据集
  3. 轻量级物理模拟:刚体物理、关节运动,GPU 加速,单 GPU 可并行数千个仿真环境
  4. 跨平台:支持 Linux/Windows,兼容 CUDA,C++ 核心 + Python 绑定

Habitat-Lab 四大特性

  1. 预定义具身任务:导航类(PointGoalNav、ObjectNav、VLN)和交互类(Rearrange、PickPlace),支持自定义任务
  2. 标准化评估:内置 SR(成功率)、SPL(路径效率)、DTW(轨迹对齐)等指标
  3. 模块化架构:解耦「传感器 → 编码器 → 策略 → 控制器」流程,深度集成 PyTorch
  4. 简洁 API:Python 接口一键加载场景、初始化智能体、运行仿真循环

三、创建 Conda 环境

在 Ubuntu 22.04 下操作

conda create -n habitat python=3.9 cmake=3.14.0
conda activate habitat

建议安装 mamba:我在安装过程中发现 conda install 解析依赖非常慢(卡在 Solving environment 好几分钟甚至十几分钟),换成 mamba 之后速度快了很多。后面的安装命令我都用 mamba 来跑的。

# 先装 mamba(只需装一次)
conda install mamba -c conda-forge
# 之后所有 conda install 都可以替换成 mamba install,用法完全一样

四、安装 Habitat-Sim

本教程以 0.2.5 版本为基准。其他版本可能出现函数调用或数据集不匹配的问题。

# 推荐用 mamba,比 conda 快很多
mamba install habitat-sim=0.2.5 withbullet -c conda-forge -c aihabitat

# 如果没装 mamba,用 conda 也行(就是慢)
# conda install habitat-sim=0.2.5 withbullet -c conda-forge -c aihabitat

远程服务器没有显示器,需要加 headless 参数。headless(无头模式)就是让 Habitat 不依赖显示器,所有渲染在后台完成,结果保存成图片/视频文件。在自己笔记本/台式机上学习不需要加这个参数。

mamba install habitat-sim=0.2.5 withbullet headless -c conda-forge -c aihabitat

五、安装 Habitat-Lab

与 Habitat-Sim 不同,Habitat-Lab 需要 clone 源码仓库后以开发模式安装。版本需要与 Habitat-Sim 保持一致(都用 0.2.5)。

# 下载 Habitat-Lab 源码(注意 branch 版本号(tag)要与 Sim 一致)
git clone --branch v0.2.5 https://github.com/facebookresearch/habitat-lab.git
cd habitat-lab

# 安装核心库
pip install -e habitat-lab

# 安装 baselines(RL/IL 训练所需)
pip install -e habitat-baselines

两者安装方式完全不同

组件 安装方式 本地是否有源码
Habitat-Sim conda install(包管理器安装) 没有源码,只有编译好的包
Habitat-Lab git clone + pip install -e(源码安装) 有完整源码

教程脚本一览

所有代码位于 code/ 目录下。

Habitat-Sim 脚本(直接调用仿真器 API,不需要 Habitat-Lab):

脚本 一句话说明 做了什么 对应章节
habitat_test.py Sim 的 Hello World 加载 MP3D 场景,挂一个 RGB 相机,执行 4 个动作(右转→右转→前进→左转),保存每步的观测图片 入门
habitat_random.py 多传感器 + 自定义动作 同时配置 RGB / Depth / Semantic 三个传感器,自定义前进步长和转弯角度,随机执行 5 个动作并保存三通道观测图 入门
habitat_mesh.py 导航网格可视化 生成场景的俯视导航图(NavMesh),对比内置 API 和自定义函数两种生成方式 进阶
habitat_pathfind.py 最短路径规划 随机采样两个可导航点,用 ShortestPath API 规划路径,在俯视图上画出路径和智能体,并沿路径渲染每个位置的第一人称 RGB+Depth+Semantic 观测 进阶

Habitat-Lab 脚本(通过 YAML 配置驱动,内部封装 Sim):

脚本 一句话说明 做了什么 对应章节
habitatlab_test.py 键盘手动导航 加载 YAML 配置创建 PointNav 环境,用键盘 WASD 控制智能体移动,终端实时显示到目标的距离和方向 入门
habitatlab_example.py 全自动最短路径导航 用 ShortestPathFollowerAgent 自动计算最短路径完成导航,配置俯视图 + 碰撞检测等测量项,生成包含 RGB-D 观测和量化指标的导航视频 入门
habitat_rl.py RL 框架导航 habitat.RLEnv 封装 Gym 风格接口(step 返回 observations, reward, done, info),跑 3 个 episode 的自动导航并生成轨迹图 进阶

脚本之间的递进关系:

habitat_test.py          最基础:1 个传感器、4 个动作
       ↓ 扩展传感器和动作
habitat_random.py        3 个传感器、自定义动作空间
       ↓ 加入导航能力
habitat_mesh.py          生成导航网格俯视图
       ↓ 加入路径规划
habitat_pathfind.py      最短路径规划 + 全流程可视化
       ↓ 从 Sim 跨越到 Lab
habitatlab_test.py       YAML 配置驱动、手动控制
       ↓ 自动化
habitatlab_example.py    Agent 接口、全自动导航
       ↓ 接入 RL 框架
habitat_rl.py            Gym 风格接口、可对接 RL 算法

六、下载测试数据

教程中涉及 4 个数据集,但不是都必须下载

# 数据集 UID 下载内容 被哪些脚本使用 必须?
1 mp3d_example_scene 1 个 MP3D 场景 + 语义标注 + JSON 配置 habitat_test.pyhabitat_random.pyhabitat_mesh.pyhabitat_pathfind.py(代码中直接引用场景路径) Sim 章节需要
2 habitat_test_scenes 3 个 GLB 场景(apartment_1、skokloster-castle、van-gogh-room)+ navmesh habitatlab_test.pyhabitatlab_example.pyhabitat_rl.py(通过 YAML 配置间接引用,默认场景是 van-gogh-room.glb Lab 章节需要
3 habitat_test_pointnav_dataset PointNav 导航 episode 数据(起点/终点坐标对) habitatlab_test.pyhabitatlab_example.pyhabitat_rl.py(YAML 配置引用,定义每个 episode 的起点和目标点) Lab 章节需要
4 habitat_example_objects 示例 3D 物体(用于物理交互) 教程中没有脚本使用 可不下载

下载命令

# ---- Sim 章节所需(必装)----
# MP3D 示例场景:含语义标注,供 habitat_test.py 等 4 个 Sim 脚本使用
python -m habitat_sim.utils.datasets_download --uids mp3d_example_scene --data-path data/

# ---- Lab 章节所需(学到 04 章节时再装即可)----
# 3D 测试场景:Lab 默认 YAML 配置引用的场景文件
python -m habitat_sim.utils.datasets_download --uids habitat_test_scenes --data-path data/

# PointNav 导航数据:定义每个 episode 的起点和目标点
python -m habitat_sim.utils.datasets_download --uids habitat_test_pointnav_dataset --data-path data/

# ---- 可选(教程未使用,我没下)----
# python -m habitat_sim.utils.datasets_download --uids habitat_example_objects --data-path data/

七、验证安装

验证分两步,逐层进行——先验底层 Sim,再验上层 Lab:

脚本 验证目标 依赖 核心调用
habitat_test.py Habitat-Sim 只需要 habitat_sim habitat_sim.Simulator(),直接操作仿真器
habitatlab_test.py Habitat-Lab 需要 habitat_sim + habitat-lab habitat.get_config() + habitat.Env(),通过 YAML 配置驱动
第一步:python habitat_test.py      ← Sim 能跑,说明渲染/传感器/场景加载没问题
                 ↓ 通过
第二步:python habitatlab_test.py    ← Lab 能跑,说明 YAML 配置/任务/数据集也没问题

为什么要先验 Sim 再验 Lab? 因为 Lab 底层依赖 Sim,如果第二步报错,先确认第一步是否通过,可以快速定位问题出在哪一层。

验证 Habitat-Sim(habitat_test.py)

cd code/
python habitat_test.py
# 预期输出:生成 observation_0.png ~ observation_3.png

生成了 4 张 RGB 观测图片,能看到 MP3D 室内场景的不同视角。看到图片就说明 Sim 没问题了。

# (可选)有显示器时也可使用 viewer 交互式浏览场景
habitat-viewer data/scene_datasets/habitat-test-scenes/skokloster-castle.glb

验证 Habitat-Lab(habitatlab_test.py)

cd code/
python habitatlab_test.py
# 预期输出:弹出窗口显示 RGB 画面,键盘 WASD 控制智能体,终端打印 GPS/指南针数据

弹出了一个 OpenCV 窗口显示第一人称视角,终端打印目标距离和方向角。按 W 前进、A/D 转向、F 停止。能正常交互就说明 Lab 没问题了。

跑完两个脚本

Sim 和 Lab 虽然都能完成导航,但操作方式完全不同:

habitat_test.py (Sim)               habitatlab_test.py (Lab)
─────────────────────               ─────────────────────────
手动写 Python 代码拼装配置             写个 YAML 文件自动加载配置
sim.step("move_forward")            env.step(action_id)
只能拿到 RGB/Depth 原始图像           额外还有 GPS、指南针等导航信息

简单说:Sim 是手动拼装,Lab 是配置驱动

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐