|
4 | 4 | # This source code is licensed under the MIT license found in the
|
5 | 5 | # LICENSE file in the root directory of this source tree.
|
6 | 6 |
|
7 |
| -import os |
8 |
| -import os.path as osp |
9 | 7 | import time
|
10 | 8 | from collections import defaultdict
|
11 | 9 | from typing import (
|
@@ -373,7 +371,7 @@ def reconfigure(self, config: "DictConfig", ep_info: RearrangeEpisode):
|
373 | 371 | }
|
374 | 372 |
|
375 | 373 | if new_scene:
|
376 |
| - self._load_navmesh(ep_info) |
| 374 | + self._recompute_navmesh() |
377 | 375 |
|
378 | 376 | # Get the starting positions of the target objects.
|
379 | 377 | scene_pos = self.get_scene_pos()
|
@@ -476,37 +474,29 @@ def _setup_targets(self, ep_info: RearrangeEpisode):
|
476 | 474 | )
|
477 | 475 |
|
478 | 476 | @add_perf_timing_func()
|
479 |
| - def _load_navmesh(self, ep_info: RearrangeEpisode): |
480 |
| - scene_name = ep_info.scene_id.split("/")[-1].split(".")[0] |
481 |
| - base_dir = osp.join(*ep_info.scene_id.split("/")[:2]) |
| 477 | + def _recompute_navmesh(self) -> None: |
| 478 | + """ |
| 479 | + Recompute the navmesh including STATIC objects and using agent parameters. |
| 480 | + """ |
482 | 481 |
|
483 |
| - navmesh_path = osp.join(base_dir, "navmeshes", scene_name + ".navmesh") |
| 482 | + navmesh_settings = NavMeshSettings() |
| 483 | + navmesh_settings.set_defaults() |
484 | 484 |
|
485 |
| - if osp.exists(navmesh_path): |
486 |
| - self.pathfinder.load_nav_mesh(navmesh_path) |
487 |
| - logger.info(f"Loaded navmesh from {navmesh_path}") |
| 485 | + agent_config = None |
| 486 | + if hasattr(self.habitat_config.agents, "agent_0"): |
| 487 | + agent_config = self.habitat_config.agents.agent_0 |
| 488 | + elif hasattr(self.habitat_config.agents, "main_agent"): |
| 489 | + agent_config = self.habitat_config.agents.main_agent |
488 | 490 | else:
|
489 |
| - logger.warning( |
490 |
| - f"Requested navmesh to load from {navmesh_path} does not exist. Recomputing from configured values and caching." |
491 |
| - ) |
492 |
| - navmesh_settings = NavMeshSettings() |
493 |
| - navmesh_settings.set_defaults() |
494 |
| - |
495 |
| - agent_config = None |
496 |
| - if hasattr(self.habitat_config.agents, "agent_0"): |
497 |
| - agent_config = self.habitat_config.agents.agent_0 |
498 |
| - elif hasattr(self.habitat_config.agents, "main_agent"): |
499 |
| - agent_config = self.habitat_config.agents.main_agent |
500 |
| - else: |
501 |
| - raise ValueError("Cannot find agent parameters.") |
502 |
| - navmesh_settings.agent_radius = agent_config.radius |
503 |
| - navmesh_settings.agent_height = agent_config.height |
504 |
| - navmesh_settings.agent_max_climb = agent_config.max_climb |
505 |
| - navmesh_settings.agent_max_slope = agent_config.max_slope |
506 |
| - navmesh_settings.include_static_objects = True |
507 |
| - self.recompute_navmesh(self.pathfinder, navmesh_settings) |
508 |
| - os.makedirs(osp.dirname(navmesh_path), exist_ok=True) |
509 |
| - self.pathfinder.save_nav_mesh(navmesh_path) |
| 491 | + raise ValueError("Cannot find agent parameters.") |
| 492 | + navmesh_settings.agent_radius = agent_config.radius |
| 493 | + navmesh_settings.agent_height = agent_config.height |
| 494 | + navmesh_settings.agent_max_climb = agent_config.max_climb |
| 495 | + navmesh_settings.agent_max_slope = agent_config.max_slope |
| 496 | + navmesh_settings.include_static_objects = True |
| 497 | + |
| 498 | + # recompute the navmesh |
| 499 | + self.recompute_navmesh(self.pathfinder, navmesh_settings) |
510 | 500 |
|
511 | 501 | # NOTE: allowing indoor islands only
|
512 | 502 | self._largest_indoor_island_idx = get_largest_island_index(
|
|
0 commit comments