完善项目目录结构

This commit is contained in:
2026-02-03 16:24:15 +08:00
parent 21c046aef0
commit 03dee0205a
27 changed files with 558 additions and 568 deletions

View File

@@ -100,33 +100,13 @@ class MultiAgentScenarioEnv(ScenarioEnv):
for scenario_id in _obj_to_clean_this_frame:
self.engine.traffic_manager.current_traffic_data.pop(scenario_id)
# Fix: Ensure all objects are cleared properly before reset
# Instead of manually clearing, we just let the engine handle it, but we might need to
# ensure no stale references in managers.
# The error "KeyError" in clear_objects usually means we are trying to clear an object
# that is already gone from _spawned_objects but still tracked by a manager.
# Try to clear only objects that actually exist in the engine
# existing_objects = list(self.engine.get_objects().keys())
# if existing_objects:
# self.engine.clear_objects(existing_objects)
# Force clear agent manager's spawned objects to avoid stale references
if hasattr(self.engine, 'agent_manager') and self.engine.agent_manager:
# Check if it's ScenarioAgentManager or VehicleAgentManager
# ScenarioAgentManager might not have spawned_objects directly exposed or named differently
# But BaseAgentManager usually has it.
# If it's ScenarioAgentManager, it might be using a different structure.
# Safe clear for BaseAgentManager subclasses
if hasattr(self.engine.agent_manager, 'spawned_objects'):
self.engine.agent_manager.spawned_objects.clear()
# Also clear active_objects if present (VehicleAgentManager uses this)
if hasattr(self.engine.agent_manager, '_active_objects'):
self.engine.agent_manager._active_objects.clear()
# Clear vehicles we spawned via engine.spawn_object() so _object_clean_check() passes
ids_to_clear = [v.id for v in self.controlled_agents.values()]
if ids_to_clear:
self.engine.clear_objects(ids_to_clear)
self.controlled_agents.clear()
self.controlled_agent_ids.clear()
self.engine.reset()
self.reset_sensors()
self.engine.taskMgr.step()
@@ -141,9 +121,6 @@ class MultiAgentScenarioEnv(ScenarioEnv):
self.episode_rewards = defaultdict(float)
self.episode_lengths = defaultdict(int)
self.controlled_agents.clear()
self.controlled_agent_ids.clear()
super().reset(seed) # 初始化场景
self._spawn_controlled_agents()
@@ -217,6 +194,7 @@ class MultiAgentScenarioEnv(ScenarioEnv):
self.controlled_agents[agent_id].before_step(action)
self.engine.step()
self.engine.after_step()
for agent_id in action_dict:
if agent_id in self.controlled_agents: