diff --git a/unilabos/resources/itemized_carrier.py b/unilabos/resources/itemized_carrier.py index 3b3454a..a5207d4 100644 --- a/unilabos/resources/itemized_carrier.py +++ b/unilabos/resources/itemized_carrier.py @@ -149,6 +149,7 @@ class ItemizedCarrier(ResourcePLR): if not reassign and self.sites[idx] is not None: raise ValueError(f"a site with index {idx} already exists") + location = list(self.child_locations.values())[idx] super().assign_child_resource(resource, location=location, reassign=reassign) self.sites[idx] = resource diff --git a/unilabos/resources/resource_tracker.py b/unilabos/resources/resource_tracker.py index a8d1e14..061ba86 100644 --- a/unilabos/resources/resource_tracker.py +++ b/unilabos/resources/resource_tracker.py @@ -14,9 +14,9 @@ if TYPE_CHECKING: class ResourceDictPositionSize(BaseModel): - depth: float = Field(description="Depth", default=0.0) - width: float = Field(description="Width", default=0.0) - height: float = Field(description="Height", default=0.0) + depth: float = Field(description="Depth", default=0.0) # z + width: float = Field(description="Width", default=0.0) # x + height: float = Field(description="Height", default=0.0) # y class ResourceDictPositionScale(BaseModel): @@ -469,9 +469,9 @@ class ResourceTreeSet(object): **res.config, "name": res.name, "type": res.config.get("type", plr_type), - "size_x": res.config.get("size_x", 0), - "size_y": res.config.get("size_y", 0), - "size_z": res.config.get("size_z", 0), + "size_x": res.pose.size.width, + "size_y": res.pose.size.height, + "size_z": res.pose.size.depth, "location": { "x": res.pose.position.x, "y": res.pose.position.y, diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 954a653..66a48c4 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -881,6 +881,13 @@ class BaseROS2DeviceNode(Node, Generic[T]): raise ValueError("tree_set不能为None") plr_resources = tree_set.to_plr_resources() result = _handle_add(plr_resources, tree_set, additional_add_params) + new_tree_set = ResourceTreeSet.from_plr_resources(plr_resources) + r = SerialCommand.Request() + r.command = json.dumps( + {"data": {"data": new_tree_set.dump()}, "action": "update"}) # 和Update Resource一致 + response: SerialCommand_Response = await self._resource_clients[ + "c2s_update_resource_tree"].call_async(r) # type: ignore + self.lab_logger().info(f"确认资源云端 Add 结果: {response.response}") results.append(result) elif action == "update": if tree_set is None: @@ -1758,6 +1765,7 @@ class ROS2DeviceNode: or driver_class.__name__ == "LiquidHandlerBiomek" or driver_class.__name__ == "PRCXI9300Handler" or driver_class.__name__ == "TransformXYZHandler" + or driver_class.__name__ == "OpcUaClient" ) # 创建设备类实例