mirror of
https://github.com/deepmodeling/Uni-Lab-OS
synced 2026-03-27 18:23:12 +00:00
stripe ros2 schema desc
add create-device-skill
This commit is contained in:
@@ -717,6 +717,19 @@ def ros_field_type_to_json_schema(
|
||||
# return {'type': 'object', 'description': f'未知类型: {field_type}'}
|
||||
|
||||
|
||||
def _strip_rosidl_descriptions(schema: Any) -> None:
|
||||
"""递归清除 rosidl_parser 自动生成的无意义 description(含内存地址)。"""
|
||||
if isinstance(schema, dict):
|
||||
desc = schema.get("description", "")
|
||||
if isinstance(desc, str) and "rosidl_parser" in desc:
|
||||
del schema["description"]
|
||||
for v in schema.values():
|
||||
_strip_rosidl_descriptions(v)
|
||||
elif isinstance(schema, list):
|
||||
for item in schema:
|
||||
_strip_rosidl_descriptions(item)
|
||||
|
||||
|
||||
def ros_message_to_json_schema(msg_class: Any, field_name: str) -> Dict[str, Any]:
|
||||
"""
|
||||
将 ROS 消息类转换为 JSON Schema
|
||||
@@ -730,7 +743,8 @@ def ros_message_to_json_schema(msg_class: Any, field_name: str) -> Dict[str, Any
|
||||
"""
|
||||
schema = ROS2MessageInstance(msg_class()).get_json_schema()
|
||||
schema["title"] = field_name
|
||||
schema.pop("description")
|
||||
schema.pop("description", None)
|
||||
_strip_rosidl_descriptions(schema)
|
||||
return schema
|
||||
|
||||
|
||||
@@ -777,6 +791,8 @@ def ros_action_to_json_schema(
|
||||
"required": ["goal"],
|
||||
}
|
||||
|
||||
_strip_rosidl_descriptions(schema)
|
||||
|
||||
# 保留之前 schema 中 goal/feedback/result 下一级字段的 description
|
||||
if previous_schema:
|
||||
_preserve_field_descriptions(schema, previous_schema)
|
||||
|
||||
@@ -1884,7 +1884,8 @@ class BaseROS2DeviceNode(Node, Generic[T]):
|
||||
continue
|
||||
|
||||
# 处理单个 ResourceSlot
|
||||
if arg_type == "unilabos.registry.placeholder_type:ResourceSlot":
|
||||
_is_resource_slot = isinstance(arg_type, str) and arg_type.endswith(":ResourceSlot")
|
||||
if _is_resource_slot:
|
||||
resource_data = function_args[arg_name]
|
||||
if isinstance(resource_data, dict) and "id" in resource_data:
|
||||
try:
|
||||
@@ -1898,8 +1899,7 @@ class BaseROS2DeviceNode(Node, Generic[T]):
|
||||
|
||||
# 处理 ResourceSlot 列表
|
||||
elif isinstance(arg_type, tuple) and len(arg_type) == 2:
|
||||
resource_slot_type = "unilabos.registry.placeholder_type:ResourceSlot"
|
||||
if arg_type[0] == "list" and arg_type[1] == resource_slot_type:
|
||||
if arg_type[0] == "list" and isinstance(arg_type[1], str) and arg_type[1].endswith(":ResourceSlot"):
|
||||
resource_list = function_args[arg_name]
|
||||
if isinstance(resource_list, list):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user