Habitat-Lab
Habitat-Lab 是一个模块化的高层库,用于在实体人工智能(AI)中进行端到端开发。它旨在训练代理在室内环境中执行各种实体AI任务,并开发能够与人类互动以完成这些任务的代理。
为了实现这个目标,Habitat-Lab设计了以下功能:
- 灵活的任务定义: 允许用户在各种单一和多代理任务(如导航、重组、指令执行、问答、跟随人类)中训练代理,并定义新的任务。
- 多样化的实体代理: 配置和实例化一组多样化的实体代理,包括商业机器人和仿生人,指定其传感器和能力。
- 训练和评估代理: 提供单代理和多代理训练算法(通过模仿学习或强化学习,也可以不使用学习,如在SensePlanAct流水线中),以及使用标准指标工具来评估其在定义任务上的表现。
- 人机互动: 提供一个框架让人类与模拟器互动,从而收集实体数据或与训练好的代理互动。
Habitat-Lab 使用 Habitat-Sim
作为核心模拟器。有关文档,请参考这里。
目录
引用 Habitat
如果你在研究中使用了 Habitat 平台,请引用 Habitat 1.0、Habitat 2.0和Habitat 3.0 论文:
@misc{puig2023habitat3,
title = {Habitat 3.0: A Co-Habitat for Humans, Avatars and Robots},
author = {Xavi Puig and Eric Undersander and Andrew Szot and Mikael Dallaire Cote and Ruslan Partsey and Jimmy Yang and Ruta Desai and Alexander William Clegg and Michal Hlavac and Tiffany Min and Theo Gervet and Vladimír Vondruš and Vincent-Pierre Berges and John Turner and Oleksandr Maksymets and Zsolt Kira and Mrinal Kalakrishnan and Jitendra Malik and Devendra Singh Chaplot and Unnat Jain and Dhruv Batra and Akshara Rai and Roozbeh Mottaghi},
year={2023},
archivePrefix={arXiv},
}
@inproceedings{szot2021habitat,
title = {Habitat 2.0: Training Home Assistants to Rearrange their Habitat},
author = {Andrew Szot and Alex Clegg and Eric Undersander and Erik Wijmans and Yili Zhao and John Turner and Noah Maestre and Mustafa Mukadam and Devendra Chaplot and Oleksandr Maksymets and Aaron Gokaslan and Vladimir Vondrus and Sameer Dharur and Franziska Meier and Wojciech Galuba and Angel Chang and Zsolt Kira and Vladlen Koltun and Jitendra Malik and Manolis Savva and Dhruv Batra},
booktitle = {Advances in Neural Information Processing Systems (NeurIPS)},
year = {2021}
}
@inproceedings{habitat19iccv,
title = {Habitat: {A} {P}latform for {E}mbodied {AI} {R}esearch},
author = {Manolis Savva and Abhishek Kadian and Oleksandr Maksymets and Yili Zhao and Erik Wijmans and Bhavana Jain and Julian Straub and Jia Liu and Vladlen Koltun and Jitendra Malik and Devi Parikh and Dhruv Batra},
booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
year = {2019}
}
安装
-
准备 conda 环境
假设你已经安装了 conda,让我们准备一个 conda 环境:
# 我们需要 python>=3.9 和 cmake>=3.14 conda create -n habitat python=3.9 cmake=3.14.0 conda activate habitat
-
conda 安装 habitat-sim
- 安装带有子弹物理引擎的 habitat-sim
注意,对于最近发布之后添加的新功能,你可能需要安装conda install habitat-sim withbullet -c conda-forge -c aihabitat
aihabitat-nightly
。有关更多详情,请参阅 Habitat-Sim 的安装说明。
- 安装带有子弹物理引擎的 habitat-sim
-
pip 安装稳定版 habitat-lab:
git clone --branch stable https://github.com/facebookresearch/habitat-lab.git cd habitat-lab pip install -e habitat-lab # 安装 habitat_lab
-
安装 habitat-baselines。
上面的命令只会安装 Habitat-Lab 的核心。要包含 habitat_baselines 及其所有附加要求,请在安装 habitat-lab 之后使用以下命令:
pip install -e habitat-baselines # 安装 habitat_baselines
测试
-
让我们使用 Habitat-Sim 的 python 数据下载工具下载一些 3D 资源:
-
下载(测试用)3D 场景:
python -m habitat_sim.utils.datasets_download --uids habitat_test_scenes --data-path data/
请注意,这些测试场景不提供语义标注。
-
下载测试场景的点目标导航事件:
python -m habitat_sim.utils.datasets_download --uids habitat_test_pointnav_dataset --data-path data/
-
-
非交互测试:测试 Pick 任务:运行示例 pick 任务脚本
python examples/example.py
该脚本使用
habitat-lab/habitat/config/benchmark/rearrange/skills/pick.yaml
进行任务和代理配置。脚本大致如下:import gym import habitat.gym # 加载具身 AI 任务 (RearrangePick) 和预先指定的虚拟机器人 env = gym.make("HabitatRenderPick-v0") observations = env.reset() terminal = False # 使用随机动作在环境中逐步进行 while not terminal: observations, reward, terminal, info = env.step(env.action_space.sample())
要修改环境的一些配置,您还可以使用
habitat.gym.make_gym_from_config
方法,它允许您使用配置创建一个 habitat 环境。config = habitat.get_config( "benchmark/rearrange/skills/pick.yaml", overrides=["habitat.environment.max_episode_steps=20"] ) env = habitat.gym.make_gym_from_config(config)
若想了解更多有关不同配置键覆盖的作用,可以参考此文档。
查看
examples/register_new_sensors_and_measures.py
了解如何从源代码外部扩展 habitat-lab 的示例。 -
交互测试:使用键盘和鼠标在 ReplicaCAD 环境中控制 Fetch 机器人:
# 用于交互式可视化的 Pygame 和用于逆运动学的 Pybullet pip install pygame==2.0.1 pybullet==3.0.4 # 交互式游戏脚本 python examples/interactive_play.py --never-end
使用 I/J/K/L 键移动机器人底盘前/左/后/右,以及 W/A/S/D 键移动机械臂末端执行器前/左/后/右,E/Q 键移动机械臂上/下。通过末端执行器控制机械臂可能会比较困难。更多细节见文档。尝试移动底盘和机械臂以触碰桌子上的红碗。玩的开心!
注意:交互测试目前在 Ubuntu 20.04 上失败,错误:
X Error of failed request: BadAccess (attempt to access private resource denied)
。我们正在修复这个问题,并将在修复后更新操作指南。该脚本在 MacOS 上运行无误。
调试环境问题
我们的向量化环境速度很快,但不太详细。当使用 VectorEnv
时,有些错误可能会被静默,导致进程挂起或难以解释的多处理错误。我们建议在调试时设置环境变量 HABITAT_ENV_DEBUG
为 1(export HABITAT_ENV_DEBUG=1
),因为这将使用较慢但更详细的 ThreadedVectorEnv
类。完成调试后不要忘记重置 HABITAT_ENV_DEBUG
(unset HABITAT_ENV_DEBUG
),因为 VectorEnv
比 ThreadedVectorEnv
快多了。
文档
浏览在线 Habitat-Lab 文档和详细的如何训练代理的教程。对于 Habitat 2.0,请参考本速成指南。
Docker 设置
我们为 Habitat 提供了 docker 容器,大约每年为 Habitat 挑战 更新一次。这在带有 NVIDIA GPU 的机器上运行,并要求用户安装 nvidia-docker。要使用 docker 设置 habitat 堆栈,请按以下步骤进行:
-
拉取 habitat docker 镜像:
docker pull fairembodied/habitat-challenge:testing_2022_habitat_base_docker
-
在 habitat docker 内启动交互式 bash 会话:
docker run --runtime=nvidia -it fairembodied/habitat-challenge:testing_2022_habitat_base_docker
-
激活 habitat conda 环境:
conda init; source ~/.bashrc; source activate habitat
-
按上述运行测试脚本:
cd habitat-lab; python examples/example.py
。输出应类似:Agent acting inside environment. Episode finished after 200 steps.
有问题?
找不到问题的答案?查看常见问题或尝试在我们的讨论论坛与开发者和社区交流。
数据集
基线
Habitat-Lab 包括基于强化学习(通过 PPO)的基线。有关运行 PPO 训练样本数据和更多详情,请参考habitat_baselines/README.md。
ROS-X-Habitat
ROS-X-Habitat (https://github.com/ericchen321/ros_x_habitat) 是一个在 ROS 中桥接 AI Habitat 平台(Habitat Lab + Habitat Sim)与其他机器人资源的框架。与 Habitat-PyRobot 相比,ROS-X-Habitat 重视 1) 利用 Habitat Sim v2 的基于物理模拟能力和 2) 允许机器人学家从 ROS 访问模拟资产。这项工作也以论文的形式公开。
注意,ROS-X-Habitat 由 UBC 的计算智能实验室开发和维护;尚未正式由 Habitat Lab 团队支持。请参阅框架的存储库了解文档和讨论。
许可证
Habitat-Lab 采用 MIT 许可证。详情参见许可证文件。
训练模型和任务数据集被视为从相应场景数据集中派生的数据。
- 基于 Matterport3D 的任务数据集和训练模型根据 Matterport3D 使用条款 分发,并根据 CC BY-NC-SA 3.0 US 许可证 分发。
- 基于 Gibson 的任务数据集、生成这些数据集的代码及训练模型根据 Gibson 使用条款 分发,并根据 CC BY-NC-SA 3.0 US 许可证 分发。