- {% if host_node_info.subscribed_topics %}
-
- {% for topic in host_node_info.subscribed_topics %}
-
- {{ topic }}
-
-
- {% endfor %}
+
主机节点信息
+
+
+
+
+ 已管理设备
+ {{ host_node_info.devices|length }}
+
+
+
+ | 设备ID |
+ 命名空间 |
+ 机器名称 |
+ 状态 |
+
+ {% for device_id, device_info in host_node_info.devices.items() %}
+
+ | {{ device_id }} |
+ {{ device_info.namespace }} |
+ {{ device_info.machine_name }} |
+
+ {{ "在线" if device_info.is_online else "离线" }}
+ |
+
+ {% else %}
+
+ | 没有发现已管理的设备 |
+
+ {% endfor %}
+
+
+
+
+
+
+ 动作客户端
+ {{ host_node_info.action_clients|length }}
+
+
+ 已接纳动作:
+
+
+ | 话题 |
+ 类型 |
+ |
+
+ {% for action_name, action_info in host_node_info.action_clients.items()
+ %}
+
+ | {{ action_name }} |
+ {{ action_info.type_name }} |
+ ▼ |
+
+
+
+
+ 发送命令:
+
+
+ros2 action send_goal {{ action_info.action_path }} {{ action_info.type_name_convert }} "{{ action_info.goal_info }}"
+
+
+
+ 提示: 根据目标结构修改命令参数
- {% else %}
- 没有发现已订阅的主题
- {% endif %}
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+ 已订阅主题
+ {{ host_node_info.subscribed_topics|length }}
+
+
+ {% if host_node_info.subscribed_topics %}
+
+ {% for topic in host_node_info.subscribed_topics %}
+
+ {{ topic }}
+
+ {% endfor %}
+
+ {% else %}
+
没有发现已订阅的主题
+ {% endif %}
-
-
- {% if host_node_info.device_status %}
-
-
设备状态
-
-
- | 设备ID |
- 属性 |
- 值 |
- 最后更新 |
-
- {% for device_id, properties in host_node_info.device_status.items() %}
- {% for prop_name, prop_value in properties.items() %}
-
- {% if loop.first %}
- | {{ device_id }} |
- {% endif %}
- {{ prop_name }} |
- {{ prop_value }} |
-
- {% if device_id in host_node_info.device_status_timestamps and prop_name in host_node_info.device_status_timestamps[device_id] %}
- {% set ts_info = host_node_info.device_status_timestamps[device_id][prop_name] %}
- {% if ts_info.elapsed >= 0 %}
- {{ ts_info.elapsed }} 秒前
- {% else %}
- 未更新
- {% endif %}
- {% else %}
- 无数据
- {% endif %}
- |
-
- {% endfor %}
- {% else %}
-
- | 没有设备状态数据 |
-
- {% endfor %}
-
-
- {% endif %}
+
+
+
+ {% if host_node_info.device_status %}
+
+
设备状态
+
+
+ | 设备ID |
+ 属性 |
+ 值 |
+ 最后更新 |
+
+ {% for device_id, properties in host_node_info.device_status.items() %} {%
+ for prop_name, prop_value in properties.items() %}
+
+ {% if loop.first %}
+ | {{ device_id }} |
+ {% endif %}
+ {{ prop_name }} |
+ {{ prop_value }} |
+
+ {% if device_id in host_node_info.device_status_timestamps and
+ prop_name in host_node_info.device_status_timestamps[device_id] %} {%
+ set ts_info =
+ host_node_info.device_status_timestamps[device_id][prop_name] %} {% if
+ ts_info.elapsed >= 0 %}
+ {{ ts_info.elapsed }} 秒前
+ {% else %}
+ 未更新
+ {% endif %} {% else %}
+ 无数据
+ {% endif %}
+ |
+
+ {% endfor %} {% else %}
+
+ | 没有设备状态数据 |
+
+ {% endfor %}
+
+
+ {% endif %}
{% endif %}
-
Local Devices
-
-
- | Device ID |
- 节点名称 |
- 命名空间 |
- 机器名称 |
- 状态项 |
- 动作数 |
-
- {% for device_id, device_info in ros_node_info.registered_devices.items() %}
- {% set device_loop_index = loop.index %}
-
- | {{ device_id }} |
- {{ device_info.node_name }} |
- {{ device_info.namespace }} |
- {{ device_info.machine_name|default("本地") }} |
- {{ ros_node_info.device_topics.get(device_id, {})|length }} |
- {{ ros_node_info.device_actions.get(device_id, {})|length }} ▼ |
-
-
-
-
- UUID: {{ device_info.uuid }}
- {% if device_id in ros_node_info.device_topics %}
- 已发布状态:
-
-
- | 名称 |
- 类型 |
- 话题 |
- 间隔 |
- |
-
- {% for status_name, status_info in ros_node_info.device_topics[device_id].items() %}
-
- | {{ status_name }} |
- {{ status_info.type_name }} |
- {{ status_info.topic_path }} |
- {{ status_info.timer_period }} |
- ▼ |
-
-
-
-
- 订阅命令:
-
- ros2 topic echo {{ status_info.topic_path }}
-
-
-
- |
-
- {% endfor %}
-
- {% endif %}
-
- {% if device_id in ros_node_info.device_actions %}
- 已发布动作:
-
-
- | 名称 |
- 类型 |
- 话题 |
- |
-
- {% for action_name, action_info in ros_node_info.device_actions[device_id].items() %}
-
- | {{ action_name }} |
- {{ action_info.type_name }} |
- {{ action_info.action_path }} |
- ▼ |
-
-
-
-
- 发送命令:
-
- ros2 action send_goal {{ action_info.action_path }} {{ action_info.type_name_convert }} "{{ action_info.goal_info }}"
-
-
-
- 提示: 根据目标结构修改命令参数
-
- |
-
- {% endfor %}
-
- {% endif %}
+ Local Devices
+
+
+ | Device ID |
+ 节点名称 |
+ 命名空间 |
+ 机器名称 |
+ 状态项 |
+ 动作数 |
+
+ {% for device_id, device_info in ros_node_info.registered_devices.items() %}
+ {% set device_loop_index = loop.index %}
+
+ | {{ device_id }} |
+ {{ device_info.node_name }} |
+ {{ device_info.namespace }} |
+ {{ device_info.machine_name|default("本地") }} |
+ {{ ros_node_info.device_topics.get(device_id, {})|length }} |
+
+ {{ ros_node_info.device_actions.get(device_id, {})|length }}
+ ▼
+ |
+
+
+
+
+ UUID: {{ device_info.uuid }} {% if device_id in
+ ros_node_info.device_topics %}
+ 已发布状态:
+
+
+ | 名称 |
+ 类型 |
+ 话题 |
+ 间隔 |
+ |
+
+ {% for status_name, status_info in
+ ros_node_info.device_topics[device_id].items() %}
+
+ | {{ status_name }} |
+ {{ status_info.type_name }} |
+ {{ status_info.topic_path }} |
+ {{ status_info.timer_period }} |
+ ▼ |
+
+
+
+
+ 订阅命令:
+
+ ros2 topic echo {{ status_info.topic_path }}
+
+
- |
-
- {% endfor %}
-
+ |
+
+ {% endfor %}
+
+ {% endif %} {% if device_id in ros_node_info.device_actions %}
+ 已发布动作:
+
+
+ | 名称 |
+ 类型 |
+ 话题 |
+ |
+
+ {% for action_name, action_info in
+ ros_node_info.device_actions[device_id].items() %}
+
+ | {{ action_name }} |
+ {{ action_info.type_name }} |
+ {{ action_info.action_path }} |
+ ▼ |
+
+
+
+
+ 发送命令:
+
+
+ros2 action send_goal {{ action_info.action_path }} {{ action_info.type_name_convert }} "{{ action_info.goal_info }}"
+
+
+
+ 提示: 根据目标结构修改命令参数
+
+ |
+
+ {% endfor %}
+
+ {% endif %}
+
+ |
+
+ {% endfor %}
+
-
Device Types
+
+
-
- | ID |
- Name |
- File Path |
- |
-
- {% for device in devices %}
-
- | {{ device.id }} |
- {{ device.name }} |
-
- {{ device.file_path }}
- 📁
- |
- ▼ |
-
-
-
-
- {% if device.class %}
- {{ device.class | tojson(indent=4) }}
- {% else %}
-
- // No data
- {% endif %}
+
+ | ID |
+ Name |
+ File Path |
+ |
+
+ {% for device in devices %}
+
+ | {{ device.id }} |
+ {{ device.name }} |
+
+ {{ device.file_path }}
+ 📁
+ |
+ ▼ |
+
+
+
+
+ {% if device.class %}
+ {{ device.class | tojson(indent=4) }}
+ {% else %}
+
+ // No data
+ {% endif %} {% if device.is_online %}
+
+ 在线
+
+ {% endif %} {% if device.is_online and device.status_publishers %}
+ 状态发布者:
+
+ {% for status_name, status_info in
+ device.status_publishers.items() %}
+ -
+ {{ status_name }} - 类型: {{ status_info.type
+ }}
话题: {{ status_info.topic }}
+
+ {% endfor %}
+
+ {% endif %} {% if device.is_online and device.actions %}
+ 可用动作:
+
+ {% for action_name, action_info in device.actions.items() %}
+ -
+ {{ action_name }} - 类型: {{ action_info.type
+ }}
话题: {{ action_info.topic }}
+
+
+ 发送命令:
+
+ {{ action_info.command }}
+
+
+
+ {% if action_info %}
+ {{ action_info | tojson(indent=4) }}
+ {% else %}
+
+ // No data
+ {% endif %}
+
+
- {% if device.is_online %}
- 在线
- {% endif %}
-
- {% if device.is_online and device.status_publishers %}
- 状态发布者:
-
- {% for status_name, status_info in device.status_publishers.items() %}
- -
- {{ status_name }} - 类型: {{ status_info.type }}
-
话题: {{ status_info.topic }}
-
- {% endfor %}
-
- {% endif %}
-
- {% if device.is_online and device.actions %}
- 可用动作:
-
- {% for action_name, action_info in device.actions.items() %}
- -
- {{ action_name }} - 类型: {{ action_info.type }}
-
话题: {{ action_info.topic }}
-
-
- 发送命令:
-
- {{ action_info.command }}
-
-
-
- {% if action_info %}
- {{ action_info | tojson(indent=4) }}
- {% else %}
-
- // No data
- {% endif %}
-
-
-
- 提示: 根据目标结构修改命令参数
-
-
- {% endfor %}
-
- {% endif %}
+ 提示: 根据目标结构修改命令参数
- |
-
- {% endfor %}
+
+ {% endfor %}
+
+ {% endif %}
+
+ |
+
+ {% endfor %}
+
-
Resource Types
+
+
-
- | ID |
- Name |
- File Path |
-
- {% for resource in resources %}
-
- | {{ resource.id }} |
- {{ resource.name }} |
-
- {{ resource.file_path }}
- 📁
- |
-
- {% endfor %}
+
+ | ID |
+ Name |
+ File Path |
+
+ {% for resource in resources %}
+
+ | {{ resource.id }} |
+ {{ resource.name }} |
+
+ {{ resource.file_path }}
+ 📁
+ |
+
+ {% endfor %}
+
-
Converter Modules
+
+
Loaded Modules
-
- | Module Path |
-
- {% for module in modules.names %}
-
- | {{ module }} |
-
- {% endfor %}
+
+ | Module Path |
+
+ {% for module in modules.names %}
+
+ | {{ module }} |
+
+ {% endfor %}
-
Available Classes
- ({{ modules.total_count }})
+
+ Available Classes
+ ({{ modules.total_count }})
-
- | Class Name |
-
- {% for class_name in modules.classes %}
-
- | {{ class_name }} |
-
- {% endfor %}
+
+ | Class Name |
+
+ {% for class_name in modules.classes %}
+
+ | {{ class_name }} |
+
+ {% endfor %}
+
-{% endblock %}
-
-{% block scripts %}
-{{ super() }}
+{% endblock %} {% block scripts %} {{ super() }}
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml
index df38dbb8..8c3543cd 100644
--- a/unilabos/registry/devices/liquid_handler.yaml
+++ b/unilabos/registry/devices/liquid_handler.yaml
@@ -155,7 +155,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
reagent_sources:
@@ -194,7 +194,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -208,12 +208,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -230,7 +230,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: reagent_sources
type: object
type: array
spread:
@@ -271,7 +271,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -285,12 +285,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -307,7 +307,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: targets
type: object
type: array
use_channels:
@@ -436,7 +436,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
resources:
@@ -475,7 +475,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -489,12 +489,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -511,7 +511,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: resources
type: object
type: array
spread:
@@ -826,7 +826,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
resources:
@@ -865,7 +865,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -879,12 +879,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -901,7 +901,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: resources
type: object
type: array
spread:
@@ -1007,7 +1007,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
tip_spots:
@@ -1046,7 +1046,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -1060,12 +1060,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -1082,7 +1082,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: tip_spots
type: object
type: array
use_channels:
@@ -1173,7 +1173,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offset
type: object
tip_rack:
properties:
@@ -1210,7 +1210,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -1224,12 +1224,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -1246,7 +1246,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: tip_rack
type: object
required:
- tip_rack
@@ -1352,7 +1352,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
targets:
@@ -1391,7 +1391,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -1405,12 +1405,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -1427,7 +1427,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: targets
type: object
type: array
required:
@@ -1552,7 +1552,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: destination_offset
type: object
drop_direction:
type: string
@@ -1571,7 +1571,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: intermediate_locations
type: object
type: array
lid:
@@ -1609,7 +1609,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -1623,12 +1623,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -1645,7 +1645,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: lid
type: object
pickup_direction:
type: string
@@ -1665,7 +1665,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: resource_offset
type: object
to:
properties:
@@ -1702,7 +1702,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -1716,12 +1716,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -1738,7 +1738,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: to
type: object
required:
- lid
@@ -1869,7 +1869,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: destination_offset
type: object
drop_direction:
type: string
@@ -1888,7 +1888,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: intermediate_locations
type: object
type: array
pickup_direction:
@@ -1907,7 +1907,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: pickup_offset
type: object
plate:
properties:
@@ -1944,7 +1944,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -1958,12 +1958,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -1980,7 +1980,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: plate
type: object
put_direction:
type: string
@@ -1996,7 +1996,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: resource_offset
type: object
to:
properties:
@@ -2033,7 +2033,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -2047,12 +2047,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -2069,7 +2069,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: to
type: object
required:
- plate
@@ -2181,7 +2181,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: destination_offset
type: object
drop_direction:
type: string
@@ -2200,7 +2200,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: intermediate_locations
type: object
type: array
pickup_direction:
@@ -2244,7 +2244,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -2258,12 +2258,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -2280,7 +2280,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: resource
type: object
resource_offset:
properties:
@@ -2294,7 +2294,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: resource_offset
type: object
to:
properties:
@@ -2308,7 +2308,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: to
type: object
required:
- resource
@@ -2421,7 +2421,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -2435,12 +2435,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -2457,7 +2457,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: well
type: object
required:
- well
@@ -2540,7 +2540,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
tip_spots:
@@ -2579,7 +2579,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -2593,12 +2593,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -2615,7 +2615,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: tip_spots
type: object
type: array
use_channels:
@@ -2701,7 +2701,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offset
type: object
tip_rack:
properties:
@@ -2738,7 +2738,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -2752,12 +2752,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -2774,7 +2774,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: tip_rack
type: object
required:
- tip_rack
@@ -2925,7 +2925,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
sources:
@@ -2964,7 +2964,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -2978,12 +2978,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3000,7 +3000,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: sources
type: object
type: array
spread:
@@ -3054,7 +3054,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3068,12 +3068,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3090,7 +3090,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: waste_liquid
type: object
required:
- vols
@@ -3255,7 +3255,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
sources:
@@ -3294,7 +3294,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3308,12 +3308,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3330,7 +3330,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: sources
type: object
type: array
spread:
@@ -3384,7 +3384,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3398,12 +3398,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3420,7 +3420,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: waste_liquid
type: object
required:
- vols
@@ -3650,7 +3650,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3664,12 +3664,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3686,7 +3686,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: source
type: object
target:
properties:
@@ -3723,7 +3723,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3737,12 +3737,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3759,7 +3759,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: target
type: object
volume:
type: number
@@ -4107,7 +4107,7 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
sources:
@@ -4146,7 +4146,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -4160,12 +4160,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -4182,7 +4182,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: sources
type: object
type: array
spread:
@@ -4223,7 +4223,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -4237,12 +4237,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -4259,7 +4259,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: targets
type: object
type: array
tip_racks:
@@ -4298,7 +4298,7 @@ liquid_handler:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -4312,12 +4312,12 @@ liquid_handler:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -4334,7 +4334,7 @@ liquid_handler:
- pose
- config
- data
- title: Resource
+ title: tip_racks
type: object
type: array
touch_tip:
@@ -5099,7 +5099,7 @@ liquid_handler.biomek:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
sources:
@@ -5138,7 +5138,7 @@ liquid_handler.biomek:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -5152,12 +5152,12 @@ liquid_handler.biomek:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -5174,7 +5174,7 @@ liquid_handler.biomek:
- pose
- config
- data
- title: Resource
+ title: sources
type: object
type: array
spread:
@@ -5215,7 +5215,7 @@ liquid_handler.biomek:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -5229,12 +5229,12 @@ liquid_handler.biomek:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -5251,7 +5251,7 @@ liquid_handler.biomek:
- pose
- config
- data
- title: Resource
+ title: targets
type: object
type: array
tip_racks:
@@ -5290,7 +5290,7 @@ liquid_handler.biomek:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -5304,12 +5304,12 @@ liquid_handler.biomek:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -5326,7 +5326,7 @@ liquid_handler.biomek:
- pose
- config
- data
- title: Resource
+ title: tip_racks
type: object
type: array
touch_tip:
@@ -5555,7 +5555,7 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
reagent_sources:
@@ -5594,7 +5594,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -5608,12 +5608,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -5630,7 +5630,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: reagent_sources
type: object
type: array
spread:
@@ -5671,7 +5671,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -5685,12 +5685,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -5707,7 +5707,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: targets
type: object
type: array
use_channels:
@@ -5837,7 +5837,7 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
resources:
@@ -5876,7 +5876,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -5890,12 +5890,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -5912,7 +5912,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: resources
type: object
type: array
spread:
@@ -6255,7 +6255,7 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
resources:
@@ -6294,7 +6294,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -6308,12 +6308,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -6330,7 +6330,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: resources
type: object
type: array
spread:
@@ -6435,7 +6435,7 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
tip_spots:
@@ -6474,7 +6474,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -6488,12 +6488,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -6510,7 +6510,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: tip_spots
type: object
type: array
use_channels:
@@ -6626,7 +6626,7 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
targets:
@@ -6665,7 +6665,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -6679,12 +6679,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -6701,7 +6701,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: targets
type: object
type: array
required:
@@ -6790,7 +6790,7 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
tip_spots:
@@ -6829,7 +6829,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -6843,12 +6843,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -6865,7 +6865,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: tip_spots
type: object
type: array
use_channels:
@@ -7027,7 +7027,7 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
sources:
@@ -7066,7 +7066,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -7080,12 +7080,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -7102,7 +7102,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: sources
type: object
type: array
spread:
@@ -7156,7 +7156,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -7170,12 +7170,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -7192,7 +7192,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: waste_liquid
type: object
required:
- vols
@@ -7315,7 +7315,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -7329,12 +7329,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -7351,7 +7351,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: wells
type: object
type: array
required:
@@ -7448,7 +7448,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -7462,12 +7462,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -7484,7 +7484,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: tip_racks
type: object
type: array
required:
@@ -7800,7 +7800,7 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: offsets
type: object
type: array
sources:
@@ -7839,7 +7839,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -7853,12 +7853,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -7875,7 +7875,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: sources
type: object
type: array
spread:
@@ -7916,7 +7916,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -7930,12 +7930,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -7952,7 +7952,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: targets
type: object
type: array
tip_racks:
@@ -7991,7 +7991,7 @@ liquid_handler.prcxi:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -8005,12 +8005,12 @@ liquid_handler.prcxi:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -8027,7 +8027,7 @@ liquid_handler.prcxi:
- pose
- config
- data
- title: Resource
+ title: tip_racks
type: object
type: array
touch_tip:
@@ -8220,7 +8220,7 @@ liquid_handler.revvity:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -8234,12 +8234,12 @@ liquid_handler.revvity:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -8256,7 +8256,7 @@ liquid_handler.revvity:
- pose
- config
- data
- title: Resource
+ title: resource
type: object
wf_name:
type: string
diff --git a/unilabos/registry/devices/organic_miscellaneous.yaml b/unilabos/registry/devices/organic_miscellaneous.yaml
index 1ac2ac28..025fad59 100644
--- a/unilabos/registry/devices/organic_miscellaneous.yaml
+++ b/unilabos/registry/devices/organic_miscellaneous.yaml
@@ -336,7 +336,7 @@ separator.homemade:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -350,12 +350,12 @@ separator.homemade:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -372,7 +372,7 @@ separator.homemade:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
diff --git a/unilabos/registry/devices/robot_gripper.yaml b/unilabos/registry/devices/robot_gripper.yaml
index f3ee1415..0e79395f 100644
--- a/unilabos/registry/devices/robot_gripper.yaml
+++ b/unilabos/registry/devices/robot_gripper.yaml
@@ -533,7 +533,7 @@ gripper.mock:
required:
- position
- max_effort
- title: GripperCommand
+ title: command
type: object
required:
- command
diff --git a/unilabos/registry/devices/robot_linear_motion.yaml b/unilabos/registry/devices/robot_linear_motion.yaml
index 4cc4eaf9..1aeb8612 100644
--- a/unilabos/registry/devices/robot_linear_motion.yaml
+++ b/unilabos/registry/devices/robot_linear_motion.yaml
@@ -139,12 +139,12 @@ linear_motion.grbl:
required:
- sec
- nanosec
- title: Time
+ title: stamp
type: object
required:
- stamp
- frame_id
- title: Header
+ title: header
type: object
pose:
properties:
@@ -163,7 +163,7 @@ linear_motion.grbl:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -177,17 +177,17 @@ linear_motion.grbl:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
required:
- header
- pose
- title: PoseStamped
+ title: current_pose
type: object
distance_remaining:
type: number
@@ -204,7 +204,7 @@ linear_motion.grbl:
required:
- sec
- nanosec
- title: Duration
+ title: estimated_time_remaining
type: object
navigation_time:
properties:
@@ -219,7 +219,7 @@ linear_motion.grbl:
required:
- sec
- nanosec
- title: Duration
+ title: navigation_time
type: object
number_of_poses_remaining:
maximum: 32767
@@ -262,12 +262,12 @@ linear_motion.grbl:
required:
- sec
- nanosec
- title: Time
+ title: stamp
type: object
required:
- stamp
- frame_id
- title: Header
+ title: header
type: object
pose:
properties:
@@ -286,7 +286,7 @@ linear_motion.grbl:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -300,17 +300,17 @@ linear_motion.grbl:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
required:
- header
- pose
- title: PoseStamped
+ title: poses
type: object
type: array
required:
@@ -323,7 +323,7 @@ linear_motion.grbl:
result:
properties: {}
required: []
- title: Empty
+ title: result
type: object
required:
- result
@@ -371,12 +371,12 @@ linear_motion.grbl:
required:
- sec
- nanosec
- title: Time
+ title: stamp
type: object
required:
- stamp
- frame_id
- title: Header
+ title: header
type: object
position:
type: number
@@ -406,7 +406,7 @@ linear_motion.grbl:
required:
- sec
- nanosec
- title: Duration
+ title: min_duration
type: object
position:
type: number
diff --git a/unilabos/registry/devices/temperature.yaml b/unilabos/registry/devices/temperature.yaml
index f83d921a..bb717b56 100644
--- a/unilabos/registry/devices/temperature.yaml
+++ b/unilabos/registry/devices/temperature.yaml
@@ -362,7 +362,7 @@ heaterstirrer.dalong:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -376,12 +376,12 @@ heaterstirrer.dalong:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -398,7 +398,7 @@ heaterstirrer.dalong:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
diff --git a/unilabos/registry/devices/virtual_device.yaml b/unilabos/registry/devices/virtual_device.yaml
index d97d6251..f94bdad5 100644
--- a/unilabos/registry/devices/virtual_device.yaml
+++ b/unilabos/registry/devices/virtual_device.yaml
@@ -145,7 +145,7 @@ virtual_centrifuge:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -159,12 +159,12 @@ virtual_centrifuge:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -181,7 +181,7 @@ virtual_centrifuge:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
@@ -446,7 +446,7 @@ virtual_column:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -460,12 +460,12 @@ virtual_column:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -482,7 +482,7 @@ virtual_column:
- pose
- config
- data
- title: Resource
+ title: from_vessel
type: object
pct1:
type: string
@@ -531,7 +531,7 @@ virtual_column:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -545,12 +545,12 @@ virtual_column:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -567,7 +567,7 @@ virtual_column:
- pose
- config
- data
- title: Resource
+ title: to_vessel
type: object
required:
- from_vessel
@@ -850,7 +850,7 @@ virtual_filter:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -864,12 +864,12 @@ virtual_filter:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -886,7 +886,7 @@ virtual_filter:
- pose
- config
- data
- title: Resource
+ title: filtrate_vessel
type: object
stir:
type: boolean
@@ -929,7 +929,7 @@ virtual_filter:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -943,12 +943,12 @@ virtual_filter:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -965,7 +965,7 @@ virtual_filter:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
volume:
type: number
@@ -1071,8 +1071,8 @@ virtual_filter:
- status
- progress
- current_temp
- - filtered_volume
- current_status
+ - filtered_volume
- message
- max_temp
- max_stir_speed
@@ -1455,7 +1455,7 @@ virtual_heatchill:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -1469,12 +1469,12 @@ virtual_heatchill:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -1491,7 +1491,7 @@ virtual_heatchill:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
@@ -1610,7 +1610,7 @@ virtual_heatchill:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -1624,12 +1624,12 @@ virtual_heatchill:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -1646,7 +1646,7 @@ virtual_heatchill:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
@@ -1747,7 +1747,7 @@ virtual_heatchill:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -1761,12 +1761,12 @@ virtual_heatchill:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -1783,7 +1783,7 @@ virtual_heatchill:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
@@ -2397,7 +2397,7 @@ virtual_rotavap:
required:
- sec
- nanosec
- title: Duration
+ title: time_remaining
type: object
time_spent:
properties:
@@ -2412,7 +2412,7 @@ virtual_rotavap:
required:
- sec
- nanosec
- title: Duration
+ title: time_spent
type: object
required:
- status
@@ -2468,7 +2468,7 @@ virtual_rotavap:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -2482,12 +2482,12 @@ virtual_rotavap:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -2504,7 +2504,7 @@ virtual_rotavap:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
@@ -2889,7 +2889,7 @@ virtual_separator:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -2903,12 +2903,12 @@ virtual_separator:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -2925,7 +2925,7 @@ virtual_separator:
- pose
- config
- data
- title: Resource
+ title: from_vessel
type: object
product_phase:
type: string
@@ -2964,7 +2964,7 @@ virtual_separator:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -2978,12 +2978,12 @@ virtual_separator:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3000,7 +3000,7 @@ virtual_separator:
- pose
- config
- data
- title: Resource
+ title: product_vessel
type: object
purpose:
type: string
@@ -3043,7 +3043,7 @@ virtual_separator:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3057,12 +3057,12 @@ virtual_separator:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3079,7 +3079,7 @@ virtual_separator:
- pose
- config
- data
- title: Resource
+ title: separation_vessel
type: object
settling_time:
type: number
@@ -3128,7 +3128,7 @@ virtual_separator:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3142,12 +3142,12 @@ virtual_separator:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3164,7 +3164,7 @@ virtual_separator:
- pose
- config
- data
- title: Resource
+ title: to_vessel
type: object
vessel:
properties:
@@ -3201,7 +3201,7 @@ virtual_separator:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3215,12 +3215,12 @@ virtual_separator:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3237,7 +3237,7 @@ virtual_separator:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
volume:
type: string
@@ -3276,7 +3276,7 @@ virtual_separator:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3290,12 +3290,12 @@ virtual_separator:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3312,7 +3312,7 @@ virtual_separator:
- pose
- config
- data
- title: Resource
+ title: waste_phase_to_vessel
type: object
waste_vessel:
properties:
@@ -3349,7 +3349,7 @@ virtual_separator:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3363,12 +3363,12 @@ virtual_separator:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3385,7 +3385,7 @@ virtual_separator:
- pose
- config
- data
- title: Resource
+ title: waste_vessel
type: object
required:
- vessel
@@ -3951,7 +3951,7 @@ virtual_solid_dispenser:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -3965,12 +3965,12 @@ virtual_solid_dispenser:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -3987,7 +3987,7 @@ virtual_solid_dispenser:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
viscous:
type: boolean
@@ -4332,7 +4332,7 @@ virtual_stirrer:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -4346,12 +4346,12 @@ virtual_stirrer:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -4368,7 +4368,7 @@ virtual_stirrer:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
@@ -4492,7 +4492,7 @@ virtual_stirrer:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -4506,12 +4506,12 @@ virtual_stirrer:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -4528,7 +4528,7 @@ virtual_stirrer:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
@@ -4639,7 +4639,7 @@ virtual_stirrer:
- y
- z
- w
- title: Quaternion
+ title: orientation
type: object
position:
properties:
@@ -4653,12 +4653,12 @@ virtual_stirrer:
- x
- y
- z
- title: Point
+ title: position
type: object
required:
- position
- orientation
- title: Pose
+ title: pose
type: object
sample_id:
type: string
@@ -4675,7 +4675,7 @@ virtual_stirrer:
- pose
- config
- data
- title: Resource
+ title: vessel
type: object
required:
- vessel
@@ -4704,6 +4704,7 @@ virtual_stirrer:
status_types:
current_speed: float
current_vessel: str
+ device_info: dict
is_stirring: bool
max_speed: float
min_speed: float
@@ -4738,6 +4739,8 @@ virtual_stirrer:
type: number
current_vessel:
type: string
+ device_info:
+ type: object
is_stirring:
type: boolean
max_speed:
@@ -4759,6 +4762,7 @@ virtual_stirrer:
- remaining_time
- max_speed
- min_speed
+ - device_info
type: object
version: 1.0.0
virtual_transfer_pump:
diff --git a/unilabos/registry/registry.py b/unilabos/registry/registry.py
index 3cb29379..45240960 100644
--- a/unilabos/registry/registry.py
+++ b/unilabos/registry/registry.py
@@ -24,12 +24,11 @@ DEFAULT_PATHS = [Path(__file__).absolute().parent]
class Registry:
def __init__(self, registry_paths=None):
import ctypes
+
try:
import unilabos_msgs
except ImportError:
- logger.error(
- "[UniLab Registry] unilabos_msgs模块未找到,请确保已根据官方文档安装unilabos_msgs包。"
- )
+ logger.error("[UniLab Registry] unilabos_msgs模块未找到,请确保已根据官方文档安装unilabos_msgs包。")
sys.exit(1)
try:
ctypes.CDLL(str(Path(unilabos_msgs.__file__).parent / "unilabos_msgs_s__rosidl_typesupport_c.pyd"))
@@ -219,7 +218,7 @@ class Registry:
yaml.dump(complete_data, f, allow_unicode=True, default_flow_style=False, Dumper=NoAliasDumper)
self.resource_type_registry.update(data)
- logger.trace(
+ logger.trace( # type: ignore
f"[UniLab Registry] Resource-{current_resource_number} File-{i+1}/{len(files)} "
+ f"Add {list(data.keys())}"
)
@@ -406,7 +405,7 @@ class Registry:
devices_path = abs_path / "devices"
device_comms_path = abs_path / "device_comms"
files = list(devices_path.glob("*.yaml")) + list(device_comms_path.glob("*.yaml"))
- logger.trace(
+ logger.trace( # type: ignore
f"[UniLab Registry] devices: {devices_path.exists()}, device_comms: {device_comms_path.exists()}, "
+ f"total: {len(files)}"
)
@@ -577,7 +576,7 @@ class Registry:
}
device_config["file_path"] = str(file.absolute()).replace("\\", "/")
device_config["registry_type"] = "device"
- logger.trace(
+ logger.trace( # type: ignore
f"[UniLab Registry] Device-{current_device_number} File-{i+1}/{len(files)} Add {device_id} "
+ f"[{data[device_id].get('name', '未命名设备')}]"
)
diff --git a/unilabos/registry/resources/organic/workstation.yaml b/unilabos/registry/resources/organic/workstation.yaml
index 440f06c7..5250dfc9 100644
--- a/unilabos/registry/resources/organic/workstation.yaml
+++ b/unilabos/registry/resources/organic/workstation.yaml
@@ -1,12 +1,12 @@
-get_workstation_plate_resource:
- category:
- - workstation
- class:
- module: unilabos.ros.nodes.presets.workstation:get_workstation_plate_resource
- type: pylabrobot
- description: workstation example resource
- handles: []
- icon: ''
- init_param_schema: {}
- registry_type: resource
- version: 1.0.0
+#get_workstation_plate_resource:
+# category:
+# - workstation
+# class:
+# module: unilabos.devices.workstation.workstation_base:get_workstation_plate_resource
+# type: pylabrobot
+# description: workstation example resource
+# handles: []
+# icon: ''
+# init_param_schema: {}
+# registry_type: resource
+# version: 1.0.0
diff --git a/unilabos/ros/msgs/message_converter.py b/unilabos/ros/msgs/message_converter.py
index 657a2077..7020e4bd 100644
--- a/unilabos/ros/msgs/message_converter.py
+++ b/unilabos/ros/msgs/message_converter.py
@@ -510,7 +510,7 @@ def convert_from_ros_msg_with_mapping(ros_msg: Any, value_mapping: Dict[str, str
Python字典
"""
data: Dict[str, Any] = {}
-
+
# # 🔧 添加调试信息
# print(f"🔍 convert_from_ros_msg_with_mapping 开始")
# print(f"🔍 ros_msg 类型: {type(ros_msg)}")
@@ -519,14 +519,14 @@ def convert_from_ros_msg_with_mapping(ros_msg: Any, value_mapping: Dict[str, str
# print("-" * 60)
for msg_name, attr_name in value_mapping.items():
- # print(f"🔍 处理映射: {msg_name} -> {attr_name}")
-
+ # print(f"🔍 处理映射: {msg_name} -> {attr_name}")
+
msg_path = msg_name.split(".")
current = ros_msg
-
+
# print(f"🔍 msg_path: {msg_path}")
# print(f"🔍 current 初始值: {current} (类型: {type(current)})")
-
+
try:
if not attr_name.endswith("[]"):
# 处理单值映射
@@ -539,7 +539,7 @@ def convert_from_ros_msg_with_mapping(ros_msg: Any, value_mapping: Dict[str, str
else:
# print(f"❌ 属性 '{name}' 不存在于 {type(current)}")
break
-
+
converted_value = convert_from_ros_msg(current)
# print(f"🔍 转换后的值: {converted_value} (类型: {type(converted_value)})")
data[attr_name] = converted_value
@@ -587,13 +587,13 @@ def convert_from_ros_msg_with_mapping(ros_msg: Any, value_mapping: Dict[str, str
# print(f"❌ 映射转换错误 {msg_name} -> {attr_name}: {e}")
logger.debug(f"Mapping conversion error for {msg_name} -> {attr_name}")
continue
-
+
# print(f"🔍 当前 data 状态: {data}")
# print("-" * 40)
- #print(f"🔍 convert_from_ros_msg_with_mapping 结束")
- #print(f"🔍 最终 data: {data}")
- #print("=" * 60)
+ # print(f"🔍 convert_from_ros_msg_with_mapping 结束")
+ # print(f"🔍 最终 data: {data}")
+ # print("=" * 60)
return data
@@ -648,25 +648,28 @@ basic_type_map = {
}
-def ros_field_type_to_json_schema(type_info: Type | str, slot_type: str = None) -> Dict[str, Any]:
+def ros_field_type_to_json_schema(
+ type_info: Type | str, field_name: str
+) -> Dict[str, Any]:
"""
将 ROS 字段类型转换为 JSON Schema 类型定义
Args:
type_info: ROS 类型
slot_type: ROS 类型
+ field_name: 字段名,用于设置复杂类型的title
Returns:
对应的 JSON Schema 类型定义
"""
if isinstance(type_info, UnboundedSequence):
- return {"type": "array", "items": ros_field_type_to_json_schema(type_info.value_type)}
+ return {"type": "array", "items": ros_field_type_to_json_schema(type_info.value_type, field_name)} # type: ignore
if isinstance(type_info, NamespacedType):
cls_name = ".".join(type_info.namespaces) + ":" + type_info.name
type_class = msg_converter_manager.get_class(cls_name)
- return ros_field_type_to_json_schema(type_class)
+ return ros_field_type_to_json_schema(type_class, field_name)
elif isinstance(type_info, BasicType):
- return ros_field_type_to_json_schema(type_info.typename)
+ return ros_field_type_to_json_schema(type_info.typename, field_name)
elif isinstance(type_info, UnboundedString):
return basic_type_map["string"]
elif isinstance(type_info, str):
@@ -683,8 +686,9 @@ def ros_field_type_to_json_schema(type_info: Type | str, slot_type: str = None)
},
"required": ["sec", "nanosec"],
}
+ return {}
else:
- return ros_message_to_json_schema(type_info)
+ return ros_message_to_json_schema(type_info, field_name)
# # 处理数组类型
# if field_type.endswith('[]'):
# item_type = field_type[:-2]
@@ -708,28 +712,28 @@ def ros_field_type_to_json_schema(type_info: Type | str, slot_type: str = None)
# return {'type': 'object', 'description': f'未知类型: {field_type}'}
-def ros_message_to_json_schema(msg_class: Any) -> Dict[str, Any]:
+def ros_message_to_json_schema(msg_class: Any, field_name: str) -> Dict[str, Any]:
"""
将 ROS 消息类转换为 JSON Schema
Args:
msg_class: ROS 消息类
+ field_name: 字段名,用于设置schema的title,如果为None则使用类名
Returns:
对应的 JSON Schema 定义
"""
schema = {"type": "object", "properties": {}, "required": []}
- # 获取类名作为标题
- if hasattr(msg_class, "__name__"):
- schema["title"] = msg_class.__name__
+ # 优先使用字段名作为标题,否则使用类名
+ schema["title"] = field_name
# 获取消息的字段和字段类型
try:
for ind, slot_info in enumerate(msg_class._fields_and_field_types.items()):
slot_name, slot_type = slot_info
type_info = msg_class.SLOT_TYPES[ind]
- field_schema = ros_field_type_to_json_schema(type_info, slot_type)
+ field_schema = ros_field_type_to_json_schema(type_info, slot_name)
schema["properties"][slot_name] = field_schema
schema["required"].append(slot_name)
# if hasattr(msg_class, 'get_fields_and_field_types'):
@@ -788,15 +792,15 @@ def ros_action_to_json_schema(action_class: Any, description="") -> Dict[str, An
"properties": {
"goal": {
# 'description': 'Action 目标 - 从客户端发送到服务器',
- **ros_message_to_json_schema(action_class.Goal)
+ **ros_message_to_json_schema(action_class.Goal, action_class.Goal.__name__)
},
"feedback": {
# 'description': 'Action 反馈 - 执行过程中从服务器发送到客户端',
- **ros_message_to_json_schema(action_class.Feedback)
+ **ros_message_to_json_schema(action_class.Feedback, action_class.Feedback.__name__)
},
"result": {
# 'description': 'Action 结果 - 完成后从服务器发送到客户端',
- **ros_message_to_json_schema(action_class.Result)
+ **ros_message_to_json_schema(action_class.Result, action_class.Result.__name__)
},
},
"required": ["goal"],