零基础具身智能学习01: habitat导航仿真环境搭建和基础实践
内容来自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 四大特性
- 高保真渲染:支持 RGB、深度图、语义分割图,支持自定义传感器(相机、激光雷达、IMU)
- 高效场景加载:原生支持 GLB/GLTF 格式,兼容 Matterport3D、Gibson、Replica、HM3D 等主流数据集
- 轻量级物理模拟:刚体物理、关节运动,GPU 加速,单 GPU 可并行数千个仿真环境
- 跨平台:支持 Linux/Windows,兼容 CUDA,C++ 核心 + Python 绑定
Habitat-Lab 四大特性
- 预定义具身任务:导航类(PointGoalNav、ObjectNav、VLN)和交互类(Rearrange、PickPlace),支持自定义任务
- 标准化评估:内置 SR(成功率)、SPL(路径效率)、DTW(轨迹对齐)等指标
- 模块化架构:解耦「传感器 → 编码器 → 策略 → 控制器」流程,深度集成 PyTorch
- 简洁 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.py、habitat_random.py、habitat_mesh.py、habitat_pathfind.py(代码中直接引用场景路径) |
Sim 章节需要 |
| 2 | habitat_test_scenes |
3 个 GLB 场景(apartment_1、skokloster-castle、van-gogh-room)+ navmesh | habitatlab_test.py、habitatlab_example.py、habitat_rl.py(通过 YAML 配置间接引用,默认场景是 van-gogh-room.glb) |
Lab 章节需要 |
| 3 | habitat_test_pointnav_dataset |
PointNav 导航 episode 数据(起点/终点坐标对) | habitatlab_test.py、habitatlab_example.py、habitat_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 是配置驱动。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)