diff --git a/unilabos/app/main.py b/unilabos/app/main.py index ebee015e..c08c1b49 100644 --- a/unilabos/app/main.py +++ b/unilabos/app/main.py @@ -18,7 +18,6 @@ if unilabos_dir not in sys.path: from unilabos.config.config import load_config, BasicConfig, _update_config_from_env from unilabos.utils.banner_print import print_status, print_unilab_banner -from unilabos.device_mesh.resource_visalization import ResourceVisualization def parse_args(): @@ -188,6 +187,7 @@ def main(): if args_dict["visual"] != "disable": enable_rviz = args_dict["visual"] == "rviz" if devices_and_resources is not None: + from unilabos.device_mesh.resource_visalization import ResourceVisualization # 此处开启后,logger会变更为INFO,有需要请调整 resource_visualization = ResourceVisualization(devices_and_resources, args_dict["resources_config"] ,enable_rviz=enable_rviz) args_dict["resources_mesh_config"] = resource_visualization.resource_model start_backend(**args_dict) diff --git a/unilabos/app/mq.py b/unilabos/app/mq.py index 018c65cb..afdde3b4 100644 --- a/unilabos/app/mq.py +++ b/unilabos/app/mq.py @@ -26,6 +26,7 @@ class MQTTClient: def __init__(self): self.mqtt_disable = not MQConfig.lab_id self.client_id = f"{MQConfig.group_id}@@@{MQConfig.lab_id}{uuid.uuid4()}" + logger.info("[MQTT] Client_id: " + self.client_id) self.client = mqtt.Client(CallbackAPIVersion.VERSION2, client_id=self.client_id, protocol=mqtt.MQTTv5) self._setup_callbacks() diff --git a/unilabos/devices/laiyu_add_solid/__init__.py b/unilabos/devices/laiyu_add_solid/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/unilabos/devices/liquid_handling/action_definition.py b/unilabos/devices/liquid_handling/liquid_handler_abstract.py similarity index 99% rename from unilabos/devices/liquid_handling/action_definition.py rename to unilabos/devices/liquid_handling/liquid_handler_abstract.py index 530703ad..c349403e 100644 --- a/unilabos/devices/liquid_handling/action_definition.py +++ b/unilabos/devices/liquid_handling/liquid_handler_abstract.py @@ -14,7 +14,7 @@ from pylabrobot.resources import ( Well ) -class DPLiquidHandler(LiquidHandler): +class LiquidHandlerAbstract(LiquidHandler): """Extended LiquidHandler with additional operations.""" # --------------------------------------------------------------- diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml index ba921c77..2bf975de 100644 --- a/unilabos/registry/devices/liquid_handler.yaml +++ b/unilabos/registry/devices/liquid_handler.yaml @@ -1,11 +1,96 @@ liquid_handler: description: Liquid handler device controlled by pylabrobot class: - module: pylabrobot.liquid_handling:LiquidHandler + module: unilabos.devices.liquid_handling.liquid_handler_abstract:LiquidHandlerAbstract type: python status_types: name: String action_value_mappings: + remove: + type: LiquidHandlerRemove + goal: + vols: vols + sources: sources + waste_liquid: waste_liquid + use_channels: use_channels + flow_rates: flow_rates + offsets: offsets + liquid_height: liquid_height + blow_out_air_volume: blow_out_air_volume + spread: spread + delays: delays + is_96_well: is_96_well + top: top + none_keys: none_keys + feedback: { } + result: { } + add_liquid: + type: LiquidHandlerAdd + goal: + asp_vols: asp_vols + dis_vols: dis_vols + reagent_sources: reagent_sources + targets: targets + use_channels: use_channels + flow_rates: flow_rates + offsets: offsets + liquid_height: liquid_height + blow_out_air_volume: blow_out_air_volume + spread: spread + is_96_well: is_96_well + mix_time: mix_time + mix_vol: mix_vol + mix_rate: mix_rate + mix_liquid_height: mix_liquid_height + none_keys: none_keys + feedback: { } + result: { } + transfer_liquid: + type: LiquidHandlerTransfer + goal: + asp_vols: asp_vols + dis_vols: dis_vols + sources: sources + targets: targets + tip_racks: tip_racks + use_channels: use_channels + asp_flow_rates: asp_flow_rates + dis_flow_rates: dis_flow_rates + offsets: offsets + touch_tip: touch_tip + liquid_height: liquid_height + blow_out_air_volume: blow_out_air_volume + spread: spread + is_96_well: is_96_well + mix_stage: mix_stage + mix_times: mix_times + mix_vol: mix_vol + mix_rate: mix_rate + mix_liquid_height: mix_liquid_height + delays: delays + none_keys: none_keys + feedback: { } + result: { } + mix: + type: DPLiquidHandlerMix + goal: + targets: targets + mix_time: mix_time + mix_vol: mix_vol + height_to_bottom: height_to_bottom + offsets: offsets + mix_rate: mix_rate + none_keys: none_keys + feedback: { } + result: { } + move_to: + type: LiquidHandlerMoveTo + goal: + well: well + dis_to_top: dis_to_top + channel: channel + feedback: { } + result: { } aspirate: type: LiquidHandlerAspirate goal: @@ -178,110 +263,7 @@ dp_liquid_handler: status_types: status: String action_value_mappings: - remove_liquid: - type: DPLiquidHandlerRemoveLiquid - goal: - vols: vols - sources: sources - waste_liquid: waste_liquid - use_channels: use_channels - flow_rates: flow_rates - offsets: offsets - liquid_height: liquid_height - blow_out_air_volume: blow_out_air_volume - spread: spread - delays: delays - is_96_well: is_96_well - top: top - none_keys: none_keys - feedback: {} - result: {} - add_liquid: - type: DPLiquidHandlerAddLiquid - goal: - asp_vols: asp_vols - dis_vols: dis_vols - reagent_sources: reagent_sources - targets: targets - use_channels: use_channels - flow_rates: flow_rates - offsets: offsets - liquid_height: liquid_height - blow_out_air_volume: blow_out_air_volume - spread: spread - is_96_well: is_96_well - mix_time: mix_time - mix_vol: mix_vol - mix_rate: mix_rate - mix_liquid_height: mix_liquid_height - none_keys: none_keys - feedback: {} - result: {} - transfer_liquid: - type: DPLiquidHandlerTransferLiquid - goal: - asp_vols: asp_vols - dis_vols: dis_vols - sources: sources - targets: targets - tip_racks: tip_racks - use_channels: use_channels - asp_flow_rates: asp_flow_rates - dis_flow_rates: dis_flow_rates - offsets: offsets - touch_tip: touch_tip - liquid_height: liquid_height - blow_out_air_volume: blow_out_air_volume - spread: spread - is_96_well: is_96_well - mix_stage: mix_stage - mix_times: mix_times - mix_vol: mix_vol - mix_rate: mix_rate - mix_liquid_height: mix_liquid_height - delays: delays - none_keys: none_keys - feedback: {} - result: {} - custom_delay: - type: DPLiquidHandlerCustomDelay - goal: - seconds: seconds - msg: msg - feedback: {} - result: {} - touch_tip: - type: DPLiquidHandlerTouchTip - goal: - targets: targets - feedback: {} - result: {} - mix: - type: DPLiquidHandlerMix - goal: - targets: targets - mix_time: mix_time - mix_vol: mix_vol - height_to_bottom: height_to_bottom - offsets: offsets - mix_rate: mix_rate - none_keys: none_keys - feedback: {} - result: {} - set_tiprack: - type: DPLiquidHandlerSetTiprack - goal: - tip_racks: tip_racks - feedback: {} - result: {} - move_to: - type: DPLiquidHandlerMoveTo - goal: - well: well - dis_to_top: dis_to_top - channel: channel - feedback: {} - result: {} + schema: type: object properties: diff --git a/unilabos_msgs/CMakeLists.txt b/unilabos_msgs/CMakeLists.txt index 69fbaa3a..134dbbb6 100644 --- a/unilabos_msgs/CMakeLists.txt +++ b/unilabos_msgs/CMakeLists.txt @@ -43,14 +43,10 @@ set(action_files "action/LiquidHandlerStamp.action" "action/LiquidHandlerTransfer.action" - "action/DPLiquidHandlerAddLiquid.action" - "action/DPLiquidHandlerCustomDelay.action" - "action/DPLiquidHandlerMix.action" - "action/DPLiquidHandlerMoveTo.action" - "action/DPLiquidHandlerRemoveLiquid.action" - "action/DPLiquidHandlerSetTiprack.action" - "action/DPLiquidHandlerTouchTip.action" - "action/DPLiquidHandlerTransferLiquid.action" + "action/LiquidHandlerAdd.action" + "action/LiquidHandlerMix.action" + "action/LiquidHandlerMoveTo.action" + "action/LiquidHandlerRemove.action" "action/EmptyIn.action" "action/FloatSingleInput.action" @@ -61,7 +57,7 @@ set(action_files "action/ResourceCreateFromOuter.action" "action/SolidDispenseAddPowderTube.action" - + "action/PumpTransfer.action" "action/Clean.action" "action/Separate.action" diff --git a/unilabos_msgs/action/LiquidHandlerAdd.action b/unilabos_msgs/action/LiquidHandlerAdd.action new file mode 100644 index 00000000..0611b276 --- /dev/null +++ b/unilabos_msgs/action/LiquidHandlerAdd.action @@ -0,0 +1,20 @@ +float64[] asp_vols +float64[] dis_vols +Resource[] reagent_sources +Resource[] targets +int32[] use_channels +float64[] flow_rates +geometry_msgs/Point[] offsets +float64[] liquid_height +float64[] blow_out_air_volume +string spread +bool is_96_well +int32 mix_time +int32 mix_vol +int32 mix_rate +float64 mix_liquid_height +string[] none_keys +--- +bool success +--- +# 反馈 \ No newline at end of file diff --git a/unilabos_msgs/action/LiquidHandlerMix.action b/unilabos_msgs/action/LiquidHandlerMix.action new file mode 100644 index 00000000..81d1b71c --- /dev/null +++ b/unilabos_msgs/action/LiquidHandlerMix.action @@ -0,0 +1,11 @@ +Resource[] targets +int32 mix_time +int32 mix_vol +float64 height_to_bottom +geometry_msgs/Point[] offsets +float64 mix_rate +string[] none_keys +--- +bool success +--- +# 反馈 \ No newline at end of file diff --git a/unilabos_msgs/action/LiquidHandlerMoveTo.action b/unilabos_msgs/action/LiquidHandlerMoveTo.action new file mode 100644 index 00000000..740d0fc6 --- /dev/null +++ b/unilabos_msgs/action/LiquidHandlerMoveTo.action @@ -0,0 +1,7 @@ +Resource well +float64 dis_to_top +int32 channel +--- +bool success +--- +# 反馈 \ No newline at end of file diff --git a/unilabos_msgs/action/LiquidHandlerRemove.action b/unilabos_msgs/action/LiquidHandlerRemove.action new file mode 100644 index 00000000..e6b43c53 --- /dev/null +++ b/unilabos_msgs/action/LiquidHandlerRemove.action @@ -0,0 +1,17 @@ +float64[] vols +Resource[] sources +Resource waste_liquid +int32[] use_channels +float64[] flow_rates +geometry_msgs/Point[] offsets +float64[] liquid_height +float64[] blow_out_air_volume +string spread +int32[] delays +bool is_96_well +float64[] top +string[] none_keys +--- +bool success +--- +# 反馈 \ No newline at end of file diff --git a/unilabos_msgs/action/LiquidHandlerTransfer.action b/unilabos_msgs/action/LiquidHandlerTransfer.action index b6e3be32..39df59bb 100644 --- a/unilabos_msgs/action/LiquidHandlerTransfer.action +++ b/unilabos_msgs/action/LiquidHandlerTransfer.action @@ -1,11 +1,25 @@ -# Bio -Resource source +float64[] asp_vols +float64[] dis_vols +Resource[] sources Resource[] targets -float64 source_vol -float64[] ratios -float64[] target_vols -float64 aspiration_flow_rate -float64[] dispense_flow_rates +Resource[] tip_racks +int32[] use_channels +float64[] asp_flow_rates +float64[] dis_flow_rates +geometry_msgs/Point[] offsets +bool touch_tip +float64[] liquid_height +float64[] blow_out_air_volume +string spread +bool is_96_well +string mix_stage +int32[] mix_times +int32 mix_vol +int32 mix_rate +float64 mix_liquid_height +int32[] delays +string[] none_keys --- bool success ---- \ No newline at end of file +--- +# 反馈 \ No newline at end of file diff --git a/unilabos_msgs/action/ResourceCreateFromOuterEasy.action b/unilabos_msgs/action/ResourceCreateFromOuterEasy.action new file mode 100644 index 00000000..f92ec2b4 --- /dev/null +++ b/unilabos_msgs/action/ResourceCreateFromOuterEasy.action @@ -0,0 +1,10 @@ +string id +string class +string parent +geometry_msgs/Point bind_locations +int32[] liquid_input_slot +string[] liquid_type +float32[] liquid_volume +--- +bool success +---