diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/joint_config.json b/unilabos/device_mesh/device/opentrons_liquid_handler/joint_config.json new file mode 100644 index 00000000..e40339da --- /dev/null +++ b/unilabos/device_mesh/device/opentrons_liquid_handler/joint_config.json @@ -0,0 +1,18 @@ +{ + "first_joint": { + "child":"first_link", + "axis" : "-y" + }, + "second_joint": { + "child":"second_link", + "axis" : "-x" + }, + "third_joint": { + "child":"third_link", + "axis" : "-z" + }, + "fourth_joint": { + "child":"fourth_link", + "axis" : "-z" + } +} \ No newline at end of file diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/macro_device.xacro b/unilabos/device_mesh/device/opentrons_liquid_handler/macro_device.xacro new file mode 100644 index 00000000..7431c20b --- /dev/null +++ b/unilabos/device_mesh/device/opentrons_liquid_handler/macro_device.xacro @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-0.fbx b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-0.fbx new file mode 100644 index 00000000..5687a596 Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-0.fbx differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-0.stl b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-0.stl new file mode 100644 index 00000000..5a2f71e8 Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-0.stl differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-1.fbx b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-1.fbx new file mode 100644 index 00000000..201167d1 Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-1.fbx differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-1.stl b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-1.stl new file mode 100644 index 00000000..a47b9020 Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-1.stl differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-2.fbx b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-2.fbx new file mode 100644 index 00000000..4e716336 Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-2.fbx differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-2.stl b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-2.stl new file mode 100644 index 00000000..a1d118ff Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-2.stl differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3a.fbx b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3a.fbx new file mode 100644 index 00000000..32234365 Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3a.fbx differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3a.stl b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3a.stl new file mode 100644 index 00000000..7d31a8d6 Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3a.stl differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3b.fbx b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3b.fbx new file mode 100644 index 00000000..8f5fd4ff Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3b.fbx differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3b.stl b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3b.stl new file mode 100644 index 00000000..fa674839 Binary files /dev/null and b/unilabos/device_mesh/device/opentrons_liquid_handler/meshes/ot2-3b.stl differ diff --git a/unilabos/device_mesh/device/opentrons_liquid_handler/param_config.json b/unilabos/device_mesh/device/opentrons_liquid_handler/param_config.json new file mode 100644 index 00000000..749feb47 --- /dev/null +++ b/unilabos/device_mesh/device/opentrons_liquid_handler/param_config.json @@ -0,0 +1,10 @@ +{ + "private_param": + { + + }, + "public_param": + { + + } +} diff --git a/unilabos/device_mesh/device/slide_w140/joint_config.json b/unilabos/device_mesh/device/slide_w140/joint_config.json new file mode 100644 index 00000000..168bb0d4 --- /dev/null +++ b/unilabos/device_mesh/device/slide_w140/joint_config.json @@ -0,0 +1,6 @@ +{ + "slider_joint": { + "child":"slider", + "axis" : "x" + } +} \ No newline at end of file diff --git a/unilabos/device_mesh/device/slide_w140/macro_device.xacro b/unilabos/device_mesh/device/slide_w140/macro_device.xacro new file mode 100644 index 00000000..ffbc6f79 --- /dev/null +++ b/unilabos/device_mesh/device/slide_w140/macro_device.xacro @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/unilabos/device_mesh/device/slide_w140/meshes/base_link.STL b/unilabos/device_mesh/device/slide_w140/meshes/base_link.STL new file mode 100755 index 00000000..f2ae347c Binary files /dev/null and b/unilabos/device_mesh/device/slide_w140/meshes/base_link.STL differ diff --git a/unilabos/device_mesh/device/slide_w140/meshes/base_link.fbx b/unilabos/device_mesh/device/slide_w140/meshes/base_link.fbx new file mode 100644 index 00000000..8439d485 Binary files /dev/null and b/unilabos/device_mesh/device/slide_w140/meshes/base_link.fbx differ diff --git a/unilabos/device_mesh/device/slide_w140/meshes/length.STL b/unilabos/device_mesh/device/slide_w140/meshes/length.STL new file mode 100755 index 00000000..df420447 Binary files /dev/null and b/unilabos/device_mesh/device/slide_w140/meshes/length.STL differ diff --git a/unilabos/device_mesh/device/slide_w140/meshes/length.fbx b/unilabos/device_mesh/device/slide_w140/meshes/length.fbx new file mode 100644 index 00000000..b46c2c1e Binary files /dev/null and b/unilabos/device_mesh/device/slide_w140/meshes/length.fbx differ diff --git a/unilabos/device_mesh/device/slide_w140/meshes/slide_end.STL b/unilabos/device_mesh/device/slide_w140/meshes/slide_end.STL new file mode 100755 index 00000000..3eaf9e01 Binary files /dev/null and b/unilabos/device_mesh/device/slide_w140/meshes/slide_end.STL differ diff --git a/unilabos/device_mesh/device/slide_w140/meshes/slide_end.fbx b/unilabos/device_mesh/device/slide_w140/meshes/slide_end.fbx new file mode 100644 index 00000000..de0331ba Binary files /dev/null and b/unilabos/device_mesh/device/slide_w140/meshes/slide_end.fbx differ diff --git a/unilabos/device_mesh/device/slide_w140/meshes/slider.STL b/unilabos/device_mesh/device/slide_w140/meshes/slider.STL new file mode 100755 index 00000000..d4b74347 Binary files /dev/null and b/unilabos/device_mesh/device/slide_w140/meshes/slider.STL differ diff --git a/unilabos/device_mesh/device/slide_w140/meshes/slider.fbx b/unilabos/device_mesh/device/slide_w140/meshes/slider.fbx new file mode 100644 index 00000000..38b9814b Binary files /dev/null and b/unilabos/device_mesh/device/slide_w140/meshes/slider.fbx differ diff --git a/unilabos/device_mesh/device/slide_w140/param_config.json b/unilabos/device_mesh/device/slide_w140/param_config.json new file mode 100644 index 00000000..d1c9213b --- /dev/null +++ b/unilabos/device_mesh/device/slide_w140/param_config.json @@ -0,0 +1,12 @@ +{ + "private_param": + { + "min_d": 0.1 , + "max_d": 0.1 , + "slider_d": 0.14 + }, + "public_param": + { + "length" :0.1 + } +} \ No newline at end of file diff --git a/unilabos/device_mesh/resource/generic_labware_tube_10_75/0_base.png b/unilabos/device_mesh/resource/generic_labware_tube_10_75/0_base.png new file mode 100644 index 00000000..d9de252f Binary files /dev/null and b/unilabos/device_mesh/resource/generic_labware_tube_10_75/0_base.png differ diff --git a/unilabos/device_mesh/resource/generic_labware_tube_10_75/meshes/0_base.glb b/unilabos/device_mesh/resource/generic_labware_tube_10_75/meshes/0_base.glb new file mode 100644 index 00000000..1c64cc4e Binary files /dev/null and b/unilabos/device_mesh/resource/generic_labware_tube_10_75/meshes/0_base.glb differ diff --git a/unilabos/device_mesh/resource/generic_labware_tube_10_75/meshes/0_base.stl b/unilabos/device_mesh/resource/generic_labware_tube_10_75/meshes/0_base.stl new file mode 100644 index 00000000..023cf1a2 Binary files /dev/null and b/unilabos/device_mesh/resource/generic_labware_tube_10_75/meshes/0_base.stl differ diff --git a/unilabos/device_mesh/resource/generic_labware_tube_10_75/meta.json b/unilabos/device_mesh/resource/generic_labware_tube_10_75/meta.json new file mode 100644 index 00000000..84f4657b --- /dev/null +++ b/unilabos/device_mesh/resource/generic_labware_tube_10_75/meta.json @@ -0,0 +1,22 @@ +{ + "fileName": "generic_labware_tube_10_75", + "related": [ + "generic_labware_0.5ml_screw_cap_tube", + "generic_labware_0.5ml_tube_rack", + "generic_labware_12_well_plate", + "sarstedt_14x200mm_tube", + "sarstedt_18x200mm_tube", + "generic_labware_1ml_tube_rack", + "generic_labware_24_well_plate", + "generic_labware_2ml_screw_cap_tube", + "generic_labware_5ml_screw_cap_tube", + "generic_labware_6_well_plate", + "generic_labware_96_well_square", + "generic_labware_96_well_pcr_plate_round", + "generic_labware_framedtiprack", + "generic_labware_plate_lid", + "generic_labware_reservoir", + "generic_labware_tip_box", + "generic_labware_tube_10_75" + ] +} diff --git a/unilabos/device_mesh/resource/generic_labware_tube_10_75/modal.xacro b/unilabos/device_mesh/resource/generic_labware_tube_10_75/modal.xacro new file mode 100644 index 00000000..65711112 --- /dev/null +++ b/unilabos/device_mesh/resource/generic_labware_tube_10_75/modal.xacro @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/unilabos/device_mesh/resource/tecan_nested_tip_rack/meshes/plate.glb b/unilabos/device_mesh/resource/tecan_nested_tip_rack/meshes/plate.glb new file mode 100644 index 00000000..afb6c99b Binary files /dev/null and b/unilabos/device_mesh/resource/tecan_nested_tip_rack/meshes/plate.glb differ diff --git a/unilabos/device_mesh/resource/tecan_nested_tip_rack/meshes/plate.stl b/unilabos/device_mesh/resource/tecan_nested_tip_rack/meshes/plate.stl new file mode 100644 index 00000000..2655ff94 Binary files /dev/null and b/unilabos/device_mesh/resource/tecan_nested_tip_rack/meshes/plate.stl differ diff --git a/unilabos/device_mesh/resource/tecan_nested_tip_rack/meta.json b/unilabos/device_mesh/resource/tecan_nested_tip_rack/meta.json new file mode 100644 index 00000000..1b437d1f --- /dev/null +++ b/unilabos/device_mesh/resource/tecan_nested_tip_rack/meta.json @@ -0,0 +1,86 @@ +{ + "fileName": "tecan_nested_tip_rack", + "related": [ + "tecan_techrom", + "tecan_holder_transfer_tool", + "tecan_fluent_9_grid_segment_cutout", + "tecan_fluent_centric_gripper", + "tecan_fluent_eccentric_gripper", + "tecan_evo100", + "tecan_fluent_mp_diti_nest_segment", + "tecan_fluent_4x100_trough", + "tecan_fluent_1080_extended", + "tecan_fluent_1_1_1000_trough", + "tecan_fluent_50ml_tube_runner_10_v2", + "tecan_fluent_15ml_tube_runner_16_v2", + "tecan_fluent_1_16_16_tube_runner", + "tecan_fluent_1.5ml_tube_runner_v2", + "tecan_fluent_1_24_10_tube_runner", + "tecan_fluent_1_24_13_tube_runner", + "tecan_fluent_3x320_reagent_trough_v2", + "tecan_fluent_32_tube_runner_v2", + "tecan_fluent_1_4_100_trough", + "tecan_fluent_2_grid_segment", + "tecan_fluent_2_4_100_trough_waste", + "tecan_fluent_3_grid_segment", + "tecan_fluent_nest_waste_segment_v2", + "tecan_fluent_320ml_reagent_trough", + "tecan_fluent_4_landscape_61mm_nest_segment", + "tecan_fluent_4_landscape_61mm_nest_segment_waste", + "tecan_fluent_4_landscape_7mm_nest_segment", + "tecan_fluent_4_landscape_7mm_nest_segment_waste", + "tecan_fluent_hotel_deck_4", + "tecan_fluent_480_extended", + "tecan_fluent_4x100_reagent_trough_v2", + "tecan_fluent_5_landscape_61mm_nest_segment", + "tecan_fluent_5_landscape_7mm_nest_segment", + "tecan_fluent_hotel_deck_5", + "tecan_fluent_6_grid_segment", + "tecan_fluent_nest_landscape_segment_v2", + "tecan_fluent_6_landscape_7mm_nest_segment", + "tecan_fluent_deck_segment_6_v2", + "tecan_fluent_fca_diti_segment_v2", + "tecan_fluent_6_nest_incubator", + "tecan_fluent_plate_nest", + "tecan_fluent_780_extended", + "tecan_fluent_plate_holder", + "tecan_fluent_8_grid_segment", + "tecan_fluent_8_grid_segment_evo", + "tecan_fluent_hotel_deck_9", + "tecan_carousel", + "tecan_carousel_stacker_10", + "tecan_carousel_stacker_25", + "tecan_carousel_stacker_6", + "tecan_fluent_coolheat_microplate_segment_v2", + "tecan_fluent_fca_diti_tray", + "tecan_fluent_trough_waste", + "tecan_fluent_id_left", + "tecan_fluent_id_middle", + "tecan_fluent_lower_6_grid_v2", + "tecan_fluent_mc384_nest", + "tecan_fluent_mca_44mm_nest", + "tecan_fluent_deck_segment_4_v2", + "tecan_fluent_mca_base_segment_384_v2", + "tecan_fluent_waste_module", + "tecan_fluent_reagent_block", + "tecan_fluent_tube_grippers", + "tecan_fluent_washstation_waste_v2", + "tecan_carrier_additive_trough_3_pce_max_100ml", + "tecan_carrier_384_well_mp_3_pos_accessible_roma", + "tecan_carrier_rack_3_diti_width_6", + "tecan_transport_box_diti_tray_1000ul", + "tecan_transport_box_diti_tray_200ul", + "tecan_magicprep_ngs_sample_deck", + "tecan_fluent_shelf_large", + "tecan_fluent_shelf_small", + "tecan_spacer_29_9_te_chrom", + "tecan_teshake_adapter_2", + "tecan_teshake_base", + "tecan_tevacs_base", + "tecan_tevacs_plate_park", + "tecan_tevacs_spacer", + "tecan_tevacs_vacuum", + "tecan_tip_box", + "tecan_nested_tip_rack" + ] +} diff --git a/unilabos/device_mesh/resource/tecan_nested_tip_rack/modal.xacro b/unilabos/device_mesh/resource/tecan_nested_tip_rack/modal.xacro new file mode 100644 index 00000000..e29617fa --- /dev/null +++ b/unilabos/device_mesh/resource/tecan_nested_tip_rack/modal.xacro @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/unilabos/device_mesh/resource/tecan_nested_tip_rack/plate.png b/unilabos/device_mesh/resource/tecan_nested_tip_rack/plate.png new file mode 100644 index 00000000..34d7ac68 Binary files /dev/null and b/unilabos/device_mesh/resource/tecan_nested_tip_rack/plate.png differ diff --git a/unilabos/device_mesh/resource_visalization.py b/unilabos/device_mesh/resource_visalization.py new file mode 100644 index 00000000..d4a1a712 --- /dev/null +++ b/unilabos/device_mesh/resource_visalization.py @@ -0,0 +1,132 @@ +from launch import LaunchService +from launch import LaunchDescription +from launch_ros.actions import Node as nd +import xacro +from lxml import etree + + +class ResourceVisualization: + def __init__(self, device: dict, registry: dict, resource: dict, enable_rviz: bool = False): + + """初始化资源可视化类 + + Args: + device: 设备配置字典 + registry: 注册表字典 + """ + self.launch_service = LaunchService() + self.launch_description = LaunchDescription() + self.resource_dict = resource + self.resource_model = {} + self.resource_type = ['plate', 'container'] + + self.robot_state_str= ''' + + + + ''' + self.root = etree.fromstring(self.robot_state_str) + + xacro_uri = self.root.nsmap["xacro"] + # 遍历设备节点 + for node in device['nodes']: + if node['type'] == 'device': + device_class = node['class'] + + # 检查设备类型是否在注册表中 + if device_class not in registry.device_type_registry.keys(): + raise ValueError(f"设备类型 {device_class} 未在注册表中注册") + + elif "model" in device_class.keys(): + model_config = registry.device_type_registry[device_class]['model'] + + if model_config['type'] == 'device': + new_include = etree.SubElement(self.root, f"{{{xacro_uri}}}include") + new_include.set("filename", f"{model_config['mesh']}/macro_device.xacro") + new_dev = etree.SubElement(self.root, f"{{{xacro_uri}}}{model_config['mesh']}") + new_dev.set("parent_link", "world") + + elif node['type'] in self.resource_type: + resource_class = node['class'] + if resource_class not in registry.resource_type_registry.keys(): + raise ValueError(f"资源类型 {resource_class} 未在注册表中注册") + if model_config['type'] == 'resource': + model_config = registry.resource_type_registry[resource_class]['model'] + self.resource_model[node['id']] = model_config['mesh'] + if model_config['children_mesh'] is not None: + self.resource_model[f"{node['id']}_"] = model_config['children_mesh'] + + re = etree.tostring(self.root, encoding="unicode") + doc = xacro.parse(re) + xacro.process_doc(doc) + + + def create_launch_description(self, urdf_str: str, enable_rviz: bool = False) -> LaunchDescription: + """ + 创建launch描述,包含robot_state_publisher和move_group节点 + + Args: + urdf_str: URDF文本 + enable_rviz: 是否启用RViz可视化 + + Returns: + LaunchDescription: launch描述对象 + """ + + + # 解析URDF文件 + robot_description = urdf_str + + # 创建robot_state_publisher节点 + robot_state_publisher = nd( + package='robot_state_publisher', + executable='robot_state_publisher', + name='robot_state_publisher', + output='screen', + parameters=[{ + 'robot_description': robot_description, + 'use_sim_time': False + }] + ) + + # 创建move_group节点 + move_group = nd( + package='moveit_ros_move_group', + executable='move_group', + output='screen', + parameters=[{ + 'robot_description': robot_description, + 'allow_trajectory_execution': True, + 'capabilities': '', + 'disable_capabilities': '', + 'monitor_dynamics': False, + 'publish_monitored_planning_scene': True + }] + ) + + # 将节点添加到launch描述中 + self.launch_description.add_action(robot_state_publisher) + self.launch_description.add_action(move_group) + + # 如果启用RViz,添加RViz节点 + if enable_rviz: + rviz_node = nd( + package='rviz2', + executable='rviz2', + name='rviz2', + output='screen' + ) + self.launch_description.add_action(rviz_node) + + return self.launch_description + + def start(self, urdf_str: str) -> None: + """ + 启动可视化服务 + + Args: + urdf_str: URDF文件路径 + """ + launch_description = self.create_launch_description(urdf_str) + self.launch_service.include_launch_description(launch_description) + self.launch_service.run() \ No newline at end of file diff --git a/unilabos/devices/agv/ur_arm_task.py b/unilabos/devices/agv/ur_arm_task.py index 8c84c855..47a7c931 100644 --- a/unilabos/devices/agv/ur_arm_task.py +++ b/unilabos/devices/agv/ur_arm_task.py @@ -77,9 +77,6 @@ class UrArmTask(): if n > retry: raise Exception('Can not connect to the arm info server!') - self.pose_data = {} - self.pose_file = 'C:\\auto\\unilabos\\unilabos\\devices\\agv\\pose.json' - self.reload_pose() self.dash_c.stop() def arm_init(self): diff --git a/unilabos/devices/ros_dev/__init__.py b/unilabos/devices/ros_dev/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/unilabos/devices/ros_dev/joint_republisher.py b/unilabos/devices/ros_dev/joint_republisher.py new file mode 100644 index 00000000..f9797ea9 --- /dev/null +++ b/unilabos/devices/ros_dev/joint_republisher.py @@ -0,0 +1,51 @@ +import rclpy,json +from rclpy.node import Node +from sensor_msgs.msg import JointState +from std_msgs.msg import String +from rclpy.callback_groups import ReentrantCallbackGroup + +class JointRepublisher(Node): + def __init__(self,device_id): + super().__init__(device_id) + + # print('-'*20,device_id) + self.joint_repub = self.create_publisher(String,f'/devices/{device_id}/joint_state_repub',10) + # 创建订阅者 + self.create_subscription( + JointState, + '/joint_states', + self.listener_callback, + 10, + callback_group=ReentrantCallbackGroup() + ) + self.msg = String() + + def listener_callback(self, msg:JointState): + + try: + json_dict = {} + json_dict["name"] = list(msg.name) + json_dict["position"] = list(msg.position) + json_dict["velocity"] = list(msg.velocity) + json_dict["effort"] = list(msg.effort) + + self.msg.data = str(json_dict) + self.joint_repub.publish(self.msg) + # print('-'*20) + # print(self.msg.data) + + except Exception as e: + print(e) + + +def main(): + + rclpy.init() + subscriber = JointRepublisher() + rclpy.spin(subscriber) + subscriber.destroy_node() + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/unilabos/registry/devices/robot_gripper.yaml b/unilabos/registry/devices/robot_gripper.yaml index 04ea338b..15881df1 100644 --- a/unilabos/registry/devices/robot_gripper.yaml +++ b/unilabos/registry/devices/robot_gripper.yaml @@ -19,7 +19,9 @@ gripper.mock: result: position: position effort: torque - + model: + tpye: device + mesh: slide_w140 gripper.misumi_rz: description: Misumi RZ gripper @@ -35,4 +37,4 @@ gripper.misumi_rz: command: command feedback: {} result: - success: success \ No newline at end of file + success: success diff --git a/unilabos/registry/resources/opentrons/plates.yaml b/unilabos/registry/resources/opentrons/plates.yaml index f15da8ed..efc65650 100644 --- a/unilabos/registry/resources/opentrons/plates.yaml +++ b/unilabos/registry/resources/opentrons/plates.yaml @@ -51,7 +51,11 @@ nest_96_wellplate_100ul_pcr_full_skirt: class: module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_100ul_pcr_full_skirt type: pylabrobot - + model: + type: resource + mesh: /home/z43/git_pj/uni-lab-assets/device_models/tecan_nested_tip_rack/meshes/plate.stl + children_mesh: /home/z43/git_pj/uni-lab-assets/device_models/generic_labware_tube_10_75/meshes/0_base.stl + appliedbiosystemsmicroamp_384_wellplate_40ul: description: Applied Biosystems microamp 384 wellplate 40ul class: