From ee609e4aa28ce778c78d7b60322fdf6696e200eb Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Tue, 2 Dec 2025 11:17:25 +0800 Subject: [PATCH] Fix startup with remote resource error --- unilabos/resources/graphio.py | 8 ++++++-- unilabos/ros/nodes/resource_tracker.py | 10 ++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/unilabos/resources/graphio.py b/unilabos/resources/graphio.py index 7dc8fe11..4915668f 100644 --- a/unilabos/resources/graphio.py +++ b/unilabos/resources/graphio.py @@ -45,10 +45,13 @@ def canonicalize_nodes_data( print_status(f"{len(nodes)} Resources loaded:", "info") # 第一步:基本预处理(处理graphml的label字段) - for node in nodes: + outer_host_node_id = None + for idx, node in enumerate(nodes): if node.get("label") is not None: node_id = node.pop("label") node["id"] = node["name"] = node_id + if node["id"] == "host_node": + outer_host_node_id = idx if not isinstance(node.get("config"), dict): node["config"] = {} if not node.get("type"): @@ -76,7 +79,8 @@ def canonicalize_nodes_data( if k not in ["id", "uuid", "name", "description", "schema", "model", "icon", "parent_uuid", "parent", "type", "class", "position", "config", "data", "children", "pose"]: v = node.pop(k) node["config"][k] = v - + if outer_host_node_id is not None: + nodes.pop(outer_host_node_id) # 第二步:处理parent_relation id2idx = {node["id"]: idx for idx, node in enumerate(nodes)} for parent, children in parent_relation.items(): diff --git a/unilabos/ros/nodes/resource_tracker.py b/unilabos/ros/nodes/resource_tracker.py index f306597e..c9dc57f9 100644 --- a/unilabos/ros/nodes/resource_tracker.py +++ b/unilabos/ros/nodes/resource_tracker.py @@ -1,9 +1,11 @@ +import inspect import traceback import uuid from pydantic import BaseModel, field_serializer, field_validator from pydantic import Field from typing import List, Tuple, Any, Dict, Literal, Optional, cast, TYPE_CHECKING, Union +from unilabos.resources.plr_additional_res_reg import register from unilabos.utils.log import logger if TYPE_CHECKING: @@ -429,9 +431,9 @@ class ResourceTreeSet(object): Returns: List[PLRResource]: PLR 资源实例列表 """ + register() from pylabrobot.resources import Resource as PLRResource from pylabrobot.utils.object_parsing import find_subclass - import inspect # 类型映射 TYPE_MAP = {"plate": "Plate", "well": "Well", "deck": "Deck", "container": "RegularContainer"} @@ -459,9 +461,9 @@ class ResourceTreeSet(object): "size_y": res.config.get("size_y", 0), "size_z": res.config.get("size_z", 0), "location": { - "x": res.position.position.x, - "y": res.position.position.y, - "z": res.position.position.z, + "x": res.pose.position.x, + "y": res.pose.position.y, + "z": res.pose.position.z, "type": "Coordinate", }, "rotation": {"x": 0, "y": 0, "z": 0, "type": "Rotation"},