result_info改为字典类型

This commit is contained in:
Xuwznln
2025-09-11 16:24:53 +08:00
parent 58d1cc4720
commit 513e848d89
7 changed files with 38 additions and 17 deletions

View File

@@ -53,7 +53,7 @@ from unilabos.ros.x.rclpyx import get_event_loop
from unilabos.ros.utils.driver_creator import ProtocolNodeCreator, PyLabRobotCreator, DeviceClassCreator
from unilabos.utils.async_util import run_async_func
from unilabos.utils.log import info, debug, warning, error, critical, logger, trace
from unilabos.utils.type_check import get_type_class, TypeEncoder, serialize_result_info
from unilabos.utils.type_check import get_type_class, TypeEncoder, serialize_result_info, get_result_info_str
T = TypeVar("T")
@@ -416,10 +416,10 @@ class BaseROS2DeviceNode(Node, Generic[T]):
liquid_volume=LIQUID_VOLUME,
slot_on_deck=slot,
)
res.response = serialize_result_info("", True, ret)
res.response = get_result_info_str("", True, ret)
except Exception as e:
traceback.print_exc()
res.response = serialize_result_info(traceback.format_exc(), False, {})
res.response = get_result_info_str(traceback.format_exc(), False, {})
return res
# 接下来该根据bind_parent_id进行assign了目前只有plr可以进行assign不然没有办法输入到物料系统中
if bind_parent_id != self.node_name:
@@ -837,7 +837,7 @@ class BaseROS2DeviceNode(Node, Generic[T]):
if attr_name in ["success", "reached_goal"]:
setattr(result_msg, attr_name, True)
elif attr_name == "return_info":
setattr(result_msg, attr_name, serialize_result_info(execution_error, execution_success, action_return_value))
setattr(result_msg, attr_name, get_result_info_str(execution_error, execution_success, action_return_value))
##### self.lab_logger().info(f"动作 {action_name} 完成并返回结果")
return result_msg

View File

@@ -713,22 +713,24 @@ class HostNode(BaseROS2DeviceNode):
return_info_str = result_data.get("return_info")
if return_info_str is not None:
try:
ret = json.loads(return_info_str)
suc = ret.get("suc", False)
return_info = json.loads(return_info_str)
suc = return_info.get("suc", False)
if not suc:
status = "failed"
except json.JSONDecodeError:
status = "failed"
return_info = serialize_result_info("", False, result_data)
self.lab_logger().critical("错误的return_info类型请断点修复")
else:
# 无 return_info 字段时,回退到 success 字段(若存在)
suc_field = result_data.get("success")
if isinstance(suc_field, bool):
status = "success" if suc_field else "failed"
return_info_str = serialize_result_info("", suc_field, result_data)
return_info = serialize_result_info("", suc_field, result_data)
else:
# 最保守的回退标记失败并返回空JSON
status = "failed"
return_info_str = serialize_result_info("缺少return_info", False, result_data)
return_info = serialize_result_info("缺少return_info", False, result_data)
self.lab_logger().info(f"[Host Node] Result for {action_id} ({job_id}): {status}")
self.lab_logger().debug(f"[Host Node] Result data: {result_data}")
@@ -736,7 +738,7 @@ class HostNode(BaseROS2DeviceNode):
if job_id:
for bridge in self.bridges:
if hasattr(bridge, "publish_job_status"):
bridge.publish_job_status(result_data, item, status, return_info_str)
bridge.publish_job_status(result_data, item, status, return_info)
def cancel_goal(self, goal_uuid: str) -> None:
"""取消目标"""

View File

@@ -25,7 +25,7 @@ from unilabos.ros.msgs.message_converter import (
)
from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode, DeviceNodeResourceTracker, ROS2DeviceNode
from unilabos.utils.log import error
from unilabos.utils.type_check import serialize_result_info
from unilabos.utils.type_check import serialize_result_info, get_result_info_str
class ROS2ProtocolNode(BaseROS2DeviceNode):
@@ -314,7 +314,7 @@ class ROS2ProtocolNode(BaseROS2DeviceNode):
setattr(
result,
attr_name,
serialize_result_info(execution_error, execution_success, protocol_return_value),
get_result_info_str(execution_error, execution_success, protocol_return_value),
)
self.lab_logger().info(f"协议 {protocol_name} 完成并返回结果")