diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index 3d5bd165..c217e509 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -266,7 +266,7 @@ class HostNode(BaseROS2DeviceNode): old_uuid = reverse_uuid_mapping.get(sub_node.res_content.uuid) if old_uuid: # 找到旧UUID,使用UUID查找 - resource_instance = device_tracker.figure_resource({"uuid": old_uuid}) + resource_instance = device_tracker.uuid_to_resources.get(old_uuid) else: # 未找到旧UUID,使用name查找 resource_instance = device_tracker.figure_resource( diff --git a/unilabos/ros/nodes/resource_tracker.py b/unilabos/ros/nodes/resource_tracker.py index 1ac233d2..9104eb57 100644 --- a/unilabos/ros/nodes/resource_tracker.py +++ b/unilabos/ros/nodes/resource_tracker.py @@ -868,8 +868,9 @@ class DeviceNodeResourceTracker(object): def process(res): current_uuid = self._get_resource_attr(res, "uuid", "unilabos_uuid") if current_uuid: + old = self.uuid_to_resources.get(current_uuid) self.uuid_to_resources[current_uuid] = res - logger.debug(f"收集资源UUID映射: {current_uuid} -> {res}") + logger.debug(f"收集资源UUID映射: {current_uuid} -> {res} {'' if old is None else f'(覆盖旧值: {old})'}") return 0 self._traverse_and_process(resource, process) @@ -907,13 +908,6 @@ class DeviceNodeResourceTracker(object): for r in self.resources: if id(r) == id(resource): return - if isinstance(resource, dict): - uid = resource.get("uuid", None) - else: - uid = getattr(resource, "unilabos_uuid", None) - if uid and uid in self.uuid_to_resources: - self.remove_resource(self.uuid_to_resources[uid]) - logger.warning(f"资源 UUID {uid} 已存在,覆盖为: {resource}") self.resources.append(resource) # 递归收集uuid映射 self._collect_uuid_mapping(resource)