Habitat-Object Navigation入门教程
任务介绍
本文介绍的是2021 年 Habitat 挑战赛中的Object Navigation任务,即Object Goal Navigation任务的MP3D数据集相关使用入门材料。
本人在学习过程中发现官方教程、现有材料都比较零散,不利于入门者学习,故此整理了本文,如有错误欢迎指出~
运行逻辑
1. 顶层调用
调用habitat的核心部分,功能包括:agent智能体创建(以TempAgent为例)、模拟环境创建(根据配置文件config)、评估[1]
import habitat
import TempAgent
config = {}
def main():
agent = TempAgent(task_config=config)
challenge = habitat.Challenge()
challenge.submit(agent)
2. 智能体agent
实现算法的核心部分,通过重写habitat.Agent对算法进行实现,必须包含以下三个方法实现:
- init:Agent初始化
- reset:每轮episode调用的清空方法
- act:每个step中得到observation之后给出的动作方法
示例智能体的实现TempAgent如下:
class TempAgent(habitat.Agent):
def __init__(self, task_config: DictConfig):
self._task_config = task_config
def reset(self):
pass
def act(self, observations):
return {
'action': 1
}
值得注意的是,我们替换了habitat-challenge github代码[1]的act连续动作示例为离散动作,以简单理解并与实际使用更符合
3. 动作aciton
/habitat-lab/habitat/sims/habitat_simulator/actions.py中定义了默认的动作 [2],结合agent中的act {’action’: 0/1/2/3/4/5/6}使用:
class _DefaultHabitatSimActions(Enum):
STOP = 0
MOVE_FORWARD = 1
TURN_LEFT = 2
TURN_RIGHT = 3
LOOK_UP = 4
LOOK_DOWN = 5
TURN_RIGHT_2 = 6
0-5动作非常好理解,看名字就知道,动作具体的数值(例如前进步数、旋转角度等等)通过配置进行设置。
其中,6动作为旋转60°自定义动作:“self.agent_config.action_space[6] = ActionSpec(“turn_right”, ActuationSpec(amount=60.0))”
以下是相关动作的默认配置:
- 水平旋转角度:TURN_ANGLE = 10
- 垂直旋转角度:TILT_ANGLE = 15
- 前进距离:FORWARD_STEP_SIZE = 0.25 (meters)
4. 配置config
在第一部分顶层调用的habitat.get_config在…/habitat-challenge/habitatlab/habitat/config/default.py中定义。该文件中定义了:
- get_config()方法
- 所有配置变量的默认值
可以通过变量的定义进行配置文件的编写,以下是配置文件yaml示例供参考[3],可以通过配置文件的结构与default.py中的变量定义找到他们的对应关系:
ENVIRONMENT:
MAX_EPISODE_STEPS: 500
ITERATOR_OPTIONS:
SHUFFLE: False
SIMULATOR:
TURN_ANGLE: 30
TILT_ANGLE: 30
ACTION_SPACE_CONFIG: "v1"
AGENT_0:
SENSORS: ['RGB_SENSOR', 'DEPTH_SENSOR']
HEIGHT: 0.88
RADIUS: 0.18
HABITAT_SIM_V0:
GPU_DEVICE_ID: 0
ALLOW_SLIDING: False
SEMANTIC_SENSOR:
WIDTH: 640
HEIGHT: 480
HFOV: 79
POSITION: [0, 0.88, 0]
RGB_SENSOR:
WIDTH: 640
HEIGHT: 480
HFOV: 79
POSITION: [0, 0.88, 0]
DEPTH_SENSOR:
WIDTH: 640
HEIGHT: 480
HFOV: 79
NORMALIZE_DEPTH: False
MIN_DEPTH: 0.5
MAX_DEPTH: 5.0
POSITION: [0, 0.88, 0]
TASK:
TYPE: ObjectNav-v1
POSSIBLE_ACTIONS: ["STOP", "MOVE_FORWARD", "TURN_LEFT", "TURN_RIGHT", "LOOK_UP", "LOOK_DOWN", "TURN_RIGHT_2"]
SUCCESS_DISTANCE: 0.2
SENSORS: ['OBJECTGOAL_SENSOR', 'COMPASS_SENSOR', 'GPS_SENSOR']
GOAL_SENSOR_UUID: objectgoal
MEASUREMENTS: ['DISTANCE_TO_GOAL', 'SUCCESS', 'SPL', 'SOFT_SPL']
DISTANCE_TO_GOAL:
DISTANCE_TO: VIEW_POINTS
SUCCESS:
SUCCESS_DISTANCE: 0.2
DATASET:
TYPE: ObjectNav-v1
SPLIT: val
DATA_PATH: /home/embodied/SG/data/MatterPort3D/objectnav/mp3d/v1/{split}/{split}.json.gz
SCENES_DIR: /home/embodied/SG/data/MatterPort3D/
参考资料
- habitat-challenge GitHub源码:https://github.com/facebookresearch/habitat-challenge/tree/main
- habitat-challenge (2022) 环境使用学习:https://blog.csdn.net/l963852k/article/details/136489287
- 开源项目NIPS2024-SGNav:https://github.com/bagh2178/SG-Nav