From 4224008a92f76c9340bba2455cde075282e3b2f9 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Sun, 29 Jun 2025 19:18:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E8=A1=A8=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=A1=A5=E5=85=A8=20&=20Action=E8=87=AA=E5=8A=A8=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=20(#57)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add biomek.py demo implementation * 更新LiquidHandlerBiomek类,添加资源创建功能,优化协议创建方法,修复部分代码格式问题,更新YAML配置以支持新功能。 * Test * fix biomek success type * Convert LH action to biomek. * Update biomek.py * 注册表上报handle和schema (param input) * 修复biomek缺少的字段 * delete 's' * Remove warnings * Update biomek.py * Biomek test * Update biomek.py * 新增transfer_biomek的msg * New transfer_biomek * Updated transfer_biomek * 更新transfer_biomek的msg * 更新transfer_biomek的msg * 支持Biomek创建 * new action * fix key name typo * New parameter for biomek to run. * Refine * Update * new actions * new actions * 1 * registry * fix biomek startup add action handles * fix handles not as default entry * biomek_test.py biomek_test.py是最新的版本,运行它会生成complete_biomek_protocol.json * Update biomek.py * biomek_test.py * fix liquid_handler.biomek handles * host node新增resource add时间统计 create_resource新增handle bump version to 0.9.2 * 修正物料上传时间 改用biomek_test 增加ResultInfoEncoder 支持返回结果上传 * 正确发送return_info结果 * 同步执行状态信息 * 取消raiseValueError提示 * Update biomek_test.py * 0608 DONE * 同步了Biomek.py 现在应可用 * biomek switch back to non-test * temp disable initialize resource * 37-biomek-i5i7 (#40) * add biomek.py demo implementation * 更新LiquidHandlerBiomek类,添加资源创建功能,优化协议创建方法,修复部分代码格式问题,更新YAML配置以支持新功能。 * Test * fix biomek success type * Convert LH action to biomek. * Update biomek.py * 注册表上报handle和schema (param input) * 修复biomek缺少的字段 * delete 's' * Remove warnings * Update biomek.py * Biomek test * Update biomek.py * 新增transfer_biomek的msg * New transfer_biomek * Updated transfer_biomek * 更新transfer_biomek的msg * 更新transfer_biomek的msg * 支持Biomek创建 * new action * fix key name typo * New parameter for biomek to run. * Refine * Update * new actions * new actions * 1 * registry * fix biomek startup add action handles * fix handles not as default entry * biomek_test.py biomek_test.py是最新的版本,运行它会生成complete_biomek_protocol.json * Update biomek.py * biomek_test.py * fix liquid_handler.biomek handles * host node新增resource add时间统计 create_resource新增handle bump version to 0.9.2 * 修正物料上传时间 改用biomek_test 增加ResultInfoEncoder 支持返回结果上传 * 正确发送return_info结果 * 同步执行状态信息 * 取消raiseValueError提示 * Update biomek_test.py * 0608 DONE * 同步了Biomek.py 现在应可用 * biomek switch back to non-test * temp disable initialize resource * Refine biomek * Refine copy issue * Refine --------- Co-authored-by: Junhan Chang Co-authored-by: Guangxin Zhang Co-authored-by: qxw138 * Device visualization (#39) * Update README and MQTTClient for installation instructions and code improvements * feat: 支持local_config启动 add: 增加对crt path的说明,为传入config.py的相对路径 move: web component * add: registry description * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * feat: node_info_update srv fix: OTDeck cant create * close #12 feat: slave node registry * feat: show machine name fix: host node registry not uploaded * feat: add hplc registry * feat: add hplc registry * fix: hplc status typo * fix: devices/ * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * fix: device.class possible null * fix: HPLC additions with online service * fix: slave mode spin not working * fix: slave mode spin not working * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * feat: 多ProtocolNode 允许子设备ID相同 feat: 上报发现的ActionClient feat: Host重启动,通过discover机制要求slaveNode重新注册,实现信息及时上报 * feat: 支持env设置config * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 * Device visualization (#14) * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 --------- Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> * fix: missing hostname in devices_names fix: upload_file for model file * fix: missing paho-mqtt package bump version to 0.9.0 * fix startup add ResourceCreateFromOuter.action * fix type hint * update actions * update actions * host node add_resource_from_outer fix cmake list * pass device config to device class * add: bind_parent_ids to resource create action fix: message convert string * fix: host node should not be re_discovered * feat: resource tracker support dict * feat: add more necessary params * feat: fix boolean null in registry action data * feat: add outer resource * 编写mesh添加action * feat: append resource * add action * feat: vis 2d for plr * fix * fix: browser on rviz * fix: cloud bridge error fallback to local * fix: salve auto run rviz * 初始化两个plate * Device visualization (#22) * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 * 编写mesh添加action * add action * fix * fix: browser on rviz * fix: cloud bridge error fallback to local * fix: salve auto run rviz * 初始化两个plate --------- Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> * fix: multi channel * fix: aspirate * fix: aspirate * fix: aspirate * fix: aspirate * 提交 * fix: jobadd * fix: jobadd * fix: msg converter * tijiao * add resource creat easy action * identify debug msg * mq client id * 提取lh的joint发布 * unify liquid_handler definition * 修改物料跟随与物料添加逻辑 修改物料跟随与物料添加逻辑 将joint_publisher类移出lh的backends,但仍需要对lh的backends进行一些改写 * Revert "修改物料跟随与物料添加逻辑" This reverts commit 498c997ad764263366f6d6207e0722fbc7a909a8. * Reapply "修改物料跟随与物料添加逻辑" This reverts commit 3a60d2ae8125a7b24506bb681e3baaf69f2ebf6b. * Revert "Merge remote-tracking branch 'upstream/dev' into device_visualization" This reverts commit fa727220afa8546b84f1763730818d6360c26251, reversing changes made to 498c997ad764263366f6d6207e0722fbc7a909a8. * 修改物料放下时的方法,如果选择 修改物料放下时的方法, 如果选择drop_trash,则删除物料显示 如果选择drop,则让其解除连接 * add biomek.py demo implementation * 更新LiquidHandlerBiomek类,添加资源创建功能,优化协议创建方法,修复部分代码格式问题,更新YAML配置以支持新功能。 * Test * fix biomek success type * Convert LH action to biomek. * Update biomek.py * 注册表上报handle和schema (param input) * 修复biomek缺少的字段 * delete 's' * Remove warnings * Update biomek.py * Biomek test * Update biomek.py * 新增transfer_biomek的msg * New transfer_biomek * Updated transfer_biomek * 更新transfer_biomek的msg * 更新transfer_biomek的msg * 支持Biomek创建 * new action * fix key name typo * New parameter for biomek to run. * Refine * Update * new actions * new actions * 1 * registry * fix biomek startup add action handles * fix handles not as default entry * unilab添加moveit启动 1,整合所有moveit节点到一个move_group中,并整合所有的controller依次激活 2,添加pymoveit2的节点,使用json可直接启动 3,修改机械臂规划方式,添加约束,让冗余关节不会进行过多移动 * biomek_test.py biomek_test.py是最新的版本,运行它会生成complete_biomek_protocol.json * Update biomek.py * biomek_test.py * fix liquid_handler.biomek handles * 修改物体attach时,多次赋值当前时间导致卡顿问题, * Revert "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit 56d45b94f55d1339d54d9725ffe3c8cca7cbb73a. * Reapply "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit 07d9db20c3b43bc8af048b9e2c4af210ec16d446. * 添加缺少物料:"plate_well_G12", * host node新增resource add时间统计 create_resource新增handle bump version to 0.9.2 * 修正物料上传时间 改用biomek_test 增加ResultInfoEncoder 支持返回结果上传 * 正确发送return_info结果 * 同步执行状态信息 * 取消raiseValueError提示 * Update biomek_test.py * 0608 DONE * 同步了Biomek.py 现在应可用 * biomek switch back to non-test * temp disable initialize resource * add * fix tip resource data * liquid states * change to debug level * Revert "change to debug level" This reverts commit 5d9953c3e58d9f33818f21232c3fdcc30a4f766c. * Reapply "change to debug level" This reverts commit 2487bb6ffc6590b2da13a3dd5226825e0a164993. * fix tip resource data * add full device * add moveit yaml * 修复moveit 增加post_init阶段,给予ros_node反向 * remove necessary node * fix moveit action client * remove necessary imports * Update moveit_interface.py * fix handler_key uppercase * json add liquids * fix setup * add * change to "sources" and "targets" for lh * bump version * remove parent's parent link --------- Co-authored-by: Harvey Que Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: Junhan Chang Co-authored-by: Guangxin Zhang Co-authored-by: qxw138 * Device visualization (#41) * Update README and MQTTClient for installation instructions and code improvements * feat: 支持local_config启动 add: 增加对crt path的说明,为传入config.py的相对路径 move: web component * add: registry description * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * feat: node_info_update srv fix: OTDeck cant create * close #12 feat: slave node registry * feat: show machine name fix: host node registry not uploaded * feat: add hplc registry * feat: add hplc registry * fix: hplc status typo * fix: devices/ * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * fix: device.class possible null * fix: HPLC additions with online service * fix: slave mode spin not working * fix: slave mode spin not working * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * feat: 多ProtocolNode 允许子设备ID相同 feat: 上报发现的ActionClient feat: Host重启动,通过discover机制要求slaveNode重新注册,实现信息及时上报 * feat: 支持env设置config * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 * Device visualization (#14) * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 --------- Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> * fix: missing hostname in devices_names fix: upload_file for model file * fix: missing paho-mqtt package bump version to 0.9.0 * fix startup add ResourceCreateFromOuter.action * fix type hint * update actions * update actions * host node add_resource_from_outer fix cmake list * pass device config to device class * add: bind_parent_ids to resource create action fix: message convert string * fix: host node should not be re_discovered * feat: resource tracker support dict * feat: add more necessary params * feat: fix boolean null in registry action data * feat: add outer resource * 编写mesh添加action * feat: append resource * add action * feat: vis 2d for plr * fix * fix: browser on rviz * fix: cloud bridge error fallback to local * fix: salve auto run rviz * 初始化两个plate * Device visualization (#22) * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 * 编写mesh添加action * add action * fix * fix: browser on rviz * fix: cloud bridge error fallback to local * fix: salve auto run rviz * 初始化两个plate --------- Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> * fix: multi channel * fix: aspirate * fix: aspirate * fix: aspirate * fix: aspirate * 提交 * fix: jobadd * fix: jobadd * fix: msg converter * tijiao * add resource creat easy action * identify debug msg * mq client id * 提取lh的joint发布 * unify liquid_handler definition * 修改物料跟随与物料添加逻辑 修改物料跟随与物料添加逻辑 将joint_publisher类移出lh的backends,但仍需要对lh的backends进行一些改写 * Revert "修改物料跟随与物料添加逻辑" This reverts commit 498c997ad764263366f6d6207e0722fbc7a909a8. * Reapply "修改物料跟随与物料添加逻辑" This reverts commit 3a60d2ae8125a7b24506bb681e3baaf69f2ebf6b. * Revert "Merge remote-tracking branch 'upstream/dev' into device_visualization" This reverts commit fa727220afa8546b84f1763730818d6360c26251, reversing changes made to 498c997ad764263366f6d6207e0722fbc7a909a8. * 修改物料放下时的方法,如果选择 修改物料放下时的方法, 如果选择drop_trash,则删除物料显示 如果选择drop,则让其解除连接 * add biomek.py demo implementation * 更新LiquidHandlerBiomek类,添加资源创建功能,优化协议创建方法,修复部分代码格式问题,更新YAML配置以支持新功能。 * Test * fix biomek success type * Convert LH action to biomek. * Update biomek.py * 注册表上报handle和schema (param input) * 修复biomek缺少的字段 * delete 's' * Remove warnings * Update biomek.py * Biomek test * Update biomek.py * 新增transfer_biomek的msg * New transfer_biomek * Updated transfer_biomek * 更新transfer_biomek的msg * 更新transfer_biomek的msg * 支持Biomek创建 * new action * fix key name typo * New parameter for biomek to run. * Refine * Update * new actions * new actions * 1 * registry * fix biomek startup add action handles * fix handles not as default entry * unilab添加moveit启动 1,整合所有moveit节点到一个move_group中,并整合所有的controller依次激活 2,添加pymoveit2的节点,使用json可直接启动 3,修改机械臂规划方式,添加约束,让冗余关节不会进行过多移动 * biomek_test.py biomek_test.py是最新的版本,运行它会生成complete_biomek_protocol.json * Update biomek.py * biomek_test.py * fix liquid_handler.biomek handles * 修改物体attach时,多次赋值当前时间导致卡顿问题, * Revert "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit 56d45b94f55d1339d54d9725ffe3c8cca7cbb73a. * Reapply "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit 07d9db20c3b43bc8af048b9e2c4af210ec16d446. * 添加缺少物料:"plate_well_G12", * host node新增resource add时间统计 create_resource新增handle bump version to 0.9.2 * 修正物料上传时间 改用biomek_test 增加ResultInfoEncoder 支持返回结果上传 * 正确发送return_info结果 * 同步执行状态信息 * 取消raiseValueError提示 * Update biomek_test.py * 0608 DONE * 同步了Biomek.py 现在应可用 * biomek switch back to non-test * temp disable initialize resource * add * fix tip resource data * liquid states * change to debug level * Revert "change to debug level" This reverts commit 5d9953c3e58d9f33818f21232c3fdcc30a4f766c. * Reapply "change to debug level" This reverts commit 2487bb6ffc6590b2da13a3dd5226825e0a164993. * fix tip resource data * add full device * add moveit yaml * 修复moveit 增加post_init阶段,给予ros_node反向 * remove necessary node * fix moveit action client * remove necessary imports * Update moveit_interface.py * fix handler_key uppercase * json add liquids * fix setup * add * change to "sources" and "targets" for lh * bump version * remove parent's parent link * change arm's name * change name --------- Co-authored-by: Harvey Que Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: q434343 <73513873+q434343@users.noreply.github.com> Co-authored-by: Junhan Chang Co-authored-by: Guangxin Zhang Co-authored-by: qxw138 * fix move it * fix move it * create_resource * bump ver modify slot type * 增加modbus支持 调整protocol node以更好支持多种类型的read和write * 调整protocol node以更好支持多种类型的read和write * 补充日志 * Device visualization (#42) * Update README and MQTTClient for installation instructions and code improvements * feat: 支持local_config启动 add: 增加对crt path的说明,为传入config.py的相对路径 move: web component * add: registry description * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * feat: node_info_update srv fix: OTDeck cant create * close #12 feat: slave node registry * feat: show machine name fix: host node registry not uploaded * feat: add hplc registry * feat: add hplc registry * fix: hplc status typo * fix: devices/ * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * fix: device.class possible null * fix: HPLC additions with online service * fix: slave mode spin not working * fix: slave mode spin not working * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * feat: 多ProtocolNode 允许子设备ID相同 feat: 上报发现的ActionClient feat: Host重启动,通过discover机制要求slaveNode重新注册,实现信息及时上报 * feat: 支持env设置config * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 * Device visualization (#14) * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 --------- Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> * fix: missing hostname in devices_names fix: upload_file for model file * fix: missing paho-mqtt package bump version to 0.9.0 * fix startup add ResourceCreateFromOuter.action * fix type hint * update actions * update actions * host node add_resource_from_outer fix cmake list * pass device config to device class * add: bind_parent_ids to resource create action fix: message convert string * fix: host node should not be re_discovered * feat: resource tracker support dict * feat: add more necessary params * feat: fix boolean null in registry action data * feat: add outer resource * 编写mesh添加action * feat: append resource * add action * feat: vis 2d for plr * fix * fix: browser on rviz * fix: cloud bridge error fallback to local * fix: salve auto run rviz * 初始化两个plate * Device visualization (#22) * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 * 编写mesh添加action * add action * fix * fix: browser on rviz * fix: cloud bridge error fallback to local * fix: salve auto run rviz * 初始化两个plate --------- Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> * fix: multi channel * fix: aspirate * fix: aspirate * fix: aspirate * fix: aspirate * 提交 * fix: jobadd * fix: jobadd * fix: msg converter * tijiao * add resource creat easy action * identify debug msg * mq client id * 提取lh的joint发布 * unify liquid_handler definition * 修改物料跟随与物料添加逻辑 修改物料跟随与物料添加逻辑 将joint_publisher类移出lh的backends,但仍需要对lh的backends进行一些改写 * Revert "修改物料跟随与物料添加逻辑" This reverts commit 498c997ad764263366f6d6207e0722fbc7a909a8. * Reapply "修改物料跟随与物料添加逻辑" This reverts commit 3a60d2ae8125a7b24506bb681e3baaf69f2ebf6b. * Revert "Merge remote-tracking branch 'upstream/dev' into device_visualization" This reverts commit fa727220afa8546b84f1763730818d6360c26251, reversing changes made to 498c997ad764263366f6d6207e0722fbc7a909a8. * 修改物料放下时的方法,如果选择 修改物料放下时的方法, 如果选择drop_trash,则删除物料显示 如果选择drop,则让其解除连接 * unilab添加moveit启动 1,整合所有moveit节点到一个move_group中,并整合所有的controller依次激活 2,添加pymoveit2的节点,使用json可直接启动 3,修改机械臂规划方式,添加约束,让冗余关节不会进行过多移动 * 修改物体attach时,多次赋值当前时间导致卡顿问题, * Revert "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit 56d45b94f55d1339d54d9725ffe3c8cca7cbb73a. * Reapply "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit 07d9db20c3b43bc8af048b9e2c4af210ec16d446. * 添加缺少物料:"plate_well_G12", * add * fix tip resource data * liquid states * change to debug level * Revert "change to debug level" This reverts commit 5d9953c3e58d9f33818f21232c3fdcc30a4f766c. * Reapply "change to debug level" This reverts commit 2487bb6ffc6590b2da13a3dd5226825e0a164993. * fix tip resource data * add full device * add moveit yaml * 修复moveit 增加post_init阶段,给予ros_node反向 * remove necessary node * fix moveit action client * remove necessary imports * Update moveit_interface.py * fix handler_key uppercase * json add liquids * fix setup * add * change to "sources" and "targets" for lh * bump version * remove parent's parent link * change arm's name * change name * fix ik error --------- Co-authored-by: Harvey Que Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: q434343 <73513873+q434343@users.noreply.github.com> Co-authored-by: Junhan Chang * Add Mock Device for Organic Synthesis\添加有机合成的虚拟仪器和Protocol (#43) * Add Device MockChiller Add device MockChiller * Add Device MockFilter * Add Device MockPump * Add Device MockRotavap * Add Device MockSeparator * Add Device MockStirrer * Add Device MockHeater * Add Device MockVacuum * Add Device MockSolenoidValve * Add Device Mock \_init_.py * 规范模拟设备代码与注册表信息 * 更改Mock大写文件夹名 * 删除大写目录 * Edited Mock device json * Match mock device with action * Edit mock device yaml * Add new action * Add Virtual Device, Action, YAML, Protocol for Organic Syn * 单独分类测试的protocol文件夹 * 更名Action --------- Co-authored-by: Xuwznln <18435084+Xuwznln@users.noreply.github.com> * bump version & protocol fix * hotfix: Add macos_sdk_config (#46) Co-authored-by: quehh * include device_mesh when pip install * 测试自动构建 * try build fix * try build * test artifacts * hotfix: Add .certs in .gitignore * create container * container 添加和更新完成 * Device registry port (#49) * Update README and MQTTClient for installation instructions and code improvements * feat: 支持local_config启动 add: 增加对crt path的说明,为传入config.py的相对路径 move: web component * add: registry description * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * feat: node_info_update srv fix: OTDeck cant create * close #12 feat: slave node registry * feat: show machine name fix: host node registry not uploaded * feat: add hplc registry * feat: add hplc registry * fix: hplc status typo * fix: devices/ * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * fix: device.class possible null * fix: HPLC additions with online service * fix: slave mode spin not working * fix: slave mode spin not working * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * feat: 多ProtocolNode 允许子设备ID相同 feat: 上报发现的ActionClient feat: Host重启动,通过discover机制要求slaveNode重新注册,实现信息及时上报 * feat: 支持env设置config * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 * Device visualization (#14) * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 --------- Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> * fix: missing hostname in devices_names fix: upload_file for model file * fix: missing paho-mqtt package bump version to 0.9.0 * fix startup add ResourceCreateFromOuter.action * fix type hint * update actions * update actions * host node add_resource_from_outer fix cmake list * pass device config to device class * add: bind_parent_ids to resource create action fix: message convert string * fix: host node should not be re_discovered * feat: resource tracker support dict * feat: add more necessary params * feat: fix boolean null in registry action data * feat: add outer resource * 编写mesh添加action * feat: append resource * add action * feat: vis 2d for plr * fix * fix: browser on rviz * fix: cloud bridge error fallback to local * fix: salve auto run rviz * 初始化两个plate * Device visualization (#22) * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * 完成启动OT并联动rviz * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 * 编写mesh添加action * add action * fix * fix: browser on rviz * fix: cloud bridge error fallback to local * fix: salve auto run rviz * 初始化两个plate --------- Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> * fix: multi channel * fix: aspirate * fix: aspirate * fix: aspirate * fix: aspirate * 提交 * fix: jobadd * fix: jobadd * fix: msg converter * tijiao * add resource creat easy action * identify debug msg * mq client id * unify liquid_handler definition * Update virtual_device.yaml * 更正了stir和heater的连接方式 * 区分了虚拟仪器中的八通阀和电磁阀,添加了两个阀门的驱动 * 修改了add protocol * 修复了阀门更新版的bug * 修复了添加protocol前缀导致的不能启动的bug * Fix handles * bump version to 0.9.6 * add resource edge upload * update container registry and handles * add virtual_separator virtual_rotavap fix transfer_pump * fix container value add parent_name to edge device id * 大图的问题都修复好了,添加了gassource和vacuum pump的驱动以及注册表 * default resource upload mode is false * 添加了icon的文件名在注册表里面 * 修改了json图中link的格式 * fix resource and edge upload * fix device ports * Fix edge id * 移除device的父节点关联 * separate registry sync and resource_add * 默认不进行注册表报送,通过命令unilabos-register或者增加启动参数 * 完善tip * protocol node不再嵌套显示 * bump version to 0.9.7 新增一个测试PumpTransferProtocol的teststation,亲测可以运行,将八通阀们和转移泵与pump_protocol适配 * protocol node 执行action不应携带自身device id * 添加了一套简易双八通阀工作站JSON,亲测能跑 * 修复了很多protocol,亲测能跑 * 添加了run column和filter through的protocol,亲测能跑 * fix mock_reactor * 修改了大图和小图的json,但是在前端上没看到改变 --------- Co-authored-by: Harvey Que Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: q434343 <73513873+q434343@users.noreply.github.com> Co-authored-by: Junhan Chang * 更新workstation注册表 * 添加了两个protocol的检索功能 (#51) * 添加了两个protocol的检索liquid type功能 * fix workstation registry * 修复了没连接的几个仪器的link,添加了container的icon * 修改了json和注册表,现在大图全部的device都链接上了 * 修复了小图的json图,线全部连上了 * add work_station protocol handles (ports) * fix workstation action handle --------- Co-authored-by: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Co-authored-by: Junhan Chang * 新增注册表补全功能,修复Protocol执行失败 * 支持通过导入方式补全注册表,新增工作流unilabos_device_id字段 * 修复不启用注册表补充就无法启动的bug * 修复部分识别error * 修复静态方法识别get status,注册表支持python类型 * status types对于嵌套类型返回的对象,暂时处理成字符串,无法直接进行转换 * 支持通过list[int],list[float]进行Int64MultiArray,Float64MultiArray的替换 * 成功动态导入的不再需要使用静态导入 * Fix handle names (#55) * fix handle names * improve evacuateAndRefill gas source finding * add camera and dependency (#56) * 修复auto-的Action在protocol node下错误注册 --------- Co-authored-by: Junhan Chang Co-authored-by: Guangxin Zhang Co-authored-by: qxw138 Co-authored-by: q434343 <73513873+q434343@users.noreply.github.com> Co-authored-by: Harvey Que Co-authored-by: Kongchang Feng <2100011801@stu.pku.edu.cn> Co-authored-by: hh. <103566763+Mile-Away@users.noreply.github.com> Co-authored-by: quehh Co-authored-by: Harvey Que Co-authored-by: Junhan Chang --- test/experiments/camera.json | 45 + .../comprehensive_station.json | 14 +- unilabos-linux-64.yaml | 3 +- unilabos-osx-arm64.yaml | 3 +- unilabos-win64.yaml | 26 +- unilabos/app/controler.py | 15 +- unilabos/app/register.py | 10 +- unilabos/app/web/pages.py | 4 +- unilabos/app/web/utils/action_utils.py | 2 + .../compile/evacuateandrefill_protocol.py | 128 +- unilabos/devices/agv/ur_arm_task.py | 9 +- unilabos/devices/laiyu_add_solid/laiyu.py | 120 +- unilabos/devices/liquid_handling/revvity.py | 6 +- unilabos/devices/motor/iCL42.py | 2 +- unilabos/devices/raman_uv/home_made_raman.py | 2 +- unilabos/devices/zhida_hplc/zhida.py | 31 +- .../registry/device_comms/modbus_ioboard.yaml | 20 +- unilabos/registry/device_comms/serial.yaml | 116 +- unilabos/registry/devices/camera.yaml | 10 + .../devices/characterization_optic.yaml | 494 +- unilabos/registry/devices/hotel.yaml | 34 +- .../registry/devices/laiyu_add_solid.yaml | 624 +- unilabos/registry/devices/liquid_handler.yaml | 6710 ++++++++++++++++- unilabos/registry/devices/mock_devices.yaml | 4673 ++++++++++-- unilabos/registry/devices/moveit_config.yaml | 962 ++- .../devices/organic_miscellaneous.yaml | 541 +- unilabos/registry/devices/pump_and_valve.yaml | 965 ++- unilabos/registry/devices/robot_agv.yaml | 147 +- unilabos/registry/devices/robot_arm.yaml | 219 +- unilabos/registry/devices/robot_gripper.yaml | 690 +- .../registry/devices/robot_linear_motion.yaml | 738 +- unilabos/registry/devices/sim_nodes.yaml | 352 +- unilabos/registry/devices/temperature.yaml | 866 ++- .../registry/devices/vacuum_and_purge.yaml | 563 +- unilabos/registry/devices/virtual_device.yaml | 5332 ++++++++++--- unilabos/registry/devices/work_station.yaml | 2828 +++++-- unilabos/registry/devices/zhida_hplc.yaml | 252 +- unilabos/registry/registry.py | 267 +- unilabos/ros/device_node_wrapper.py | 2 +- unilabos/ros/msgs/message_converter.py | 1 - unilabos/ros/nodes/base_device_node.py | 50 +- unilabos/ros/nodes/presets/camera.py | 61 + unilabos/ros/nodes/presets/host_node.py | 20 +- unilabos/ros/nodes/presets/protocol_node.py | 222 +- unilabos/utils/import_manager.py | 621 +- unilabos/utils/type_check.py | 8 + 46 files changed, 25455 insertions(+), 3353 deletions(-) create mode 100644 test/experiments/camera.json create mode 100644 unilabos/registry/devices/camera.yaml create mode 100644 unilabos/ros/nodes/presets/camera.py diff --git a/test/experiments/camera.json b/test/experiments/camera.json new file mode 100644 index 00000000..2d208450 --- /dev/null +++ b/test/experiments/camera.json @@ -0,0 +1,45 @@ +{ + "nodes": [ + { + "id": "Camera", + "name": "摄像头", + "children": [ + ], + "parent": null, + "type": "device", + "class": "camera", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "camera_index": 0, + "period": 0.05 + }, + "data": { + } + }, + { + "id": "Gripper1", + "name": "假夹爪", + "children": [ + ], + "parent": null, + "type": "device", + "class": "gripper.mock", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + }, + "data": { + } + } + ], + "links": [ + + ] +} \ No newline at end of file diff --git a/test/experiments/comprehensive_protocol/comprehensive_station.json b/test/experiments/comprehensive_protocol/comprehensive_station.json index 071d9137..0d9f5c79 100644 --- a/test/experiments/comprehensive_protocol/comprehensive_station.json +++ b/test/experiments/comprehensive_protocol/comprehensive_station.json @@ -680,7 +680,7 @@ "type": "fluid", "port": { "multiway_valve_1": "5", - "rotavap_1": "sample_in" + "rotavap_1": "samplein" } }, { @@ -770,7 +770,7 @@ "type": "transport", "port": { "multiway_valve_2": "4", - "filter_1": "filter_in" + "filter_1": "filterin" } }, { @@ -800,7 +800,7 @@ "type": "fluid", "port": { "multiway_valve_2": "6", - "separator_1": "separator_in" + "separator_1": "separatorin" } }, { @@ -809,7 +809,7 @@ "target": "collection_bottle_3", "type": "fluid", "port": { - "separator_1": "bottom_phase_out", + "separator_1": "bottomphaseout", "collection_bottle_3": "top" } }, @@ -859,7 +859,7 @@ "target": "waste_bottle_2", "type": "fluid", "port": { - "separator_1": "top_phase_out", + "separator_1": "topphaseout", "waste_bottle_2": "top" } }, @@ -879,7 +879,7 @@ "target": "collection_bottle_1", "type": "transport", "port": { - "filter_1": "filtrate_out", + "filter_1": "filtrateout", "collection_bottle_1": "top" } }, @@ -889,7 +889,7 @@ "target": "waste_bottle_1", "type": "transport", "port": { - "filter_1": "retentate_out", + "filter_1": "retentateout", "waste_bottle_1": "top" } } diff --git a/unilabos-linux-64.yaml b/unilabos-linux-64.yaml index aeac636f..d2f6df10 100644 --- a/unilabos-linux-64.yaml +++ b/unilabos-linux-64.yaml @@ -48,8 +48,9 @@ dependencies: - ros-humble-ros2-control - ros-humble-robot-state-publisher - ros-humble-joint-state-publisher - # web + # web and visualization - ros-humble-rosbridge-server + - ros-humble-cv-bridge # geometry & motion planning - ros-humble-tf2 - ros-humble-moveit diff --git a/unilabos-osx-arm64.yaml b/unilabos-osx-arm64.yaml index 83ffe1b3..391e8182 100644 --- a/unilabos-osx-arm64.yaml +++ b/unilabos-osx-arm64.yaml @@ -50,8 +50,9 @@ dependencies: - ros-humble-ros2-control - ros-humble-robot-state-publisher - ros-humble-joint-state-publisher - # web + # web and visualization - ros-humble-rosbridge-server + - ros-humble-cv-bridge # geometry & motion planning - ros-humble-tf2 - ros-humble-moveit diff --git a/unilabos-win64.yaml b/unilabos-win64.yaml index 19a40080..93f6332e 100644 --- a/unilabos-win64.yaml +++ b/unilabos-win64.yaml @@ -6,12 +6,12 @@ channels: dependencies: # Basics - python=3.11.11 - - compilers - - cmake - - make - - ninja - - sphinx - - sphinx_rtd_theme + # - compilers + # - cmake + # - make + # - ninja + # - sphinx + # - sphinx_rtd_theme # Data Visualization - numpy - scipy @@ -23,7 +23,7 @@ dependencies: - pyserial - pyusb - pylibftdi - - pymodbus + - pymodbus==3.6.9 - python-can - pyvisa - opencv @@ -48,8 +48,9 @@ dependencies: - ros-humble-ros2-control - ros-humble-robot-state-publisher - ros-humble-joint-state-publisher - # web + # web and visualization - ros-humble-rosbridge-server + - ros-humble-cv-bridge # geometry & motion planning - ros-humble-tf2 - ros-humble-moveit @@ -61,5 +62,12 @@ dependencies: # ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo # ilab equipments # ros-humble-unilabos-msgs + # driver + #- crcmod - pip: - - paho-mqtt \ No newline at end of file + - paho-mqtt + # driver + #- ur-rtde # set PYTHONUTF8=1 + #- pyautogui + #- pywinauto + #- pywinauto_recorder \ No newline at end of file diff --git a/unilabos/app/controler.py b/unilabos/app/controler.py index 5d552565..730578ef 100644 --- a/unilabos/app/controler.py +++ b/unilabos/app/controler.py @@ -25,12 +25,13 @@ def job_add(req: JobAddReq) -> JobData: if req.job_id is None: req.job_id = str(uuid.uuid4()) action_name = req.data["action"] - action_kwargs = req.data["action_kwargs"] - req.data['action'] = action_name - if action_name == "execute_command_from_outer": - action_kwargs = {"command": json.dumps(action_kwargs)} - elif "command" in action_kwargs: - action_kwargs = action_kwargs["command"] + action_type = req.data.get("action_type", "LocalUnknown") + action_args = req.data.get("action_kwargs", None) # 兼容老版本,后续删除 + if action_args is None: + action_args = req.data.get("action_args") + else: + if "command" in action_args: + action_args = action_args["command"] # print(f"job_add:{req.device_id} {action_name} {action_kwargs}") - HostNode.get_instance().send_goal(req.device_id, action_name=action_name, action_kwargs=action_kwargs, goal_uuid=req.job_id, server_info=req.server_info) + HostNode.get_instance().send_goal(req.device_id, action_type=action_type, action_name=action_name, action_kwargs=action_args, goal_uuid=req.job_id, server_info=req.server_info) return JobData(jobId=req.job_id) diff --git a/unilabos/app/register.py b/unilabos/app/register.py index 76ad5a57..40e41071 100644 --- a/unilabos/app/register.py +++ b/unilabos/app/register.py @@ -34,7 +34,7 @@ def main(): """ parser = argparse.ArgumentParser(description="注册设备和资源到 MQTT") parser.add_argument( - "--registry_path", + "--registry", type=str, default=None, action="append", @@ -46,10 +46,16 @@ def main(): default=None, help="配置文件路径,支持.py格式的Python配置文件", ) + parser.add_argument( + "--complete_registry", + action="store_true", + default=False, + help="是否补全注册表", + ) args = parser.parse_args() # 构建注册表 - build_registry(args.registry_path) + build_registry(args.registry, args.complete_registry) load_config_from_file(args.config) from unilabos.app.mq import mqtt_client diff --git a/unilabos/app/web/pages.py b/unilabos/app/web/pages.py index 51b109b1..9f9a6c0a 100644 --- a/unilabos/app/web/pages.py +++ b/unilabos/app/web/pages.py @@ -7,6 +7,7 @@ Web页面模块 import json import os import sys +import traceback from pathlib import Path from typing import Dict @@ -17,7 +18,7 @@ from jinja2 import Environment, FileSystemLoader from unilabos.config.config import BasicConfig from unilabos.registry.registry import lab_registry from unilabos.ros.msgs.message_converter import msg_converter_manager -from unilabos.utils.log import error +from unilabos.utils.log import error, debug from unilabos.utils.type_check import TypeEncoder from unilabos.app.web.utils.device_utils import get_registry_info from unilabos.app.web.utils.host_utils import get_host_node_info @@ -123,6 +124,7 @@ def setup_web_pages(router: APIRouter) -> None: return html except Exception as e: + debug(traceback.format_exc()) error(f"生成状态页面时出错: {str(e)}") raise HTTPException(status_code=500, detail=f"Error generating status page: {str(e)}") diff --git a/unilabos/app/web/utils/action_utils.py b/unilabos/app/web/utils/action_utils.py index be2baa3f..233506d5 100644 --- a/unilabos/app/web/utils/action_utils.py +++ b/unilabos/app/web/utils/action_utils.py @@ -65,6 +65,8 @@ def get_yaml_from_goal_type(goal_type) -> str: Returns: str: 默认Goal参数的YAML格式字符串 """ + if isinstance(goal_type, str): + return "{}" if not goal_type: return "{}" diff --git a/unilabos/compile/evacuateandrefill_protocol.py b/unilabos/compile/evacuateandrefill_protocol.py index 96e057d3..aa44df69 100644 --- a/unilabos/compile/evacuateandrefill_protocol.py +++ b/unilabos/compile/evacuateandrefill_protocol.py @@ -5,38 +5,138 @@ from .pump_protocol import generate_pump_protocol_with_rinsing, generate_pump_pr def find_gas_source(G: nx.DiGraph, gas: str) -> str: - """根据气体名称查找对应的气源""" - # 按照命名规则查找气源 + """ + 根据气体名称查找对应的气源,支持多种匹配模式: + 1. 容器名称匹配 + 2. 气体类型匹配(data.gas_type) + 3. 默认气源 + """ + print(f"EVACUATE_REFILL: 正在查找气体 '{gas}' 的气源...") + + # 第一步:通过容器名称匹配 gas_source_patterns = [ f"gas_source_{gas}", f"gas_{gas}", f"flask_{gas}", - f"{gas}_source" + f"{gas}_source", + f"source_{gas}", + f"reagent_bottle_{gas}", + f"bottle_{gas}" ] for pattern in gas_source_patterns: if pattern in G.nodes(): + print(f"EVACUATE_REFILL: 通过名称匹配找到气源: {pattern}") return pattern - # 模糊匹配 - for node in G.nodes(): - node_class = G.nodes[node].get('class', '') or '' - if 'gas_source' in node_class and gas.lower() in node.lower(): - return node - if node.startswith('flask_') and gas.lower() in node.lower(): - return node + # 第二步:通过气体类型匹配 (data.gas_type) + for node_id in G.nodes(): + node_data = G.nodes[node_id] + node_class = node_data.get('class', '') or '' + + # 检查是否是气源设备 + if ('gas_source' in node_class or + 'gas' in node_id.lower() or + node_id.startswith('flask_')): + + # 检查 data.gas_type + data = node_data.get('data', {}) + gas_type = data.get('gas_type', '') + + if gas_type.lower() == gas.lower(): + print(f"EVACUATE_REFILL: 通过气体类型匹配找到气源: {node_id} (gas_type: {gas_type})") + return node_id + + # 检查 config.gas_type + config = node_data.get('config', {}) + config_gas_type = config.get('gas_type', '') + + if config_gas_type.lower() == gas.lower(): + print(f"EVACUATE_REFILL: 通过配置气体类型匹配找到气源: {node_id} (config.gas_type: {config_gas_type})") + return node_id - # 查找所有可用的气源 - available_gas_sources = [ + # 第三步:查找所有可用的气源设备 + available_gas_sources = [] + for node_id in G.nodes(): + node_data = G.nodes[node_id] + node_class = node_data.get('class', '') or '' + + if ('gas_source' in node_class or + 'gas' in node_id.lower() or + (node_id.startswith('flask_') and any(g in node_id.lower() for g in ['air', 'nitrogen', 'argon']))): + + data = node_data.get('data', {}) + gas_type = data.get('gas_type', 'unknown') + available_gas_sources.append(f"{node_id} (gas_type: {gas_type})") + + print(f"EVACUATE_REFILL: 可用气源列表: {available_gas_sources}") + + # 第四步:如果找不到特定气体,使用默认的第一个气源 + default_gas_sources = [ node for node in G.nodes() if ((G.nodes[node].get('class') or '').startswith('virtual_gas_source') - or ('gas' in node and 'source' in node) - or (node.startswith('flask_') and any(g in node.lower() for g in ['air', 'nitrogen', 'argon', 'vacuum']))) + or 'gas_source' in node) ] + if default_gas_sources: + default_source = default_gas_sources[0] + print(f"EVACUATE_REFILL: ⚠️ 未找到特定气体 '{gas}',使用默认气源: {default_source}") + return default_source + raise ValueError(f"找不到气体 '{gas}' 对应的气源。可用气源: {available_gas_sources}") +def find_gas_source_by_any_match(G: nx.DiGraph, gas: str) -> str: + """ + 增强版气源查找,支持各种匹配方式的别名函数 + """ + return find_gas_source(G, gas) + + +def get_gas_source_type(G: nx.DiGraph, gas_source: str) -> str: + """获取气源的气体类型""" + if gas_source not in G.nodes(): + return "unknown" + + node_data = G.nodes[gas_source] + data = node_data.get('data', {}) + config = node_data.get('config', {}) + + # 检查多个可能的字段 + gas_type = (data.get('gas_type') or + config.get('gas_type') or + data.get('gas') or + config.get('gas') or + "air") # 默认为空气 + + return gas_type + + +def find_vessels_by_gas_type(G: nx.DiGraph, gas: str) -> List[str]: + """ + 根据气体类型查找所有匹配的容器/气源 + """ + matching_vessels = [] + + for node_id in G.nodes(): + node_data = G.nodes[node_id] + + # 检查容器名称匹配 + if gas.lower() in node_id.lower(): + matching_vessels.append(f"{node_id} (名称匹配)") + continue + + # 检查气体类型匹配 + data = node_data.get('data', {}) + config = node_data.get('config', {}) + + gas_type = data.get('gas_type', '') or config.get('gas_type', '') + if gas_type.lower() == gas.lower(): + matching_vessels.append(f"{node_id} (gas_type: {gas_type})") + + return matching_vessels + + def find_vacuum_pump(G: nx.DiGraph) -> str: """查找真空泵设备""" vacuum_pumps = [ diff --git a/unilabos/devices/agv/ur_arm_task.py b/unilabos/devices/agv/ur_arm_task.py index 47a7c931..f9d93b04 100644 --- a/unilabos/devices/agv/ur_arm_task.py +++ b/unilabos/devices/agv/ur_arm_task.py @@ -1,9 +1,12 @@ -import rtde_control -import dashboard_client +try: + import rtde_control + import dashboard_client + import rtde_receive +except ImportError as ex: + print("Import Error, Please Install Packages in ur_arm_task.py First!", ex) import time import json from unilabos.devices.agv.robotiq_gripper import RobotiqGripper -import rtde_receive from std_msgs.msg import Float64MultiArray from pydantic import BaseModel diff --git a/unilabos/devices/laiyu_add_solid/laiyu.py b/unilabos/devices/laiyu_add_solid/laiyu.py index 0959f9a8..b1cc04ad 100644 --- a/unilabos/devices/laiyu_add_solid/laiyu.py +++ b/unilabos/devices/laiyu_add_solid/laiyu.py @@ -234,71 +234,71 @@ class Laiyu: resp_reset = self.reset() return actual_mass_mg +if __name__ == "__main__": + + ''' + 样例:对单个粉筒进行称量 + ''' + + modbus = Laiyu(port="COM25") + + mass_test = modbus.add_powder_tube(1, 'h12', 6.0) + print(f"实际出料质量:{mass_test}mg") -''' -样例:对单个粉筒进行称量 -''' + ''' + 样例: 对一份excel文件记录的化合物进行称量 + ''' -modbus = Laiyu(port="COM25") + excel_file = r"C:\auto\laiyu\test1.xlsx" + # 定义输出文件路径,用于记录实际加样多少 + output_file = r"C:\auto\laiyu\test_output.xlsx" -mass_test = modbus.add_powder_tube(1, 'h12', 6.0) -print(f"实际出料质量:{mass_test}mg") + # 定义物料名称和料筒位置关系 + compound_positions = { + 'XPhos': '1', + 'Cu(OTf)2': '2', + 'CuSO4': '3', + 'PPh3': '4', + } + # read excel file + # excel_file = r"C:\auto\laiyu\test.xlsx" + df = pd.read_excel(excel_file, sheet_name='Sheet1') + # 读取Excel文件中的数据 + # 遍历每一行数据 + for index, row in df.iterrows(): + # 获取物料名称和质量 + copper_name = row['copper'] + copper_mass = row['copper_mass'] + ligand_name = row['ligand'] + ligand_mass = row['ligand_mass'] + target_tube_position = row['position'] + # 获取物料位置 from compound_positions + copper_position = compound_positions.get(copper_name) + ligand_position = compound_positions.get(ligand_name) + # 判断物料位置是否存在 + if copper_position is None: + print(f"物料位置不存在:{copper_name}") + continue + if ligand_position is None: + print(f"物料位置不存在:{ligand_name}") + continue + # 加铜 + copper_actual_mass = modbus.add_powder_tube(int(copper_position), target_tube_position, copper_mass) + time.sleep(1) + # 加配体 + ligand_actual_mass = modbus.add_powder_tube(int(ligand_position), target_tube_position, ligand_mass) + time.sleep(1) + # 保存至df + df.at[index, 'copper_actual_mass'] = copper_actual_mass + df.at[index, 'ligand_actual_mass'] = ligand_actual_mass -''' -样例: 对一份excel文件记录的化合物进行称量 -''' + # 保存修改后的数据到新的Excel文件 + df.to_excel(output_file, index=False) + print(f"已保存到文件:{output_file}") -excel_file = r"C:\auto\laiyu\test1.xlsx" -# 定义输出文件路径,用于记录实际加样多少 -output_file = r"C:\auto\laiyu\test_output.xlsx" - -# 定义物料名称和料筒位置关系 -compound_positions = { - 'XPhos': '1', - 'Cu(OTf)2': '2', - 'CuSO4': '3', - 'PPh3': '4', -} - -# read excel file -# excel_file = r"C:\auto\laiyu\test.xlsx" -df = pd.read_excel(excel_file, sheet_name='Sheet1') -# 读取Excel文件中的数据 -# 遍历每一行数据 -for index, row in df.iterrows(): - # 获取物料名称和质量 - copper_name = row['copper'] - copper_mass = row['copper_mass'] - ligand_name = row['ligand'] - ligand_mass = row['ligand_mass'] - target_tube_position = row['position'] - # 获取物料位置 from compound_positions - copper_position = compound_positions.get(copper_name) - ligand_position = compound_positions.get(ligand_name) - # 判断物料位置是否存在 - if copper_position is None: - print(f"物料位置不存在:{copper_name}") - continue - if ligand_position is None: - print(f"物料位置不存在:{ligand_name}") - continue - # 加铜 - copper_actual_mass = modbus.add_powder_tube(int(copper_position), target_tube_position, copper_mass) - time.sleep(1) - # 加配体 - ligand_actual_mass = modbus.add_powder_tube(int(ligand_position), target_tube_position, ligand_mass) - time.sleep(1) - # 保存至df - df.at[index, 'copper_actual_mass'] = copper_actual_mass - df.at[index, 'ligand_actual_mass'] = ligand_actual_mass - -# 保存修改后的数据到新的Excel文件 -df.to_excel(output_file, index=False) -print(f"已保存到文件:{output_file}") - -# 关闭串口 -modbus.ser.close() -print("串口已关闭") + # 关闭串口 + modbus.ser.close() + print("串口已关闭") diff --git a/unilabos/devices/liquid_handling/revvity.py b/unilabos/devices/liquid_handling/revvity.py index 5f37c453..d080ba0b 100644 --- a/unilabos/devices/liquid_handling/revvity.py +++ b/unilabos/devices/liquid_handling/revvity.py @@ -3,7 +3,11 @@ import sys import io # sys.path.insert(0, r'C:\kui\winprep_cli\winprep_c_Uni-lab\x64\Debug') -import winprep_c +try: + import winprep_c +except ImportError as e: + print("Error importing winprep_c:", e) + print("Please ensure that the winprep_c module is correctly installed and accessible.") from queue import Queue diff --git a/unilabos/devices/motor/iCL42.py b/unilabos/devices/motor/iCL42.py index d937865e..57bc4678 100644 --- a/unilabos/devices/motor/iCL42.py +++ b/unilabos/devices/motor/iCL42.py @@ -21,7 +21,7 @@ except Exception as e: sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", ".."))) from unilabos.utils.pywinauto_util import connect_application, get_process_pid_by_name, get_ui_path_with_window_specification, print_wrapper_identifiers from unilabos.device_comms.universal_driver import UniversalDriver, SingleRunningExecutor - from unilabos.devices.template_driver import universal_driver as ud + from unilabos.device_comms import universal_driver as ud print(f"使用文件DEBUG运行: {e}") diff --git a/unilabos/devices/raman_uv/home_made_raman.py b/unilabos/devices/raman_uv/home_made_raman.py index dcc3b565..64d83196 100644 --- a/unilabos/devices/raman_uv/home_made_raman.py +++ b/unilabos/devices/raman_uv/home_made_raman.py @@ -9,7 +9,7 @@ from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import time class RamanObj: - def __init__(self, port_laser,port_ccd, baudrate_laser=9600, baudrate_ccd=921600): + def __init__(self, port_laser, port_ccd, baudrate_laser=9600, baudrate_ccd=921600): self.port_laser = port_laser self.port_ccd = port_ccd diff --git a/unilabos/devices/zhida_hplc/zhida.py b/unilabos/devices/zhida_hplc/zhida.py index a6e1f9d3..2320dbe6 100644 --- a/unilabos/devices/zhida_hplc/zhida.py +++ b/unilabos/devices/zhida_hplc/zhida.py @@ -1,11 +1,9 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -import socket -import json import base64 -import argparse -import sys +import json +import socket import time @@ -96,17 +94,20 @@ class ZhidaClient: def abort(self) -> dict: return self._send_command({"command": "abort"}) -""" -a,b,c -1,2,4 -2,4,5 -""" -client = ZhidaClient() -# 连接 -client.connect() -# 获取状态 -print(client.status) +if __name__ == "__main__": + + """ + a,b,c + 1,2,4 + 2,4,5 + """ + + client = ZhidaClient() + # 连接 + client.connect() + # 获取状态 + print(client.status) -# 命令格式:python zhida.py [options] + # 命令格式:python zhida.py [options] diff --git a/unilabos/registry/device_comms/modbus_ioboard.yaml b/unilabos/registry/device_comms/modbus_ioboard.yaml index fcea4d7e..1667e21c 100644 --- a/unilabos/registry/device_comms/modbus_ioboard.yaml +++ b/unilabos/registry/device_comms/modbus_ioboard.yaml @@ -1,10 +1,10 @@ -io_snrd: - description: IO Board with 16 IOs - class: - module: ilabos.device_comms.SRND_16_IO:SRND_16_IO - type: python - hardware_interface: - name: modbus_client - extra_info: [] - read: read_io_coil - write: write_io_coil \ No newline at end of file +#io_snrd: +# description: IO Board with 16 IOs +# class: +# module: unilabos.device_comms.SRND_16_IO:SRND_16_IO +# type: python +# hardware_interface: +# name: modbus_client +# extra_info: [] +# read: read_io_coil +# write: write_io_coil \ No newline at end of file diff --git a/unilabos/registry/device_comms/serial.yaml b/unilabos/registry/device_comms/serial.yaml index 86cf7e50..3ed9b6b7 100644 --- a/unilabos/registry/device_comms/serial.yaml +++ b/unilabos/registry/device_comms/serial.yaml @@ -1,7 +1,117 @@ serial: - description: Serial communication interface, used when sharing same serial port for multiple devices class: + action_value_mappings: + auto-handle_serial_request: + feedback: {} + goal: {} + goal_default: + request: null + response: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand handle_serial_request 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand handle_serial_request 的参数schema + properties: + request: + description: '参数: request' + type: string + response: + description: '参数: response' + type: string + required: + - request + - response + type: object + result: {} + required: + - goal + title: handle_serial_request 命令参数 + type: object + type: UniLabJsonCommand + auto-read_data: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand read_data 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand read_data 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: read_data 命令参数 + type: object + type: UniLabJsonCommand + auto-send_command: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand send_command 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand send_command 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: send_command 命令参数 + type: object + type: UniLabJsonCommand module: unilabos.ros.nodes.presets.serial_node:ROS2SerialNode + status_types: {} type: ros2 - schema: - properties: {} \ No newline at end of file + description: Serial communication interface, used when sharing same serial port + for multiple devices + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + baudrate: + default: 9600 + description: '参数: baudrate' + type: integer + device_id: + description: '参数: device_id' + type: string + port: + description: '参数: port' + type: string + resource_tracker: + description: '参数: resource_tracker' + type: string + required: + - device_id + - port + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/camera.yaml b/unilabos/registry/devices/camera.yaml new file mode 100644 index 00000000..241576e1 --- /dev/null +++ b/unilabos/registry/devices/camera.yaml @@ -0,0 +1,10 @@ +camera: + class: + action_value_mappings: {} + module: unilabos.ros.nodes.presets.camera:VideoPublisher + status_types: {} + type: ros2 + description: '' + handles: [] + icon: '' + init_param_schema: {} diff --git a/unilabos/registry/devices/characterization_optic.yaml b/unilabos/registry/devices/characterization_optic.yaml index 52ffc87a..06f9bfa9 100644 --- a/unilabos/registry/devices/characterization_optic.yaml +++ b/unilabos/registry/devices/characterization_optic.yaml @@ -1,67 +1,449 @@ -# 光学表征设备:红外、紫外可见、拉曼等 -raman_home_made: - description: Raman spectroscopy device - class: - module: unilabos.devices.raman_uv.home_made_raman:RamanObj - type: python - status_types: - status: String - action_value_mappings: - raman_cmd: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success - schema: - properties: - status: - type: string - required: - - status - additionalProperties: false - type: object hplc.agilent: - description: HPLC device class: - module: unilabos.devices.hplc.AgilentHPLC:HPLCDriver - type: python - status_types: - device_status: String - could_run: Bool - driver_init_ok: Bool - is_running: Bool - finish_status: String - status_text: String action_value_mappings: + auto-check_status: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand check_status 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand check_status 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: check_status 命令参数 + type: object + type: UniLabJsonCommand + auto-extract_data_from_txt: + feedback: {} + goal: {} + goal_default: + file_path: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand extract_data_from_txt 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand extract_data_from_txt 的参数schema + properties: + file_path: + description: '参数: file_path' + type: string + required: + - file_path + type: object + result: {} + required: + - goal + title: extract_data_from_txt 命令参数 + type: object + type: UniLabJsonCommand + auto-start_sequence: + feedback: {} + goal: {} + goal_default: + params: null + resource: null + wf_name: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand start_sequence 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand start_sequence 的参数schema + properties: + params: + description: '参数: params' + type: string + resource: + description: '参数: resource' + type: object + wf_name: + description: '参数: wf_name' + type: string + required: + - wf_name + type: object + result: {} + required: + - goal + title: start_sequence 命令参数 + type: object + type: UniLabJsonCommand + auto-try_close_sub_device: + feedback: {} + goal: {} + goal_default: + device_name: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand try_close_sub_device 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand try_close_sub_device 的参数schema + properties: + device_name: + description: '参数: device_name' + type: string + required: [] + type: object + result: {} + required: + - goal + title: try_close_sub_device 命令参数 + type: object + type: UniLabJsonCommand + auto-try_open_sub_device: + feedback: {} + goal: {} + goal_default: + device_name: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand try_open_sub_device 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand try_open_sub_device 的参数schema + properties: + device_name: + description: '参数: device_name' + type: string + required: [] + type: object + result: {} + required: + - goal + title: try_open_sub_device 命令参数 + type: object + type: UniLabJsonCommand execute_command_from_outer: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success - schema: + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.hplc.AgilentHPLC:HPLCDriver + status_types: + could_run: bool + data_file: list + device_status: str + driver_init_ok: bool + finish_status: str + is_running: bool + status_text: str + success: bool + type: python + description: HPLC device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema properties: - device_status: - type: string - could_run: - type: boolean - driver_init_ok: - type: boolean - is_running: - type: boolean - finish_status: - type: string - status_text: - type: string + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + driver_debug: + default: false + description: '参数: driver_debug' + type: boolean + required: [] + type: object + result: {} required: - - device_status - - could_run - - driver_init_ok - - is_running - - finish_status - - status_text - additionalProperties: false + - goal + title: __init__ 命令参数 + type: object +raman_home_made: + class: + action_value_mappings: + auto-ccd_time: + feedback: {} + goal: {} + goal_default: + int_time: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand ccd_time 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand ccd_time 的参数schema + properties: + int_time: + description: '参数: int_time' + type: string + required: + - int_time + type: object + result: {} + required: + - goal + title: ccd_time 命令参数 + type: object + type: UniLabJsonCommand + auto-laser_on_power: + feedback: {} + goal: {} + goal_default: + output_voltage_laser: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand laser_on_power 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand laser_on_power 的参数schema + properties: + output_voltage_laser: + description: '参数: output_voltage_laser' + type: string + required: + - output_voltage_laser + type: object + result: {} + required: + - goal + title: laser_on_power 命令参数 + type: object + type: UniLabJsonCommand + auto-raman_cmd: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand raman_cmd 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand raman_cmd 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: raman_cmd 命令参数 + type: object + type: UniLabJsonCommand + auto-raman_without_background: + feedback: {} + goal: {} + goal_default: + int_time: null + laser_power: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand raman_without_background 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand raman_without_background 的参数schema + properties: + int_time: + description: '参数: int_time' + type: string + laser_power: + description: '参数: laser_power' + type: string + required: + - int_time + - laser_power + type: object + result: {} + required: + - goal + title: raman_without_background 命令参数 + type: object + type: UniLabJsonCommand + auto-raman_without_background_average: + feedback: {} + goal: {} + goal_default: + average: null + int_time: null + laser_power: null + sample_name: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand raman_without_background_average 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand raman_without_background_average 的参数schema + properties: + average: + description: '参数: average' + type: string + int_time: + description: '参数: int_time' + type: string + laser_power: + description: '参数: laser_power' + type: string + sample_name: + description: '参数: sample_name' + type: string + required: + - sample_name + - int_time + - laser_power + - average + type: object + result: {} + required: + - goal + title: raman_without_background_average 命令参数 + type: object + type: UniLabJsonCommand + raman_cmd: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.raman_uv.home_made_raman:RamanObj + status_types: {} + type: python + description: Raman spectroscopy device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + baudrate_ccd: + default: 921600 + description: '参数: baudrate_ccd' + type: integer + baudrate_laser: + default: 9600 + description: '参数: baudrate_laser' + type: integer + port_ccd: + description: '参数: port_ccd' + type: string + port_laser: + description: '参数: port_laser' + type: string + required: + - port_laser + - port_ccd + type: object + result: {} + required: + - goal + title: __init__ 命令参数 type: object diff --git a/unilabos/registry/devices/hotel.yaml b/unilabos/registry/devices/hotel.yaml index 0f925118..bfd00901 100644 --- a/unilabos/registry/devices/hotel.yaml +++ b/unilabos/registry/devices/hotel.yaml @@ -1,9 +1,35 @@ hotel.thermo_orbitor_rs2_hotel: - description: Thermo Orbitor RS2 Hotel - class: + class: + action_value_mappings: {} module: unilabos.devices.resource_container.container:HotelContainer + status_types: + rotation: String type: python + description: Thermo Orbitor RS2 Hotel + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + device_config: + description: '参数: device_config' + type: object + rotation: + description: '参数: rotation' + type: object + required: + - rotation + - device_config + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object model: - type: device mesh: thermo_orbitor_rs2_hotel - + type: device diff --git a/unilabos/registry/devices/laiyu_add_solid.yaml b/unilabos/registry/devices/laiyu_add_solid.yaml index 35540235..8e1e7be7 100644 --- a/unilabos/registry/devices/laiyu_add_solid.yaml +++ b/unilabos/registry/devices/laiyu_add_solid.yaml @@ -1,56 +1,608 @@ laiyu_add_solid: - description: Laiyu Add Solid class: - module: unilabos.devices.laiyu_add_solid.laiyu:Laiyu - type: python - status_types: {} action_value_mappings: + add_powder_tube: + feedback: {} + goal: + compound_mass: compound_mass + powder_tube_number: powder_tube_number + target_tube_position: target_tube_position + goal_default: + compound_mass: 0.0 + powder_tube_number: 0 + target_tube_position: '' + handles: [] + result: + actual_mass_mg: actual_mass_mg + schema: + description: ROS Action SolidDispenseAddPowderTube 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: SolidDispenseAddPowderTube_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + compound_mass: + type: number + powder_tube_number: + maximum: 2147483647 + minimum: -2147483648 + type: integer + target_tube_position: + type: string + required: + - powder_tube_number + - target_tube_position + - compound_mass + title: SolidDispenseAddPowderTube_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + actual_mass_mg: + type: number + return_info: + type: string + success: + type: boolean + required: + - return_info + - actual_mass_mg + - success + title: SolidDispenseAddPowderTube_Result + type: object + required: + - goal + title: SolidDispenseAddPowderTube + type: object + type: SolidDispenseAddPowderTube + auto-add_powder_tube: + feedback: {} + goal: {} + goal_default: + compound_mass: null + powder_tube_number: null + target_tube_position: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand add_powder_tube 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand add_powder_tube 的参数schema + properties: + compound_mass: + description: '参数: compound_mass' + type: string + powder_tube_number: + description: '参数: powder_tube_number' + type: string + target_tube_position: + description: '参数: target_tube_position' + type: string + required: + - powder_tube_number + - target_tube_position + - compound_mass + type: object + result: {} + required: + - goal + title: add_powder_tube 命令参数 + type: object + type: UniLabJsonCommand + auto-calculate_crc: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand calculate_crc 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand calculate_crc 的参数schema + properties: + data: + description: '参数: data' + type: string + required: + - data + type: object + result: {} + required: + - goal + title: calculate_crc 命令参数 + type: object + type: UniLabJsonCommand + auto-discharge: + feedback: {} + goal: {} + goal_default: + float_in: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand discharge 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand discharge 的参数schema + properties: + float_in: + description: '参数: float_in' + type: number + required: + - float_in + type: object + result: {} + required: + - goal + title: discharge 命令参数 + type: object + type: UniLabJsonCommand + auto-move_to_plate: + feedback: {} + goal: {} + goal_default: + string: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand move_to_plate 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand move_to_plate 的参数schema + properties: + string: + description: '参数: string' + type: string + required: + - string + type: object + result: {} + required: + - goal + title: move_to_plate 命令参数 + type: object + type: UniLabJsonCommand + auto-move_to_xyz: + feedback: {} + goal: {} + goal_default: + x: null + y: null + z: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand move_to_xyz 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand move_to_xyz 的参数schema + properties: + x: + description: '参数: x' + type: number + y: + description: '参数: y' + type: number + z: + description: '参数: z' + type: number + required: + - x + - y + - z + type: object + result: {} + required: + - goal + title: move_to_xyz 命令参数 + type: object + type: UniLabJsonCommand + auto-pick_powder_tube: + feedback: {} + goal: {} + goal_default: + int_input: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand pick_powder_tube 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand pick_powder_tube 的参数schema + properties: + int_input: + description: '参数: int_input' + type: integer + required: + - int_input + type: object + result: {} + required: + - goal + title: pick_powder_tube 命令参数 + type: object + type: UniLabJsonCommand + auto-put_powder_tube: + feedback: {} + goal: {} + goal_default: + int_input: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand put_powder_tube 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand put_powder_tube 的参数schema + properties: + int_input: + description: '参数: int_input' + type: integer + required: + - int_input + type: object + result: {} + required: + - goal + title: put_powder_tube 命令参数 + type: object + type: UniLabJsonCommand + auto-reset: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand reset 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand reset 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: reset 命令参数 + type: object + type: UniLabJsonCommand + auto-send_command: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand send_command 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand send_command 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: send_command 命令参数 + type: object + type: UniLabJsonCommand + discharge: + feedback: {} + goal: + float_input: float_input + goal_default: + float_in: 0.0 + handles: [] + result: {} + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + move_to_plate: + feedback: {} + goal: + string: string + goal_default: + string: '' + handles: [] + result: {} + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput move_to_xyz: - type: Point3DSeparateInput + feedback: {} goal: x: x y: y z: z - feedback: {} + goal_default: + x: 0.0 + y: 0.0 + z: 0.0 + handles: [] result: {} + schema: + description: ROS Action Point3DSeparateInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: Point3DSeparateInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point3DSeparateInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Point3DSeparateInput_Result + type: object + required: + - goal + title: Point3DSeparateInput + type: object + type: Point3DSeparateInput pick_powder_tube: - type: IntSingleInput + feedback: {} goal: int_input: int_input - feedback: {} + goal_default: + int_input: 0 + handles: [] result: {} + schema: + description: ROS Action IntSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: IntSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + int_input: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - int_input + title: IntSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: IntSingleInput_Result + type: object + required: + - goal + title: IntSingleInput + type: object + type: IntSingleInput put_powder_tube: - type: IntSingleInput + feedback: {} goal: int_input: int_input - feedback: {} + goal_default: + int_input: 0 + handles: [] result: {} + schema: + description: ROS Action IntSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: IntSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + int_input: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - int_input + title: IntSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: IntSingleInput_Result + type: object + required: + - goal + title: IntSingleInput + type: object + type: IntSingleInput reset: - type: EmptyIn + feedback: {} goal: {} - feedback: {} + goal_default: {} + handles: [] result: {} - add_powder_tube: - type: SolidDispenseAddPowderTube - goal: - powder_tube_number: powder_tube_number - target_tube_position: target_tube_position - compound_mass: compound_mass - feedback: {} - result: - actual_mass_mg: actual_mass_mg - move_to_plate: - type: StrSingleInput - goal: - string: string - feedback: {} - result: {} - discharge: - type: FloatSingleInput - goal: - float_input: float_input - feedback: {} - result: {} - - schema: - properties: {} \ No newline at end of file + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.laiyu_add_solid.laiyu:Laiyu + status_types: + status: str + type: python + description: Laiyu Add Solid + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + baudrate: + default: 115200 + description: '参数: baudrate' + type: integer + port: + description: '参数: port' + type: string + timeout: + default: 0.5 + description: '参数: timeout' + type: number + required: + - port + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml index bb94b59f..f431b49f 100644 --- a/unilabos/registry/devices/liquid_handler.yaml +++ b/unilabos/registry/devices/liquid_handler.yaml @@ -1,461 +1,6445 @@ liquid_handler: - description: Liquid handler device controlled by pylabrobot - icon: icon_yiyezhan.webp class: - 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 + feedback: {} goal: asp_vols: asp_vols + blow_out_air_volume: blow_out_air_volume dis_vols: dis_vols + flow_rates: flow_rates + is_96_well: is_96_well + liquid_height: liquid_height + mix_liquid_height: mix_liquid_height + mix_rate: mix_rate + mix_time: mix_time + mix_vol: mix_vol + none_keys: none_keys + offsets: offsets reagent_sources: reagent_sources + spread: spread 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: LiquidHandlerMix - 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: {} + goal_default: + asp_vols: + - 0.0 + blow_out_air_volume: + - 0.0 + dis_vols: + - 0.0 + flow_rates: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + mix_liquid_height: 0.0 + mix_rate: 0 + mix_time: 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + reagent_sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + use_channels: + - 0 + handles: [] result: {} + schema: + description: ROS Action LiquidHandlerAdd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerAdd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + asp_vols: + items: + type: number + type: array + blow_out_air_volume: + items: + type: number + type: array + dis_vols: + items: + type: number + type: array + flow_rates: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + mix_liquid_height: + type: number + mix_rate: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + reagent_sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - asp_vols + - dis_vols + - reagent_sources + - targets + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + - is_96_well + - mix_time + - mix_vol + - mix_rate + - mix_liquid_height + - none_keys + title: LiquidHandlerAdd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerAdd_Result + type: object + required: + - goal + title: LiquidHandlerAdd + type: object + type: LiquidHandlerAdd aspirate: - type: LiquidHandlerAspirate + feedback: {} goal: - resources: resources - vols: vols - use_channels: use_channels - flow_rates: flow_rates + blow_out_air_volume: blow_out_air_volume end_delay: end_delay - offsets: offsets + flow_rates: flow_rates liquid_height: liquid_height - blow_out_air_volume: blow_out_air_volume - feedback: {} - result: - name: name - discard_tips: - type: LiquidHandlerDiscardTips - goal: - use_channels: use_channels - feedback: {} - result: - name: name - dispense: - type: LiquidHandlerDispense - goal: + offsets: offsets resources: resources - vols: vols use_channels: use_channels + vols: vols + goal_default: + blow_out_air_volume: + - 0.0 + flow_rates: + - 0.0 + liquid_height: + - 0.0 + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + resources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + use_channels: + - 0 + vols: + - 0.0 + handles: [] + result: + name: name + schema: + description: ROS Action LiquidHandlerAspirate 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerAspirate_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + blow_out_air_volume: + items: + type: number + type: array + flow_rates: + items: + type: number + type: array + liquid_height: + items: + type: number + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + resources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + required: + - resources + - vols + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + title: LiquidHandlerAspirate_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerAspirate_Result + type: object + required: + - goal + title: LiquidHandlerAspirate + type: object + type: LiquidHandlerAspirate + auto-add_liquid: + feedback: {} + goal: {} + goal_default: + asp_vols: null + blow_out_air_volume: null + delays: null + dis_vols: null + flow_rates: null + is_96_well: false + liquid_height: null + mix_liquid_height: null + mix_rate: null + mix_time: null + mix_vol: null + none_keys: [] + offsets: null + reagent_sources: null + spread: wide + targets: null + use_channels: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand add_liquid 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand add_liquid 的参数schema + properties: + asp_vols: + description: '参数: asp_vols' + type: string + blow_out_air_volume: + description: '参数: blow_out_air_volume' + type: string + delays: + description: '参数: delays' + type: string + dis_vols: + description: '参数: dis_vols' + type: string + flow_rates: + description: '参数: flow_rates' + type: string + is_96_well: + default: false + description: '参数: is_96_well' + type: boolean + liquid_height: + description: '参数: liquid_height' + type: string + mix_liquid_height: + description: '参数: mix_liquid_height' + type: string + mix_rate: + description: '参数: mix_rate' + type: string + mix_time: + description: '参数: mix_time' + type: string + mix_vol: + description: '参数: mix_vol' + type: string + none_keys: + default: [] + description: '参数: none_keys' + type: string + offsets: + description: '参数: offsets' + type: string + reagent_sources: + description: '参数: reagent_sources' + type: string + spread: + default: wide + description: '参数: spread' + type: string + targets: + description: '参数: targets' + type: string + use_channels: + description: '参数: use_channels' + type: string + required: + - asp_vols + - dis_vols + - reagent_sources + - targets + type: object + result: {} + required: + - goal + title: add_liquid 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-create_protocol: + feedback: {} + goal: {} + goal_default: + none_keys: [] + protocol_author: null + protocol_date: null + protocol_description: null + protocol_name: null + protocol_type: null + protocol_version: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand create_protocol 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand create_protocol 的参数schema + properties: + none_keys: + default: [] + description: '参数: none_keys' + type: string + protocol_author: + description: '参数: protocol_author' + type: string + protocol_date: + description: '参数: protocol_date' + type: string + protocol_description: + description: '参数: protocol_description' + type: string + protocol_name: + description: '参数: protocol_name' + type: string + protocol_type: + description: '参数: protocol_type' + type: string + protocol_version: + description: '参数: protocol_version' + type: string + required: + - protocol_name + - protocol_description + - protocol_version + - protocol_author + - protocol_date + - protocol_type + type: object + result: {} + required: + - goal + title: create_protocol 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-custom_delay: + feedback: {} + goal: {} + goal_default: + msg: null + seconds: 0 + handles: [] + result: {} + schema: + description: UniLabJsonCommand custom_delay 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand custom_delay 的参数schema + properties: + msg: + description: '参数: msg' + type: string + seconds: + default: 0 + description: '参数: seconds' + type: string + required: [] + type: object + result: {} + required: + - goal + title: custom_delay 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-iter_tips: + feedback: {} + goal: {} + goal_default: + tip_racks: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand iter_tips 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand iter_tips 的参数schema + properties: + tip_racks: + description: '参数: tip_racks' + type: string + required: + - tip_racks + type: object + result: {} + required: + - goal + title: iter_tips 命令参数 + type: object + type: UniLabJsonCommand + auto-mix: + feedback: {} + goal: {} + goal_default: + height_to_bottom: null + mix_rate: null + mix_time: null + mix_vol: null + none_keys: [] + offsets: null + targets: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand mix 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand mix 的参数schema + properties: + height_to_bottom: + description: '参数: height_to_bottom' + type: string + mix_rate: + description: '参数: mix_rate' + type: string + mix_time: + description: '参数: mix_time' + type: integer + mix_vol: + description: '参数: mix_vol' + type: string + none_keys: + default: [] + description: '参数: none_keys' + type: string + offsets: + description: '参数: offsets' + type: string + targets: + description: '参数: targets' + type: string + required: + - targets + type: object + result: {} + required: + - goal + title: mix 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-move_to: + feedback: {} + goal: {} + goal_default: + channel: 0 + dis_to_top: 0 + well: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand move_to 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand move_to 的参数schema + properties: + channel: + default: 0 + description: '参数: channel' + type: integer + dis_to_top: + default: 0 + description: '参数: dis_to_top' + type: number + well: + description: '参数: well' + type: string + required: + - well + type: object + result: {} + required: + - goal + title: move_to 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-remove_liquid: + feedback: {} + goal: {} + goal_default: + blow_out_air_volume: null + delays: null + flow_rates: null + is_96_well: false + liquid_height: null + none_keys: [] + offsets: null + sources: null + spread: wide + top: null + use_channels: null + vols: null + waste_liquid: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand remove_liquid 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand remove_liquid 的参数schema + properties: + blow_out_air_volume: + description: '参数: blow_out_air_volume' + type: string + delays: + description: '参数: delays' + type: string + flow_rates: + description: '参数: flow_rates' + type: string + is_96_well: + default: false + description: '参数: is_96_well' + type: string + liquid_height: + description: '参数: liquid_height' + type: string + none_keys: + default: [] + description: '参数: none_keys' + type: string + offsets: + description: '参数: offsets' + type: string + sources: + description: '参数: sources' + type: string + spread: + default: wide + description: '参数: spread' + type: string + top: + description: '参数: top' + type: string + use_channels: + description: '参数: use_channels' + type: string + vols: + description: '参数: vols' + type: string + waste_liquid: + description: '参数: waste_liquid' + type: string + required: + - vols + - sources + type: object + result: {} + required: + - goal + title: remove_liquid 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-set_tiprack: + feedback: {} + goal: {} + goal_default: + tip_racks: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_tiprack 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_tiprack 的参数schema + properties: + tip_racks: + description: '参数: tip_racks' + type: string + required: + - tip_racks + type: object + result: {} + required: + - goal + title: set_tiprack 命令参数 + type: object + type: UniLabJsonCommand + auto-touch_tip: + feedback: {} + goal: {} + goal_default: + targets: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand touch_tip 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand touch_tip 的参数schema + properties: + targets: + description: '参数: targets' + type: string + required: + - targets + type: object + result: {} + required: + - goal + title: touch_tip 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-transfer_liquid: + feedback: {} + goal: {} + goal_default: + asp_flow_rates: null + asp_vols: null + blow_out_air_volume: null + delays: null + dis_flow_rates: null + dis_vols: null + is_96_well: false + liquid_height: null + mix_liquid_height: null + mix_rate: null + mix_stage: none + mix_times: null + mix_vol: null + none_keys: [] + offsets: null + sources: null + spread: wide + targets: null + tip_racks: null + touch_tip: false + use_channels: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand transfer_liquid 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand transfer_liquid 的参数schema + properties: + asp_flow_rates: + description: '参数: asp_flow_rates' + type: string + asp_vols: + description: '参数: asp_vols' + type: string + blow_out_air_volume: + description: '参数: blow_out_air_volume' + type: string + delays: + description: '参数: delays' + type: string + dis_flow_rates: + description: '参数: dis_flow_rates' + type: string + dis_vols: + description: '参数: dis_vols' + type: string + is_96_well: + default: false + description: '参数: is_96_well' + type: boolean + liquid_height: + description: '参数: liquid_height' + type: string + mix_liquid_height: + description: '参数: mix_liquid_height' + type: string + mix_rate: + description: '参数: mix_rate' + type: string + mix_stage: + default: none + description: '参数: mix_stage' + type: string + mix_times: + description: '参数: mix_times' + type: string + mix_vol: + description: '参数: mix_vol' + type: string + none_keys: + default: [] + description: '参数: none_keys' + type: string + offsets: + description: '参数: offsets' + type: string + sources: + description: '参数: sources' + type: string + spread: + default: wide + description: '参数: spread' + type: string + targets: + description: '参数: targets' + type: string + tip_racks: + description: '参数: tip_racks' + type: string + touch_tip: + default: false + description: '参数: touch_tip' + type: boolean + use_channels: + description: '参数: use_channels' + type: string + required: + - sources + - targets + - tip_racks + - asp_vols + - dis_vols + type: object + result: {} + required: + - goal + title: transfer_liquid 命令参数 + type: object + type: UniLabJsonCommandAsync + discard_tips: + feedback: {} + goal: + use_channels: use_channels + goal_default: + use_channels: + - 0 + handles: [] + result: + name: name + schema: + description: ROS Action LiquidHandlerDiscardTips 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerDiscardTips_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - use_channels + title: LiquidHandlerDiscardTips_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDiscardTips_Result + type: object + required: + - goal + title: LiquidHandlerDiscardTips + type: object + type: LiquidHandlerDiscardTips + dispense: + feedback: {} + goal: + blow_out_air_volume: blow_out_air_volume flow_rates: flow_rates offsets: offsets - blow_out_air_volume: blow_out_air_volume + resources: resources spread: spread - feedback: {} + use_channels: use_channels + vols: vols + goal_default: + blow_out_air_volume: + - 0 + flow_rates: + - 0.0 + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + resources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + use_channels: + - 0 + vols: + - 0.0 + handles: [] result: name: name + schema: + description: ROS Action LiquidHandlerDispense 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerDispense_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + blow_out_air_volume: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + flow_rates: + items: + type: number + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + resources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + required: + - resources + - vols + - use_channels + - flow_rates + - offsets + - blow_out_air_volume + - spread + title: LiquidHandlerDispense_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDispense_Result + type: object + required: + - goal + title: LiquidHandlerDispense + type: object + type: LiquidHandlerDispense drop_tips: + feedback: {} + goal: + allow_nonzero_volume: allow_nonzero_volume + offsets: offsets + tip_spots: tip_spots + use_channels: use_channels + goal_default: + allow_nonzero_volume: false + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + tip_spots: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + use_channels: + - 0 + handles: [] + result: + name: name + schema: + description: ROS Action LiquidHandlerDropTips 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerDropTips_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + allow_nonzero_volume: + type: boolean + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + tip_spots: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - tip_spots + - use_channels + - offsets + - allow_nonzero_volume + title: LiquidHandlerDropTips_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDropTips_Result + type: object + required: + - goal + title: LiquidHandlerDropTips + type: object type: LiquidHandlerDropTips - goal: - tip_spots: tip_spots - use_channels: use_channels - offsets: offsets - allow_nonzero_volume: allow_nonzero_volume - feedback: {} - result: - name: name drop_tips96: - type: LiquidHandlerDropTips96 + feedback: {} goal: - tip_rack: tip_rack - offset: offset allow_nonzero_volume: allow_nonzero_volume - feedback: {} + offset: offset + tip_rack: tip_rack + goal_default: + allow_nonzero_volume: false + offset: + x: 0.0 + y: 0.0 + z: 0.0 + tip_rack: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: name: name + schema: + description: ROS Action LiquidHandlerDropTips96 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerDropTips96_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + allow_nonzero_volume: + type: boolean + offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + tip_rack: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - tip_rack + - offset + - allow_nonzero_volume + title: LiquidHandlerDropTips96_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDropTips96_Result + type: object + required: + - goal + title: LiquidHandlerDropTips96 + type: object + type: LiquidHandlerDropTips96 + mix: + feedback: {} + goal: + height_to_bottom: height_to_bottom + mix_rate: mix_rate + mix_time: mix_time + mix_vol: mix_vol + none_keys: none_keys + offsets: offsets + targets: targets + goal_default: + height_to_bottom: 0.0 + mix_rate: 0.0 + mix_time: 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: {} + schema: + description: ROS Action LiquidHandlerMix 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerMix_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + height_to_bottom: + type: number + mix_rate: + type: number + mix_time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + required: + - targets + - mix_time + - mix_vol + - height_to_bottom + - offsets + - mix_rate + - none_keys + title: LiquidHandlerMix_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMix_Result + type: object + required: + - goal + title: LiquidHandlerMix + type: object + type: LiquidHandlerMix move_lid: - type: LiquidHandlerMoveLid + feedback: {} goal: + destination_offset: destination_offset + drop_direction: drop_direction + get_direction: get_direction + intermediate_locations: intermediate_locations lid: lid - to: to - intermediate_locations: intermediate_locations - resource_offset: resource_offset - destination_offset: destination_offset pickup_direction: pickup_direction - drop_direction: drop_direction - get_direction: get_direction - put_direction: put_direction pickup_distance_from_top: pickup_distance_from_top - feedback: {} + put_direction: put_direction + resource_offset: resource_offset + to: to + goal_default: + destination_offset: + x: 0.0 + y: 0.0 + z: 0.0 + drop_direction: '' + get_direction: '' + intermediate_locations: + - x: 0.0 + y: 0.0 + z: 0.0 + lid: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + pickup_direction: '' + pickup_distance_from_top: 0.0 + put_direction: '' + resource_offset: + x: 0.0 + y: 0.0 + z: 0.0 + to: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: name: name + schema: + description: ROS Action LiquidHandlerMoveLid 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerMoveLid_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + destination_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + drop_direction: + type: string + get_direction: + type: string + intermediate_locations: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + lid: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + pickup_direction: + type: string + pickup_distance_from_top: + type: number + put_direction: + type: string + resource_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + to: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - lid + - to + - intermediate_locations + - resource_offset + - destination_offset + - pickup_direction + - drop_direction + - get_direction + - put_direction + - pickup_distance_from_top + title: LiquidHandlerMoveLid_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMoveLid_Result + type: object + required: + - goal + title: LiquidHandlerMoveLid + type: object + type: LiquidHandlerMoveLid move_plate: - type: LiquidHandlerMovePlate + feedback: {} goal: - plate: plate - to: to + destination_offset: destination_offset + drop_direction: drop_direction + get_direction: get_direction intermediate_locations: intermediate_locations - resource_offset: resource_offset + pickup_direction: pickup_direction pickup_offset: pickup_offset - destination_offset: destination_offset - pickup_direction: pickup_direction - drop_direction: drop_direction - get_direction: get_direction + plate: plate put_direction: put_direction - feedback: {} - result: - name: name - move_resource: - type: LiquidHandlerMoveResource - goal: - resource: resource - to: to - intermediate_locations: intermediate_locations resource_offset: resource_offset - destination_offset: destination_offset - pickup_distance_from_top: pickup_distance_from_top - pickup_direction: pickup_direction - drop_direction: drop_direction - get_direction: get_direction - put_direction: put_direction - feedback: {} + to: to + goal_default: + destination_offset: + x: 0.0 + y: 0.0 + z: 0.0 + drop_direction: '' + get_direction: '' + intermediate_locations: + - x: 0.0 + y: 0.0 + z: 0.0 + pickup_direction: '' + pickup_distance_from_top: 0.0 + pickup_offset: + x: 0.0 + y: 0.0 + z: 0.0 + plate: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + put_direction: '' + resource_offset: + x: 0.0 + y: 0.0 + z: 0.0 + to: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: name: name - pick_up_tips: - type: LiquidHandlerPickUpTips + schema: + description: ROS Action LiquidHandlerMovePlate 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerMovePlate_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + destination_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + drop_direction: + type: string + get_direction: + type: string + intermediate_locations: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + pickup_direction: + type: string + pickup_distance_from_top: + type: number + pickup_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + plate: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + put_direction: + type: string + resource_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + to: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - plate + - to + - intermediate_locations + - resource_offset + - pickup_offset + - destination_offset + - pickup_direction + - drop_direction + - get_direction + - put_direction + - pickup_distance_from_top + title: LiquidHandlerMovePlate_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMovePlate_Result + type: object + required: + - goal + title: LiquidHandlerMovePlate + type: object + type: LiquidHandlerMovePlate + move_resource: + feedback: {} goal: + destination_offset: destination_offset + drop_direction: drop_direction + get_direction: get_direction + intermediate_locations: intermediate_locations + pickup_direction: pickup_direction + pickup_distance_from_top: pickup_distance_from_top + put_direction: put_direction + resource: resource + resource_offset: resource_offset + to: to + goal_default: + destination_offset: + x: 0.0 + y: 0.0 + z: 0.0 + drop_direction: '' + get_direction: '' + intermediate_locations: + - x: 0.0 + y: 0.0 + z: 0.0 + pickup_direction: '' + pickup_distance_from_top: 0.0 + put_direction: '' + resource: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + resource_offset: + x: 0.0 + y: 0.0 + z: 0.0 + to: + x: 0.0 + y: 0.0 + z: 0.0 + handles: [] + result: + name: name + schema: + description: ROS Action LiquidHandlerMoveResource 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerMoveResource_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + destination_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + drop_direction: + type: string + get_direction: + type: string + intermediate_locations: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + pickup_direction: + type: string + pickup_distance_from_top: + type: number + put_direction: + type: string + resource: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + resource_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + to: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - resource + - to + - intermediate_locations + - resource_offset + - destination_offset + - pickup_distance_from_top + - pickup_direction + - drop_direction + - get_direction + - put_direction + title: LiquidHandlerMoveResource_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMoveResource_Result + type: object + required: + - goal + title: LiquidHandlerMoveResource + type: object + type: LiquidHandlerMoveResource + move_to: + feedback: {} + goal: + channel: channel + dis_to_top: dis_to_top + well: well + goal_default: + channel: 0 + dis_to_top: 0.0 + well: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: {} + schema: + description: ROS Action LiquidHandlerMoveTo 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerMoveTo_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + channel: + maximum: 2147483647 + minimum: -2147483648 + type: integer + dis_to_top: + type: number + well: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - well + - dis_to_top + - channel + title: LiquidHandlerMoveTo_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMoveTo_Result + type: object + required: + - goal + title: LiquidHandlerMoveTo + type: object + type: LiquidHandlerMoveTo + pick_up_tips: + feedback: {} + goal: + offsets: offsets tip_spots: tip_spots use_channels: use_channels - offsets: offsets - feedback: {} + goal_default: + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + tip_spots: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + use_channels: + - 0 + handles: [] result: name: name + schema: + description: ROS Action LiquidHandlerPickUpTips 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerPickUpTips_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + tip_spots: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - tip_spots + - use_channels + - offsets + title: LiquidHandlerPickUpTips_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerPickUpTips_Result + type: object + required: + - goal + title: LiquidHandlerPickUpTips + type: object + type: LiquidHandlerPickUpTips pick_up_tips96: - type: LiquidHandlerPickUpTips96 + feedback: {} goal: - tip_rack: tip_rack offset: offset - feedback: {} + tip_rack: tip_rack + goal_default: + offset: + x: 0.0 + y: 0.0 + z: 0.0 + tip_rack: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: name: name - return_tips: - type: LiquidHandlerReturnTips + schema: + description: ROS Action LiquidHandlerPickUpTips96 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerPickUpTips96_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + tip_rack: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - tip_rack + - offset + title: LiquidHandlerPickUpTips96_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerPickUpTips96_Result + type: object + required: + - goal + title: LiquidHandlerPickUpTips96 + type: object + type: LiquidHandlerPickUpTips96 + remove: + feedback: {} goal: + blow_out_air_volume: blow_out_air_volume + delays: delays + flow_rates: flow_rates + is_96_well: is_96_well + liquid_height: liquid_height + none_keys: none_keys + offsets: offsets + sources: sources + spread: spread + top: top use_channels: use_channels - allow_nonzero_volume: allow_nonzero_volume + vols: vols + waste_liquid: waste_liquid + goal_default: + blow_out_air_volume: + - 0.0 + delays: + - 0 + flow_rates: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + top: + - 0.0 + use_channels: + - 0 + vols: + - 0.0 + waste_liquid: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: {} + schema: + description: ROS Action LiquidHandlerRemove 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerRemove_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + flow_rates: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + top: + items: + type: number + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + waste_liquid: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vols + - sources + - waste_liquid + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + - delays + - is_96_well + - top + - none_keys + title: LiquidHandlerRemove_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerRemove_Result + type: object + required: + - goal + title: LiquidHandlerRemove + type: object + type: LiquidHandlerRemove + return_tips: feedback: {} + goal: + allow_nonzero_volume: allow_nonzero_volume + use_channels: use_channels + goal_default: + allow_nonzero_volume: false + use_channels: + - 0 + handles: [] result: name: name + schema: + description: ROS Action LiquidHandlerReturnTips 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerReturnTips_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + allow_nonzero_volume: + type: boolean + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - use_channels + - allow_nonzero_volume + title: LiquidHandlerReturnTips_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerReturnTips_Result + type: object + required: + - goal + title: LiquidHandlerReturnTips + type: object + type: LiquidHandlerReturnTips return_tips96: - type: LiquidHandlerReturnTips96 + feedback: {} goal: allow_nonzero_volume: allow_nonzero_volume - feedback: {} + goal_default: + allow_nonzero_volume: false + handles: [] result: name: name + schema: + description: ROS Action LiquidHandlerReturnTips96 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerReturnTips96_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + allow_nonzero_volume: + type: boolean + required: + - allow_nonzero_volume + title: LiquidHandlerReturnTips96_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerReturnTips96_Result + type: object + required: + - goal + title: LiquidHandlerReturnTips96 + type: object + type: LiquidHandlerReturnTips96 stamp: - type: LiquidHandlerStamp + feedback: {} goal: + aspiration_flow_rate: aspiration_flow_rate + dispense_flow_rate: dispense_flow_rate source: source target: target volume: volume - aspiration_flow_rate: aspiration_flow_rate - dispense_flow_rate: dispense_flow_rate - feedback: {} + goal_default: + aspiration_flow_rate: 0.0 + dispense_flow_rate: 0.0 + source: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + target: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: 0.0 + handles: [] result: name: name + schema: + description: ROS Action LiquidHandlerStamp 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerStamp_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + aspiration_flow_rate: + type: number + dispense_flow_rate: + type: number + source: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + target: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: number + required: + - source + - target + - volume + - aspiration_flow_rate + - dispense_flow_rate + title: LiquidHandlerStamp_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerStamp_Result + type: object + required: + - goal + title: LiquidHandlerStamp + type: object + type: LiquidHandlerStamp transfer: - type: LiquidHandlerTransfer goal: - source: source - targets: targets - source_vol: source_vol - ratios: ratios - target_vols: target_vols aspiration_flow_rate: aspiration_flow_rate dispense_flow_rates: dispense_flow_rates - handles: - input: - - handler_key: liquid-input - label: Liquid Input - data_type: resource - io_type: target - data_source: handle - data_key: liquid - output: - - handler_key: liquid-output - label: Liquid Output - data_type: resource - io_type: source - data_source: executor - data_key: liquid - schema: - type: object - properties: - name: - type: string - description: 液体处理仪器当前状态 - required: - - name - additionalProperties: false - -liquid_handler.revvity: - class: - module: unilabos.devices.liquid_handling.revvity:Revvity - type: python - status_types: - status: String - action_value_mappings: - run: - type: WorkStationRun - goal: - wf_name: file_path - params: params - resource: resource - feedback: - status: status - result: - success: success - -liquid_handler.biomek: - description: Biomek液体处理器设备,基于pylabrobot控制 - icon: icon_yiyezhan.webp - class: - module: unilabos.devices.liquid_handling.biomek:LiquidHandlerBiomek - type: python - status_types: {} - action_value_mappings: - create_protocol: - type: LiquidHandlerProtocolCreation - goal: - protocol_name: protocol_name - protocol_description: protocol_description - protocol_version: protocol_version - protocol_author: protocol_author - protocol_date: protocol_date - protocol_type: protocol_type - none_keys: none_keys - feedback: {} - result: {} - run_protocol: - type: EmptyIn - goal: {} - feedback: {} - result: {} - transfer_liquid: - type: LiquidHandlerTransfer - goal: - asp_vols: asp_vols - dis_vols: dis_vols - sources: sources + ratios: ratios + source: source + source_vol: source_vol + target_vols: target_vols targets: targets - tip_racks: tip_racks - use_channels: use_channels + goal_default: + asp_flow_rates: + - 0.0 + asp_vols: + - 0.0 + blow_out_air_volume: + - 0.0 + delays: + - 0 + dis_flow_rates: + - 0.0 + dis_vols: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + mix_liquid_height: 0.0 + mix_rate: 0 + mix_stage: '' + mix_times: + - 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + tip_racks: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + touch_tip: false + use_channels: + - 0 + handles: [] + schema: + description: ROS Action LiquidHandlerTransfer 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerTransfer_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + asp_flow_rates: + items: + type: number + type: array + asp_vols: + items: + type: number + type: array + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + dis_flow_rates: + items: + type: number + type: array + dis_vols: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + mix_liquid_height: + type: number + mix_rate: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_stage: + type: string + mix_times: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + tip_racks: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + touch_tip: + type: boolean + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - asp_vols + - dis_vols + - sources + - targets + - tip_racks + - use_channels + - asp_flow_rates + - dis_flow_rates + - offsets + - touch_tip + - liquid_height + - blow_out_air_volume + - spread + - is_96_well + - mix_stage + - mix_times + - mix_vol + - mix_rate + - mix_liquid_height + - delays + - none_keys + title: LiquidHandlerTransfer_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerTransfer_Result + type: object + required: + - goal + title: LiquidHandlerTransfer + type: object + type: LiquidHandlerTransfer + transfer_liquid: + feedback: {} + goal: asp_flow_rates: asp_flow_rates - dis_flow_rates: dis_flow_rates - offsets: offsets - touch_tip: touch_tip - liquid_height: liquid_height + asp_vols: asp_vols blow_out_air_volume: blow_out_air_volume - spread: spread + delays: delays + dis_flow_rates: dis_flow_rates + dis_vols: dis_vols is_96_well: is_96_well + liquid_height: liquid_height + mix_liquid_height: mix_liquid_height + mix_rate: mix_rate 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: {} + offsets: offsets + sources: sources + spread: spread + targets: targets + tip_racks: tip_racks + touch_tip: touch_tip + use_channels: use_channels + goal_default: + asp_flow_rates: + - 0.0 + asp_vols: + - 0.0 + blow_out_air_volume: + - 0.0 + delays: + - 0 + dis_flow_rates: + - 0.0 + dis_vols: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + mix_liquid_height: 0.0 + mix_rate: 0 + mix_stage: '' + mix_times: + - 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + tip_racks: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + touch_tip: false + use_channels: + - 0 + handles: [] result: {} + schema: + description: ROS Action LiquidHandlerTransfer 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerTransfer_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + asp_flow_rates: + items: + type: number + type: array + asp_vols: + items: + type: number + type: array + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + dis_flow_rates: + items: + type: number + type: array + dis_vols: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + mix_liquid_height: + type: number + mix_rate: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_stage: + type: string + mix_times: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + tip_racks: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + touch_tip: + type: boolean + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - asp_vols + - dis_vols + - sources + - targets + - tip_racks + - use_channels + - asp_flow_rates + - dis_flow_rates + - offsets + - touch_tip + - liquid_height + - blow_out_air_volume + - spread + - is_96_well + - mix_stage + - mix_times + - mix_vol + - mix_rate + - mix_liquid_height + - delays + - none_keys + title: LiquidHandlerTransfer_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerTransfer_Result + type: object + required: + - goal + title: LiquidHandlerTransfer + type: object + type: LiquidHandlerTransfer + module: unilabos.devices.liquid_handling.liquid_handler_abstract:LiquidHandlerAbstract + status_types: {} + type: python + description: Liquid handler device controlled by pylabrobot + handles: + input: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: liquid-input + io_type: target + label: Liquid Input + output: + - data_key: liquid + data_source: executor + data_type: resource + handler_key: liquid-output + io_type: source + label: Liquid Output + icon: icon_yiyezhan.webp + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + backend: + description: '参数: backend' + type: string + deck: + description: '参数: deck' + type: string + required: + - backend + - deck + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +liquid_handler.biomek: + class: + action_value_mappings: + auto-create_protocol: + feedback: {} + goal: {} + goal_default: + none_keys: [] + protocol_author: null + protocol_date: null + protocol_description: null + protocol_name: null + protocol_type: null + protocol_version: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand create_protocol 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand create_protocol 的参数schema + properties: + none_keys: + default: [] + description: '参数: none_keys' + type: array + protocol_author: + description: '参数: protocol_author' + type: string + protocol_date: + description: '参数: protocol_date' + type: string + protocol_description: + description: '参数: protocol_description' + type: string + protocol_name: + description: '参数: protocol_name' + type: string + protocol_type: + description: '参数: protocol_type' + type: string + protocol_version: + description: '参数: protocol_version' + type: string + required: + - protocol_name + - protocol_description + - protocol_version + - protocol_author + - protocol_date + - protocol_type + type: object + result: {} + required: + - goal + title: create_protocol 命令参数 + type: object + type: UniLabJsonCommand + auto-create_resource: + feedback: {} + goal: {} + goal_default: + bind_location: null + bind_parent_id: null + liquid_input_slot: null + liquid_type: null + liquid_volume: null + resource_tracker: null + resources: null + slot_on_deck: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand create_resource 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand create_resource 的参数schema + properties: + bind_location: + description: '参数: bind_location' + type: object + bind_parent_id: + description: '参数: bind_parent_id' + type: string + liquid_input_slot: + description: '参数: liquid_input_slot' + type: array + liquid_type: + description: '参数: liquid_type' + type: array + liquid_volume: + description: '参数: liquid_volume' + type: array + resource_tracker: + description: '参数: resource_tracker' + type: string + resources: + description: '参数: resources' + type: array + slot_on_deck: + description: '参数: slot_on_deck' + type: integer + required: + - resource_tracker + - resources + - bind_parent_id + - bind_location + - liquid_input_slot + - liquid_type + - liquid_volume + - slot_on_deck + type: object + result: {} + required: + - goal + title: create_resource 命令参数 + type: object + type: UniLabJsonCommand + auto-incubation_biomek: + feedback: {} + goal: {} + goal_default: + time: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand incubation_biomek 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand incubation_biomek 的参数schema + properties: + time: + description: '参数: time' + type: integer + required: + - time + type: object + result: {} + required: + - goal + title: incubation_biomek 命令参数 + type: object + type: UniLabJsonCommand + auto-instrument_setup_biomek: + feedback: {} + goal: {} + goal_default: + class_name: null + id: null + liquid_input_wells: null + liquid_type: null + liquid_volume: null + parent: null + slot_on_deck: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand instrument_setup_biomek 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand instrument_setup_biomek 的参数schema + properties: + class_name: + description: '参数: class_name' + type: string + id: + description: '参数: id' + type: string + liquid_input_wells: + description: '参数: liquid_input_wells' + type: array + liquid_type: + description: '参数: liquid_type' + type: array + liquid_volume: + description: '参数: liquid_volume' + type: array + parent: + description: '参数: parent' + type: string + slot_on_deck: + description: '参数: slot_on_deck' + type: string + required: + - id + - parent + - slot_on_deck + - class_name + - liquid_type + - liquid_volume + - liquid_input_wells + type: object + result: {} + required: + - goal + title: instrument_setup_biomek 命令参数 + type: object + type: UniLabJsonCommand + auto-move_biomek: + feedback: {} + goal: {} + goal_default: + source: null + target: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand move_biomek 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand move_biomek 的参数schema + properties: + source: + description: '参数: source' + type: string + target: + description: '参数: target' + type: string + required: + - source + - target + type: object + result: {} + required: + - goal + title: move_biomek 命令参数 + type: object + type: UniLabJsonCommand + auto-oscillation_biomek: + feedback: {} + goal: {} + goal_default: + rpm: null + time: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand oscillation_biomek 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand oscillation_biomek 的参数schema + properties: + rpm: + description: '参数: rpm' + type: integer + time: + description: '参数: time' + type: integer + required: + - rpm + - time + type: object + result: {} + required: + - goal + title: oscillation_biomek 命令参数 + type: object + type: UniLabJsonCommand + auto-run_protocol: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand run_protocol 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand run_protocol 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: run_protocol 命令参数 + type: object + type: UniLabJsonCommand + auto-transfer_biomek: + feedback: {} + goal: {} + goal_default: + aspirate_techniques: null + dispense_techniques: null + source: null + target: null + tip_rack: null + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand transfer_biomek 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand transfer_biomek 的参数schema + properties: + aspirate_techniques: + description: '参数: aspirate_techniques' + type: string + dispense_techniques: + description: '参数: dispense_techniques' + type: string + source: + description: '参数: source' + type: string + target: + description: '参数: target' + type: string + tip_rack: + description: '参数: tip_rack' + type: string + volume: + description: '参数: volume' + type: number + required: + - source + - target + - tip_rack + - volume + - aspirate_techniques + - dispense_techniques + type: object + result: {} + required: + - goal + title: transfer_biomek 命令参数 + type: object + type: UniLabJsonCommand + auto-transfer_liquid: + feedback: {} + goal: {} + goal_default: + asp_flow_rates: null + asp_vols: null + blow_out_air_volume: null + delays: null + dis_flow_rates: null + dis_vols: null + is_96_well: false + liquid_height: null + mix_liquid_height: null + mix_rate: null + mix_stage: none + mix_times: null + mix_vol: null + none_keys: [] + offsets: null + sources: null + spread: wide + targets: null + tip_racks: null + touch_tip: false + use_channels: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand transfer_liquid 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand transfer_liquid 的参数schema + properties: + asp_flow_rates: + description: '参数: asp_flow_rates' + type: string + asp_vols: + description: '参数: asp_vols' + type: string + blow_out_air_volume: + description: '参数: blow_out_air_volume' + type: string + delays: + description: '参数: delays' + type: string + dis_flow_rates: + description: '参数: dis_flow_rates' + type: string + dis_vols: + description: '参数: dis_vols' + type: string + is_96_well: + default: false + description: '参数: is_96_well' + type: boolean + liquid_height: + description: '参数: liquid_height' + type: string + mix_liquid_height: + description: '参数: mix_liquid_height' + type: string + mix_rate: + description: '参数: mix_rate' + type: string + mix_stage: + default: none + description: '参数: mix_stage' + type: string + mix_times: + description: '参数: mix_times' + type: string + mix_vol: + description: '参数: mix_vol' + type: string + none_keys: + default: [] + description: '参数: none_keys' + type: array + offsets: + description: '参数: offsets' + type: string + sources: + description: '参数: sources' + type: string + spread: + default: wide + description: '参数: spread' + type: string + targets: + description: '参数: targets' + type: string + tip_racks: + description: '参数: tip_racks' + type: string + touch_tip: + default: false + description: '参数: touch_tip' + type: boolean + use_channels: + description: '参数: use_channels' + type: string + required: + - sources + - targets + - tip_racks + - asp_vols + - dis_vols + type: object + result: {} + required: + - goal + title: transfer_liquid 命令参数 + type: object + type: UniLabJsonCommand + create_protocol: + feedback: {} + goal: + none_keys: none_keys + protocol_author: protocol_author + protocol_date: protocol_date + protocol_description: protocol_description + protocol_name: protocol_name + protocol_type: protocol_type + protocol_version: protocol_version + goal_default: + none_keys: + - '' + protocol_author: '' + protocol_date: '' + protocol_description: '' + protocol_name: '' + protocol_type: '' + protocol_version: '' + handles: [] + result: {} + schema: + description: ROS Action LiquidHandlerProtocolCreation 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerProtocolCreation_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + none_keys: + items: + type: string + type: array + protocol_author: + type: string + protocol_date: + type: string + protocol_description: + type: string + protocol_name: + type: string + protocol_type: + type: string + protocol_version: + type: string + required: + - protocol_name + - protocol_description + - protocol_version + - protocol_author + - protocol_date + - protocol_type + - none_keys + title: LiquidHandlerProtocolCreation_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: LiquidHandlerProtocolCreation_Result + type: object + required: + - goal + title: LiquidHandlerProtocolCreation + type: object + type: LiquidHandlerProtocolCreation + incubation_biomek: + feedback: {} + goal: + time: time + goal_default: + time: 0 handles: input: - - handler_key: liquid-input - label: Liquid Input - data_type: resource - io_type: target - data_source: handle - data_key: liquid + - data_key: liquid + data_source: handle + data_type: resource + handler_key: plate + label: plate output: - - handler_key: liquid-output - label: Liquid Output - data_type: resource - io_type: source - data_source: executor - data_key: liquid - transfer_biomek: - type: LiquidHandlerTransferBiomek + - data_key: liquid + data_source: handle + data_type: resource + handler_key: plate_out + label: plate + result: {} + schema: + description: ROS Action LiquidHandlerIncubateBiomek 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerIncubateBiomek_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - time + title: LiquidHandlerIncubateBiomek_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerIncubateBiomek_Result + type: object + required: + - goal + title: LiquidHandlerIncubateBiomek + type: object + type: LiquidHandlerIncubateBiomek + move_biomek: + feedback: {} goal: + source: sources + target: targets + goal_default: + sources: '' + targets: '' + handles: + input: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: sources + label: sources + output: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: targets + label: targets + result: + name: name + schema: + description: ROS Action LiquidHandlerMoveBiomek 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerMoveBiomek_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + sources: + type: string + targets: + type: string + required: + - sources + - targets + title: LiquidHandlerMoveBiomek_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMoveBiomek_Result + type: object + required: + - goal + title: LiquidHandlerMoveBiomek + type: object + type: LiquidHandlerMoveBiomek + oscillation_biomek: + feedback: {} + goal: + rpm: rpm + time: time + goal_default: + rpm: 0 + time: 0 + handles: + input: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: plate + label: plate + output: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: plate_out + label: plate + result: {} + schema: + description: ROS Action LiquidHandlerOscillateBiomek 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerOscillateBiomek_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + rpm: + maximum: 2147483647 + minimum: -2147483648 + type: integer + time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - rpm + - time + title: LiquidHandlerOscillateBiomek_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerOscillateBiomek_Result + type: object + required: + - goal + title: LiquidHandlerOscillateBiomek + type: object + type: LiquidHandlerOscillateBiomek + run_protocol: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + transfer_biomek: + feedback: {} + goal: + aspirate_techniques: aspirate_techniques + dispense_techniques: dispense_techniques sources: sources targets: targets tip_rack: tip_rack volume: volume - aspirate_techniques: aspirate_techniques - dispense_techniques: dispense_techniques - feedback: {} + goal_default: + aspirate_technique: '' + dispense_technique: '' + sources: '' + targets: '' + tip_rack: '' + volume: 0.0 + handles: + input: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: sources + label: sources + - data_key: liquid + data_source: executor + data_type: resource + handler_key: targets + label: targets + - data_key: liquid + data_source: executor + data_type: resource + handler_key: tip_rack + label: tip_rack + output: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: sources_out + label: sources + - data_key: liquid + data_source: executor + data_type: resource + handler_key: targets_out + label: targets result: {} + schema: + description: ROS Action LiquidHandlerTransferBiomek 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerTransferBiomek_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + aspirate_technique: + type: string + dispense_technique: + type: string + sources: + type: string + targets: + type: string + tip_rack: + type: string + volume: + type: number + required: + - sources + - targets + - tip_rack + - volume + - aspirate_technique + - dispense_technique + title: LiquidHandlerTransferBiomek_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerTransferBiomek_Result + type: object + required: + - goal + title: LiquidHandlerTransferBiomek + type: object + type: LiquidHandlerTransferBiomek + transfer_liquid: + feedback: {} + goal: + asp_flow_rates: asp_flow_rates + asp_vols: asp_vols + blow_out_air_volume: blow_out_air_volume + delays: delays + dis_flow_rates: dis_flow_rates + dis_vols: dis_vols + is_96_well: is_96_well + liquid_height: liquid_height + mix_liquid_height: mix_liquid_height + mix_rate: mix_rate + mix_stage: mix_stage + mix_times: mix_times + mix_vol: mix_vol + none_keys: none_keys + offsets: offsets + sources: sources + spread: spread + targets: targets + tip_racks: tip_racks + touch_tip: touch_tip + use_channels: use_channels + goal_default: + asp_flow_rates: + - 0.0 + asp_vols: + - 0.0 + blow_out_air_volume: + - 0.0 + delays: + - 0 + dis_flow_rates: + - 0.0 + dis_vols: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + mix_liquid_height: 0.0 + mix_rate: 0 + mix_stage: '' + mix_times: + - 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + tip_racks: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + touch_tip: false + use_channels: + - 0 handles: input: - - handler_key: sources - label: sources - data_type: resource - data_source: handle - data_key: liquid - - handler_key: targets - label: targets - data_type: resource - data_source: executor - data_key: liquid - - handler_key: tip_rack - label: tip_rack - data_type: resource - data_source: executor - data_key: liquid + - data_key: liquid + data_source: handle + data_type: resource + handler_key: liquid-input + io_type: target + label: Liquid Input output: - - handler_key: sources_out - label: sources - data_type: resource - data_source: handle - data_key: liquid - - handler_key: targets_out - label: targets - data_type: resource - data_source: executor - data_key: liquid - oscillation_biomek: - type: LiquidHandlerOscillateBiomek - goal: - rpm: rpm - time: time - feedback: {} + - data_key: liquid + data_source: executor + data_type: resource + handler_key: liquid-output + io_type: source + label: Liquid Output result: {} - handles: - input: - - handler_key: plate - label: plate - data_type: resource - data_source: handle - data_key: liquid - output: - - handler_key: plate_out - label: plate - data_type: resource - data_source: handle - data_key: liquid - move_biomek: - type: LiquidHandlerMoveBiomek - goal: - source: sources - target: targets - feedback: {} - result: - name: name - handles: - input: - - handler_key: sources - label: sources - data_type: resource - data_source: handle - data_key: liquid - output: - - handler_key: targets - label: targets - data_type: resource - data_source: handle - data_key: liquid - incubation_biomek: - type: LiquidHandlerIncubateBiomek - goal: - time: time - feedback: {} - result: {} - handles: - input: - - handler_key: plate - label: plate - data_type: resource - data_source: handle - data_key: liquid - output: - - handler_key: plate_out - label: plate - data_type: resource - data_source: handle - data_key: liquid - schema: + schema: + description: ROS Action LiquidHandlerTransfer 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: LiquidHandlerTransfer_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + asp_flow_rates: + items: + type: number + type: array + asp_vols: + items: + type: number + type: array + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + dis_flow_rates: + items: + type: number + type: array + dis_vols: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + mix_liquid_height: + type: number + mix_rate: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_stage: + type: string + mix_times: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + tip_racks: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + touch_tip: + type: boolean + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - asp_vols + - dis_vols + - sources + - targets + - tip_racks + - use_channels + - asp_flow_rates + - dis_flow_rates + - offsets + - touch_tip + - liquid_height + - blow_out_air_volume + - spread + - is_96_well + - mix_stage + - mix_times + - mix_vol + - mix_rate + - mix_liquid_height + - delays + - none_keys + title: LiquidHandlerTransfer_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerTransfer_Result + type: object + required: + - goal + title: LiquidHandlerTransfer + type: object + type: LiquidHandlerTransfer + module: unilabos.devices.liquid_handling.biomek:LiquidHandlerBiomek + status_types: + success: String + type: python + description: Biomek液体处理器设备,基于pylabrobot控制 + handles: [] + icon: icon_yiyezhan.webp + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + args: + description: '参数: args' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - args + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +liquid_handler.revvity: + class: + action_value_mappings: + auto-run: + feedback: {} + goal: {} + goal_default: + file_path: null + params: null + resource: + AichemecoHiwo: + id: AichemecoHiwo + handles: [] + result: {} + schema: + description: UniLabJsonCommand run 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand run 的参数schema + properties: + file_path: + description: '参数: file_path' + type: string + params: + description: '参数: params' + type: string + resource: + default: + AichemecoHiwo: + id: AichemecoHiwo + description: '参数: resource' + type: object + required: + - file_path + - params + type: object + result: {} + required: + - goal + title: run 命令参数 + type: object + type: UniLabJsonCommand + run: + feedback: + status: status + goal: + params: params + resource: resource + wf_name: file_path + goal_default: + params: '' + resource: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + wf_name: '' + handles: [] + result: + success: success + schema: + description: ROS Action WorkStationRun 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + gantt: + type: string + status: + type: string + required: + - status + - gantt + title: WorkStationRun_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + params: + type: string + resource: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + wf_name: + type: string + required: + - wf_name + - params + - resource + title: WorkStationRun_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: WorkStationRun_Result + type: object + required: + - goal + title: WorkStationRun + type: object + type: WorkStationRun + module: unilabos.devices.liquid_handling.revvity:Revvity + status_types: + status: str + success: bool + type: python + description: '' + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 type: object - properties: {} - required: [] - additionalProperties: false diff --git a/unilabos/registry/devices/mock_devices.yaml b/unilabos/registry/devices/mock_devices.yaml index 93f52a85..cc4db28b 100644 --- a/unilabos/registry/devices/mock_devices.yaml +++ b/unilabos/registry/devices/mock_devices.yaml @@ -1,892 +1,3955 @@ mock_chiller: - description: Mock Chiller Device class: - module: unilabos.devices.mock.mock_chiller:MockChiller - type: python - status_types: - current_temperature: Float64 - target_temperature: Float64 - status: String - is_cooling: Bool - is_heating: Bool - vessel: String # 新增 - purpose: String # 新增 action_value_mappings: - emergency_stop: - type: EmptyIn + auto-emergency_stop: + feedback: {} goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop 命令参数 + type: object + type: UniLabJsonCommand + auto-heat_chill_start: feedback: {} + goal: {} + goal_default: + purpose: null + temp: null + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand heat_chill_start 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heat_chill_start 的参数schema + properties: + purpose: + description: '参数: purpose' + type: string + temp: + description: '参数: temp' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + - temp + - purpose + type: object + result: {} + required: + - goal + title: heat_chill_start 命令参数 + type: object + type: UniLabJsonCommand + auto-heat_chill_stop: + feedback: {} + goal: {} + goal_default: + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand heat_chill_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heat_chill_stop 的参数schema + properties: + vessel: + description: '参数: vessel' + type: string + required: + - vessel + type: object + result: {} + required: + - goal + title: heat_chill_stop 命令参数 + type: object + type: UniLabJsonCommand + emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn heat_chill_start: - type: HeatChillStart + feedback: {} goal: - vessel: vessel - temp: temp purpose: purpose - feedback: {} + temp: temp + vessel: vessel + goal_default: + purpose: '' + temp: 0.0 + vessel: '' + handles: [] result: - success: success status: status + success: success + schema: + description: ROS Action HeatChillStart 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChillStart_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + temp: + type: number + vessel: + type: string + required: + - vessel + - temp + - purpose + title: HeatChillStart_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStart_Result + type: object + required: + - goal + title: HeatChillStart + type: object + type: HeatChillStart heat_chill_stop: - type: HeatChillStop - goal: - vessel: vessel feedback: {} - result: - success: success - status: status - schema: - type: object - properties: - current_temperature: - type: number - description: Current temperature of the chiller in °C - target_temperature: - type: number - description: Target temperature setting in °C - status: - type: string - description: Current status of the device - is_cooling: - type: boolean - description: Whether the device is actively cooling - is_heating: - type: boolean - description: Whether the device is actively heating - vessel: # 新增 - type: string - description: Current vessel being processed - purpose: # 新增 - type: string - description: Purpose of the current operation - required: - - current_temperature - - target_temperature - - status - - vessel - - purpose - additionalProperties: false -mock_filter: - description: Mock Filter Device - class: - module: unilabos.devices.mock.mock_filter:MockFilter - type: python - status_types: - status: String - is_filtering: Bool - flow_rate: Float64 - pressure_drop: Float64 - filter_life: Float64 - vessel: String - filtrate_vessel: String - filtered_volume: Float64 - progress: Float64 - stir: Bool - stir_speed: Float64 - temperature: Float64 - continue_heatchill: Bool - target_volume: Float64 - action_value_mappings: - filter: - type: Filter goal: vessel: vessel + goal_default: + vessel: '' + handles: [] + result: + status: status + success: success + schema: + description: ROS Action HeatChillStop 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChillStop_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + vessel: + type: string + required: + - vessel + title: HeatChillStop_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStop_Result + type: object + required: + - goal + title: HeatChillStop + type: object + type: HeatChillStop + module: unilabos.devices.mock.mock_chiller:MockChiller + status_types: + current_temperature: float + is_cooling: bool + is_heating: bool + purpose: str + status: str + status_info: dict + target_temperature: float + vessel: str + type: python + description: Mock Chiller Device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +mock_filter: + class: + action_value_mappings: + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop 命令参数 + type: object + type: UniLabJsonCommand + auto-filter: + feedback: {} + goal: {} + goal_default: + continue_heatchill: false + filtrate_vessel: null + stir: false + stir_speed: 0.0 + temp: 25.0 + vessel: null + volume: 0.0 + handles: [] + result: {} + schema: + description: UniLabJsonCommand filter 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand filter 的参数schema + properties: + continue_heatchill: + default: false + description: '参数: continue_heatchill' + type: boolean + filtrate_vessel: + description: '参数: filtrate_vessel' + type: string + stir: + default: false + description: '参数: stir' + type: boolean + stir_speed: + default: 0.0 + description: '参数: stir_speed' + type: number + temp: + default: 25.0 + description: '参数: temp' + type: number + vessel: + description: '参数: vessel' + type: string + volume: + default: 0.0 + description: '参数: volume' + type: number + required: + - vessel + - filtrate_vessel + type: object + result: {} + required: + - goal + title: filter 命令参数 + type: object + type: UniLabJsonCommand + auto-replace_filter: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand replace_filter 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand replace_filter 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: replace_filter 命令参数 + type: object + type: UniLabJsonCommand + auto-stop_filtering: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_filtering 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_filtering 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_filtering 命令参数 + type: object + type: UniLabJsonCommand + filter: + feedback: + current_status: current_status + current_temp: current_temp + filtered_volume: filtered_volume + progress: progress + goal: + continue_heatchill: continue_heatchill filtrate_vessel: filtrate_vessel stir: stir stir_speed: stir_speed temp: temp - continue_heatchill: continue_heatchill + vessel: vessel volume: volume - feedback: - progress: progress - current_temp: current_temp - filtered_volume: filtered_volume - current_status: current_status + goal_default: + continue_heatchill: false + filtrate_vessel: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + vessel: '' + volume: 0.0 + handles: [] result: - success: success message: message - stop_filtering: - type: EmptyIn - goal: {} - feedback: {} - result: success: success + schema: + description: ROS Action Filter 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + current_temp: + type: number + filtered_volume: + type: number + progress: + type: number + required: + - progress + - current_temp + - filtered_volume + - current_status + title: Filter_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + continue_heatchill: + type: boolean + filtrate_vessel: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + vessel: + type: string + volume: + type: number + required: + - vessel + - filtrate_vessel + - stir + - stir_speed + - temp + - continue_heatchill + - volume + title: Filter_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Filter_Result + type: object + required: + - goal + title: Filter + type: object + type: Filter replace_filter: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the filter - is_filtering: - type: boolean - description: Whether the filter is actively filtering - flow_rate: - type: number - description: Current flow rate in L/min - pressure_drop: - type: number - description: Pressure drop across the filter in Pa - filter_life: - type: number - description: Remaining filter life percentage - power_on: - type: boolean - description: Power state of the device - required: - - status - - is_filtering - - flow_rate - - filter_life - - vessel - - filtrate_vessel - - filtered_volume - - progress - additionalProperties: false -mock_heater: - description: Mock Heater Device - class: - module: unilabos.devices.mock.mock_heater:MockHeater - type: python + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + stop_filtering: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_filter:MockFilter status_types: - current_temperature: Float64 - target_temperature: Float64 - status: String - is_heating: Bool - heating_power: Float64 - max_temperature: Float64 - vessel: String - purpose: String - stir: Bool - stir_speed: Float64 + continue_heatchill: bool + filter_life: float + filtered_volume: float + filtrate_vessel: str + flow_rate: float + is_filtering: bool + pressure_drop: float + progress: float + status: str + status_info: dict + stir: bool + stir_speed: float + target_volume: float + temperature: float + vessel: str + type: python + description: Mock Filter Device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +mock_heater: + class: action_value_mappings: - heat_chill_start: - type: HeatChillStart - goal: - vessel: vessel - temp: temp - purpose: purpose - feedback: - status: status - result: - success: success - heat_chill_stop: - type: HeatChillStop - goal: - vessel: vessel - feedback: - status: status + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop 命令参数 + type: object + type: UniLabJsonCommand + auto-heat_chill: + feedback: {} + goal: {} + goal_default: + purpose: Unknown + stir: false + stir_speed: 0.0 + temp: null + time: null + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand heat_chill 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heat_chill 的参数schema + properties: + purpose: + default: Unknown + description: '参数: purpose' + type: string + stir: + default: false + description: '参数: stir' + type: boolean + stir_speed: + default: 0.0 + description: '参数: stir_speed' + type: number + temp: + description: '参数: temp' + type: number + time: + description: '参数: time' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + - temp + - time + type: object + result: {} + required: + - goal + title: heat_chill 命令参数 + type: object + type: UniLabJsonCommand + auto-heat_chill_start: + feedback: {} + goal: {} + goal_default: + purpose: null + temp: null + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand heat_chill_start 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heat_chill_start 的参数schema + properties: + purpose: + description: '参数: purpose' + type: string + temp: + description: '参数: temp' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + - temp + - purpose + type: object + result: {} + required: + - goal + title: heat_chill_start 命令参数 + type: object + type: UniLabJsonCommand + auto-heat_chill_stop: + feedback: {} + goal: {} + goal_default: + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand heat_chill_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heat_chill_stop 的参数schema + properties: + vessel: + description: '参数: vessel' + type: string + required: + - vessel + type: object + result: {} + required: + - goal + title: heat_chill_stop 命令参数 + type: object + type: UniLabJsonCommand + auto-set_heating_power: + feedback: {} + goal: {} + goal_default: + power: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_heating_power 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_heating_power 的参数schema + properties: + power: + description: '参数: power' + type: number + required: + - power + type: object + result: {} + required: + - goal + title: set_heating_power 命令参数 + type: object + type: UniLabJsonCommand + auto-set_temperature: + feedback: {} + goal: {} + goal_default: + temperature: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_temperature 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_temperature 的参数schema + properties: + temperature: + description: '参数: temperature' + type: number + required: + - temperature + type: object + result: {} + required: + - goal + title: set_temperature 命令参数 + type: object + type: UniLabJsonCommand + emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn heat_chill: - type: HeatChill + feedback: + status: status goal: - vessel: vessel - temp: temp - time: time + purpose: purpose stir: stir stir_speed: stir_speed - purpose: purpose + temp: temp + time: time + vessel: vessel + goal_default: + purpose: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' + handles: [] + result: + success: success + schema: + description: ROS Action HeatChill 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChill_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + required: + - vessel + - temp + - time + - stir + - stir_speed + - purpose + title: HeatChill_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChill_Result + type: object + required: + - goal + title: HeatChill + type: object + type: HeatChill + heat_chill_start: feedback: status: status - result: - success: success - emergency_stop: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - schema: - type: object - properties: - current_temperature: - type: number - description: Current temperature of the heater in °C - target_temperature: - type: number - description: Target temperature setting in °C - status: - type: string - description: Current status of the device - is_heating: - type: boolean - description: Whether the device is actively heating - heating_power: - type: number - description: Current heating power percentage - max_temperature: - type: number - description: Maximum temperature limit - vessel: - type: string - description: Current vessel being heated - purpose: - type: string - description: Purpose of the heating operation - stir: - type: boolean - description: Whether stirring is enabled - stir_speed: - type: number - description: Current stirring speed - required: - - current_temperature - - target_temperature - - status - - vessel - - purpose - additionalProperties: false -mock_pump: - description: Mock Pump Device - class: - module: unilabos.devices.mock.mock_pump:MockPump - type: python - status_types: - status: String - pump_state: String - flow_rate: Float64 - target_flow_rate: Float64 - pressure: Float64 - total_volume: Float64 - max_flow_rate: Float64 - max_pressure: Float64 - from_vessel: String - to_vessel: String - transfer_volume: Float64 - amount: String - transfer_time: Float64 - is_viscous: Bool - rinsing_solvent: String - rinsing_volume: Float64 - rinsing_repeats: Int32 - is_solid: Bool - time_spent: Float64 - time_remaining: Float64 - current_device: String - action_value_mappings: - pump_transfer: - type: PumpTransfer - goal: - from_vessel: from_vessel - to_vessel: to_vessel - volume: volume - amount: amount - time: time - viscous: viscous - rinsing_solvent: rinsing_solvent - rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats - solid: solid - feedback: - status: status - current_device: current_device - time_spent: time_spent - time_remaining: time_remaining - result: - success: success - pause_pump: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - resume_pump: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - reset_volume_counter: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the pump - pump_state: - type: string - description: Pump operation state (Running/Stopped/Paused) - flow_rate: - type: number - description: Current flow rate in mL/min - target_flow_rate: - type: number - description: Target flow rate in mL/min - pressure: - type: number - description: Current pressure in bar - total_volume: - type: number - description: Total accumulated volume in mL - max_flow_rate: - type: number - description: Maximum flow rate in mL/min - max_pressure: - type: number - description: Maximum pressure in bar - from_vessel: - type: string - description: Source vessel for transfer - to_vessel: - type: string - description: Target vessel for transfer - transfer_volume: - type: number - description: Volume to transfer in mL - amount: - type: string - description: Amount description - transfer_time: - type: number - description: Transfer time in seconds - is_viscous: - type: boolean - description: Whether the liquid is viscous - rinsing_solvent: - type: string - description: Solvent used for rinsing - rinsing_volume: - type: number - description: Volume used for rinsing - rinsing_repeats: - type: integer - description: Number of rinsing cycles - is_solid: - type: boolean - description: Whether transferring solid material - current_device: - type: string - description: Current device identifier - required: - - status - - pump_state - - flow_rate - - from_vessel - - to_vessel - additionalProperties: false -mock_rotavap: - description: Mock Rotavap Device - class: - module: unilabos.devices.mock.mock_rotavap:MockRotavap - type: python - status_types: - status: String - rotate_state: String - rotate_time: Float64 - rotate_speed: Float64 - pump_state: String - pump_time: Float64 - vacuum_level: Float64 - temperature: Float64 - target_temperature: Float64 - success: String - action_value_mappings: - set_timer: - type: StrSingleInput - goal: - string: command - feedback: {} - result: - success: success - set_rotate_time: - type: FloatSingleInput - goal: - float_in: time_seconds - feedback: {} - result: - success: success - set_pump_time: - type: FloatSingleInput - goal: - float_in: time_seconds - feedback: {} - result: - success: success - set_rotate_speed: - type: FloatSingleInput - goal: - float_in: speed - feedback: {} - result: - success: success - set_temperature: - type: FloatSingleInput - goal: - float_in: temperature - feedback: {} - result: - success: success - start_rotation: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - start_pump: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the rotavap - rotate_state: - type: string - description: Rotation state (Running/Stopped) - rotate_time: - type: number - description: Remaining rotation time in seconds - rotate_speed: - type: number - description: Rotation speed in rpm - pump_state: - type: string - description: Pump state (Running/Stopped) - pump_time: - type: number - description: Remaining pump time in seconds - vacuum_level: - type: number - description: Current vacuum level in mbar - temperature: - type: number - description: Current water bath temperature - target_temperature: - type: number - description: Target water bath temperature - success: - type: string - description: Operation success status - required: - - status - - rotate_time - - pump_time - - temperature - additionalProperties: false -mock_separator: - description: Simplified Mock Separator Device - class: - module: unilabos.devices.mock.mock_separator:MockSeparator - type: python - status_types: - status: String - settling_time: Float64 - valve_state: String - shake_time: Float64 - shake_status: String - current_device: String - purpose: String - product_phase: String - from_vessel: String - separation_vessel: String - to_vessel: String - waste_phase_to_vessel: String - solvent: String - solvent_volume: Float64 - through: String - repeats: Int32 - stir_time: Float64 - stir_speed: Float64 - time_spent: Float64 - time_remaining: Float64 - action_value_mappings: - separate: - type: Separate goal: purpose: purpose - product_phase: product_phase + temp: temp + vessel: vessel + goal_default: + purpose: '' + temp: 0.0 + vessel: '' + handles: [] + result: + success: success + schema: + description: ROS Action HeatChillStart 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChillStart_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + temp: + type: number + vessel: + type: string + required: + - vessel + - temp + - purpose + title: HeatChillStart_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStart_Result + type: object + required: + - goal + title: HeatChillStart + type: object + type: HeatChillStart + heat_chill_stop: + feedback: + status: status + goal: + vessel: vessel + goal_default: + vessel: '' + handles: [] + result: + success: success + schema: + description: ROS Action HeatChillStop 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChillStop_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + vessel: + type: string + required: + - vessel + title: HeatChillStop_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStop_Result + type: object + required: + - goal + title: HeatChillStop + type: object + type: HeatChillStop + module: unilabos.devices.mock.mock_heater:MockHeater + status_types: + current_temperature: float + heating_power: float + is_heating: bool + max_temperature: float + purpose: str + status: str + status_info: dict + stir: bool + stir_speed: float + target_temperature: float + vessel: str + type: python + description: Mock Heater Device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +mock_pump: + class: + action_value_mappings: + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop 命令参数 + type: object + type: UniLabJsonCommand + auto-pause_pump: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand pause_pump 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand pause_pump 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: pause_pump 命令参数 + type: object + type: UniLabJsonCommand + auto-pump_transfer: + feedback: {} + goal: {} + goal_default: + amount: '' + from_vessel: null + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: null + viscous: false + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand pump_transfer 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand pump_transfer 的参数schema + properties: + amount: + default: '' + description: '参数: amount' + type: string + from_vessel: + description: '参数: from_vessel' + type: string + rinsing_repeats: + default: 0 + description: '参数: rinsing_repeats' + type: integer + rinsing_solvent: + default: '' + description: '参数: rinsing_solvent' + type: string + rinsing_volume: + default: 0.0 + description: '参数: rinsing_volume' + type: number + solid: + default: false + description: '参数: solid' + type: boolean + time: + default: 0.0 + description: '参数: time' + type: number + to_vessel: + description: '参数: to_vessel' + type: string + viscous: + default: false + description: '参数: viscous' + type: boolean + volume: + description: '参数: volume' + type: number + required: + - from_vessel + - to_vessel + - volume + type: object + result: {} + required: + - goal + title: pump_transfer 命令参数 + type: object + type: UniLabJsonCommand + auto-reset_volume_counter: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand reset_volume_counter 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand reset_volume_counter 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: reset_volume_counter 命令参数 + type: object + type: UniLabJsonCommand + auto-resume_pump: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand resume_pump 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand resume_pump 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: resume_pump 命令参数 + type: object + type: UniLabJsonCommand + pause_pump: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + pump_transfer: + feedback: + current_device: current_device + status: status + time_remaining: time_remaining + time_spent: time_spent + goal: + amount: amount from_vessel: from_vessel - separation_vessel: separation_vessel + rinsing_repeats: rinsing_repeats + rinsing_solvent: rinsing_solvent + rinsing_volume: rinsing_volume + solid: solid + time: time to_vessel: to_vessel - waste_phase_to_vessel: waste_phase_to_vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + from_vessel: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: '' + viscous: false + volume: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action PumpTransfer 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: PumpTransfer_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + amount: + type: string + from_vessel: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + time: + type: number + to_vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + title: PumpTransfer_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: PumpTransfer_Result + type: object + required: + - goal + title: PumpTransfer + type: object + type: PumpTransfer + reset_volume_counter: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + resume_pump: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_pump:MockPump + status_types: + amount: str + current_device: str + flow_rate: float + from_vessel: str + is_solid: bool + is_viscous: bool + max_flow_rate: float + max_pressure: float + pressure: float + pump_state: str + rinsing_repeats: int + rinsing_solvent: str + rinsing_volume: float + status: str + status_info: dict + target_flow_rate: float + time_remaining: float + time_spent: float + to_vessel: str + total_volume: float + transfer_time: float + transfer_volume: float + type: python + description: Mock Pump Device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +mock_rotavap: + class: + action_value_mappings: + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop 命令参数 + type: object + type: UniLabJsonCommand + auto-set_pump_time: + feedback: {} + goal: {} + goal_default: + time_seconds: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_pump_time 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_pump_time 的参数schema + properties: + time_seconds: + description: '参数: time_seconds' + type: number + required: + - time_seconds + type: object + result: {} + required: + - goal + title: set_pump_time 命令参数 + type: object + type: UniLabJsonCommand + auto-set_rotate_speed: + feedback: {} + goal: {} + goal_default: + speed: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_rotate_speed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_rotate_speed 的参数schema + properties: + speed: + description: '参数: speed' + type: number + required: + - speed + type: object + result: {} + required: + - goal + title: set_rotate_speed 命令参数 + type: object + type: UniLabJsonCommand + auto-set_rotate_time: + feedback: {} + goal: {} + goal_default: + time_seconds: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_rotate_time 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_rotate_time 的参数schema + properties: + time_seconds: + description: '参数: time_seconds' + type: number + required: + - time_seconds + type: object + result: {} + required: + - goal + title: set_rotate_time 命令参数 + type: object + type: UniLabJsonCommand + auto-set_temperature: + feedback: {} + goal: {} + goal_default: + temperature: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_temperature 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_temperature 的参数schema + properties: + temperature: + description: '参数: temperature' + type: number + required: + - temperature + type: object + result: {} + required: + - goal + title: set_temperature 命令参数 + type: object + type: UniLabJsonCommand + auto-set_timer: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_timer 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_timer 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_timer 命令参数 + type: object + type: UniLabJsonCommand + auto-start_pump: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand start_pump 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand start_pump 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: start_pump 命令参数 + type: object + type: UniLabJsonCommand + auto-start_rotation: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand start_rotation 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand start_rotation 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: start_rotation 命令参数 + type: object + type: UniLabJsonCommand + auto-stop_all_operations: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_all_operations 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_all_operations 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_all_operations 命令参数 + type: object + type: UniLabJsonCommand + set_pump_time: + feedback: {} + goal: + float_in: time_seconds + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + set_rotate_speed: + feedback: {} + goal: + float_in: speed + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + set_rotate_time: + feedback: {} + goal: + float_in: time_seconds + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + set_temperature: + feedback: {} + goal: + float_in: temperature + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + set_timer: + feedback: {} + goal: + string: command + goal_default: + string: '' + handles: [] + result: + success: success + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + start_pump: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + start_rotation: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_rotavap:MockRotavap + status_types: + pump_state: str + pump_time: float + rotate_speed: float + rotate_state: str + rotate_time: float + status: str + status_info: dict + target_temperature: float + temperature: float + vacuum_level: float + type: python + description: Mock Rotavap Device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +mock_separator: + class: + action_value_mappings: + auto-separate: + feedback: {} + goal: {} + goal_default: + from_vessel: null + product_phase: null + purpose: null + repeats: 1 + separation_vessel: null + settling_time: 60.0 + solvent: '' + solvent_volume: 0.0 + stir_speed: 0.0 + stir_time: 0.0 + through: '' + to_vessel: null + waste_phase_to_vessel: '' + handles: [] + result: {} + schema: + description: UniLabJsonCommand separate 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand separate 的参数schema + properties: + from_vessel: + description: '参数: from_vessel' + type: string + product_phase: + description: '参数: product_phase' + type: string + purpose: + description: '参数: purpose' + type: string + repeats: + default: 1 + description: '参数: repeats' + type: integer + separation_vessel: + description: '参数: separation_vessel' + type: string + settling_time: + default: 60.0 + description: '参数: settling_time' + type: number + solvent: + default: '' + description: '参数: solvent' + type: string + solvent_volume: + default: 0.0 + description: '参数: solvent_volume' + type: number + stir_speed: + default: 0.0 + description: '参数: stir_speed' + type: number + stir_time: + default: 0.0 + description: '参数: stir_time' + type: number + through: + default: '' + description: '参数: through' + type: string + to_vessel: + description: '参数: to_vessel' + type: string + waste_phase_to_vessel: + default: '' + description: '参数: waste_phase_to_vessel' + type: string + required: + - purpose + - product_phase + - from_vessel + - separation_vessel + - to_vessel + type: object + result: {} + required: + - goal + title: separate 命令参数 + type: object + type: UniLabJsonCommand + auto-set_valve: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_valve 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_valve 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_valve 命令参数 + type: object + type: UniLabJsonCommand + auto-shake: + feedback: {} + goal: {} + goal_default: + shake_time: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand shake 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand shake 的参数schema + properties: + shake_time: + description: '参数: shake_time' + type: number + required: + - shake_time + type: object + result: {} + required: + - goal + title: shake 命令参数 + type: object + type: UniLabJsonCommand + auto-stop_operations: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_operations 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_operations 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_operations 命令参数 + type: object + type: UniLabJsonCommand + separate: + feedback: + current_device: current_device + status: status + time_remaining: time_remaining + time_spent: time_spent + goal: + from_vessel: from_vessel + product_phase: product_phase + purpose: purpose + repeats: repeats + separation_vessel: separation_vessel + settling_time: settling_time solvent: solvent solvent_volume: solvent_volume - through: through - repeats: repeats - stir_time: stir_time stir_speed: stir_speed - settling_time: settling_time - feedback: - status: status - current_device: current_device - time_spent: time_spent - time_remaining: time_remaining - result: - success: success - shake: - type: FloatSingleInput - goal: - float_in: shake_time - feedback: - status: status - result: - success: success - stop_operations: - type: EmptyIn - goal: {} - feedback: {} + stir_time: stir_time + through: through + to_vessel: to_vessel + waste_phase_to_vessel: waste_phase_to_vessel + goal_default: + from_vessel: '' + product_phase: '' + purpose: '' + repeats: 0 + separation_vessel: '' + settling_time: 0.0 + solvent: '' + solvent_volume: 0.0 + stir_speed: 0.0 + stir_time: 0.0 + through: '' + to_vessel: '' + waste_phase_to_vessel: '' + handles: [] result: success: success + schema: + description: ROS Action Separate 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Separate_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + from_vessel: + type: string + product_phase: + type: string + purpose: + type: string + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + separation_vessel: + type: string + settling_time: + type: number + solvent: + type: string + solvent_volume: + type: number + stir_speed: + type: number + stir_time: + type: number + through: + type: string + to_vessel: + type: string + waste_phase_to_vessel: + type: string + required: + - purpose + - product_phase + - from_vessel + - separation_vessel + - to_vessel + - waste_phase_to_vessel + - solvent + - solvent_volume + - through + - repeats + - stir_time + - stir_speed + - settling_time + title: Separate_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Separate_Result + type: object + required: + - goal + title: Separate + type: object + type: Separate set_valve: - type: StrSingleInput + feedback: {} goal: string: command - feedback: {} + goal_default: + string: '' + handles: [] result: success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the separator - settling_time: - type: number - description: Settling time in seconds - valve_state: - type: string - description: Valve state (Open/Closed) - shake_time: - type: number - description: Remaining shake time in seconds - shake_status: - type: string - description: Current shake state - purpose: - type: string - description: Separation purpose (wash/extract) - product_phase: - type: string - description: Product phase (top/bottom) - from_vessel: - type: string - description: Source vessel - separation_vessel: - type: string - description: Vessel for separation - to_vessel: - type: string - description: Target vessel - required: - - status - - valve_state - - shake_status - - current_device - additionalProperties: false -mock_solenoid_valve: - description: Mock Solenoid Valve Device - class: - module: unilabos.devices.mock.mock_solenoid_valve:MockSolenoidValve - type: python - status_types: - status: String - valve_status: String - action_value_mappings: - set_valve_status: + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object type: StrSingleInput - goal: - string: status - feedback: {} - result: - success: success - open_valve: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - close_valve: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the valve - valve_status: - type: string - description: Valve status (Open/Closed) - required: - - status - - valve_status - additionalProperties: false -mock_stirrer: - description: Mock Stirrer Device - class: - module: unilabos.devices.mock.mock_stirrer:MockStirrer - type: python - status_types: - status: String - stir_speed: Float64 - target_stir_speed: Float64 - stir_state: String - temperature: Float64 - target_temperature: Float64 - heating_state: String - heating_power: Float64 - max_stir_speed: Float64 - max_temperature: Float64 - action_value_mappings: - set_stir_speed: - type: FloatSingleInput - goal: - float_in: speed - feedback: {} - result: - success: success - set_temperature: - type: FloatSingleInput - goal: - float_in: temperature - feedback: {} - result: - success: success - start_stirring: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - stop_stirring: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - heating_control: - type: StrSingleInput - goal: - string: heating_state - feedback: {} - result: - success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the stirrer - stir_speed: - type: number - description: Current stirring speed in rpm - target_stir_speed: - type: number - description: Target stirring speed in rpm - stir_state: - type: string - description: Stirring state (Running/Stopped) - temperature: - type: number - description: Current temperature in °C - target_temperature: - type: number - description: Target temperature in °C - heating_state: - type: string - description: Heating state (On/Off) - heating_power: - type: number - description: Current heating power percentage - max_stir_speed: - type: number - description: Maximum stirring speed in rpm - max_temperature: - type: number - description: Maximum temperature in °C - required: - - status - - stir_speed - - temperature - - power_state - additionalProperties: false -mock_stirrer_new: - description: Mock Stirrer Device (Copy Version) - class: - module: unilabos.devices.mock.mock_stirrer_new:MockStirrer_new - type: python - status_types: - status: String - vessel: String - purpose: String - stir_speed: Float64 - target_stir_speed: Float64 - stir_state: String - stir_time: Float64 - settling_time: Float64 - progress: Float64 - max_stir_speed: Float64 - action_value_mappings: - start_stir: - type: StartStir - goal: - vessel: vessel - stir_speed: stir_speed - purpose: purpose - feedback: - progress: progress - current_speed: stir_speed - current_status: status - result: - success: success - message: message - stir: - type: Stir - goal: - stir_time: stir_time - stir_speed: stir_speed - settling_time: settling_time + shake: feedback: status: status + goal: + float_in: shake_time + goal_default: + float_in: 0.0 + handles: [] result: success: success + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + stop_operations: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_separator:MockSeparator + status_types: + current_device: str + from_vessel: str + product_phase: str + purpose: str + repeats: int + separation_vessel: str + settling_time: float + shake_status: str + shake_time: float + solvent: str + solvent_volume: float + status: str + status_info: dict + stir_speed: float + stir_time: float + through: str + time_remaining: float + time_spent: float + to_vessel: str + valve_state: str + waste_phase_to_vessel: str + type: python + description: Simplified Mock Separator Device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +mock_solenoid_valve: + class: + action_value_mappings: + auto-close_valve: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close_valve 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close_valve 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close_valve 命令参数 + type: object + type: UniLabJsonCommand + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_closed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_closed 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed 命令参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open 命令参数 + type: object + type: UniLabJsonCommand + auto-open_valve: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand open_valve 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand open_valve 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open_valve 命令参数 + type: object + type: UniLabJsonCommand + auto-set_valve_status: + feedback: {} + goal: {} + goal_default: + status: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_valve_status 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_valve_status 的参数schema + properties: + status: + description: '参数: status' + type: string + required: + - status + type: object + result: {} + required: + - goal + title: set_valve_status 命令参数 + type: object + type: UniLabJsonCommand + close_valve: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open_valve: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + set_valve_status: + feedback: {} + goal: + string: status + goal_default: + string: '' + handles: [] + result: + success: success + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.mock.mock_solenoid_valve:MockSolenoidValve + status_types: + status: str + valve_status: str + type: python + description: Mock Solenoid Valve Device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +mock_stirrer: + class: + action_value_mappings: + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop 命令参数 + type: object + type: UniLabJsonCommand + auto-heating_control: + feedback: {} + goal: {} + goal_default: + heating_state: 'On' + handles: [] + result: {} + schema: + description: UniLabJsonCommand heating_control 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heating_control 的参数schema + properties: + heating_state: + default: 'On' + description: '参数: heating_state' + type: string + required: [] + type: object + result: {} + required: + - goal + title: heating_control 命令参数 + type: object + type: UniLabJsonCommand + auto-set_stir_speed: + feedback: {} + goal: {} + goal_default: + speed: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_stir_speed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_stir_speed 的参数schema + properties: + speed: + description: '参数: speed' + type: number + required: + - speed + type: object + result: {} + required: + - goal + title: set_stir_speed 命令参数 + type: object + type: UniLabJsonCommand + auto-set_temperature: + feedback: {} + goal: {} + goal_default: + temperature: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_temperature 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_temperature 的参数schema + properties: + temperature: + description: '参数: temperature' + type: number + required: + - temperature + type: object + result: {} + required: + - goal + title: set_temperature 命令参数 + type: object + type: UniLabJsonCommand + auto-start_stirring: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand start_stirring 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand start_stirring 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: start_stirring 命令参数 + type: object + type: UniLabJsonCommand + auto-stop_all_operations: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_all_operations 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_all_operations 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_all_operations 命令参数 + type: object + type: UniLabJsonCommand + auto-stop_stirring: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_stirring 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_stirring 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_stirring 命令参数 + type: object + type: UniLabJsonCommand + heating_control: + feedback: {} + goal: + string: heating_state + goal_default: + string: '' + handles: [] + result: + success: success + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + set_stir_speed: + feedback: {} + goal: + float_in: speed + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + set_temperature: + feedback: {} + goal: + float_in: temperature + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + start_stirring: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + stop_stirring: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_stirrer:MockStirrer + status_types: + heating_power: float + heating_state: str + max_stir_speed: float + max_temperature: float + status: str + status_info: dict + stir_speed: float + stir_state: str + target_stir_speed: float + target_temperature: float + temperature: float + type: python + description: Mock Stirrer Device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +mock_stirrer_new: + class: + action_value_mappings: + auto-start_stir: + feedback: {} + goal: {} + goal_default: + purpose: '' + stir_speed: 0.0 + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand start_stir 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand start_stir 的参数schema + properties: + purpose: + default: '' + description: '参数: purpose' + type: string + stir_speed: + default: 0.0 + description: '参数: stir_speed' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + type: object + result: {} + required: + - goal + title: start_stir 命令参数 + type: object + type: UniLabJsonCommand + auto-stir: + feedback: {} + goal: {} + goal_default: + settling_time: null + stir_speed: null + stir_time: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand stir 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stir 的参数schema + properties: + settling_time: + description: '参数: settling_time' + type: number + stir_speed: + description: '参数: stir_speed' + type: number + stir_time: + description: '参数: stir_time' + type: number + required: + - stir_time + - stir_speed + - settling_time + type: object + result: {} + required: + - goal + title: stir 命令参数 + type: object + type: UniLabJsonCommand + auto-stop_stir: + feedback: {} + goal: {} + goal_default: + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_stir 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_stir 的参数schema + properties: + vessel: + description: '参数: vessel' + type: string + required: + - vessel + type: object + result: {} + required: + - goal + title: stop_stir 命令参数 + type: object + type: UniLabJsonCommand + start_stir: + feedback: + current_speed: stir_speed + current_status: status + progress: progress + goal: + purpose: purpose + stir_speed: stir_speed + vessel: vessel + goal_default: + purpose: '' + stir_speed: 0.0 + vessel: '' + handles: [] + result: + message: message + success: success + schema: + description: ROS Action StartStir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_speed: + type: number + current_status: + type: string + progress: + type: number + required: + - progress + - current_speed + - current_status + title: StartStir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + stir_speed: + type: number + vessel: + type: string + required: + - vessel + - stir_speed + - purpose + title: StartStir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StartStir_Result + type: object + required: + - goal + title: StartStir + type: object + type: StartStir + stir: + feedback: + status: status + goal: + settling_time: settling_time + stir_speed: stir_speed + stir_time: stir_time + goal_default: + settling_time: 0.0 + stir_speed: 0.0 + stir_time: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action Stir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: Stir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + settling_time: + type: number + stir_speed: + type: number + stir_time: + type: number + required: + - stir_time + - stir_speed + - settling_time + title: Stir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Stir_Result + type: object + required: + - goal + title: Stir + type: object + type: Stir stop_stir: - type: StopStir + feedback: + current_status: status + progress: progress goal: vessel: vessel - feedback: - progress: progress - current_status: status + goal_default: + vessel: '' + handles: [] + result: + message: message + success: success + schema: + description: ROS Action StopStir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + progress: + type: number + required: + - progress + - current_status + title: StopStir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + vessel: + type: string + required: + - vessel + title: StopStir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StopStir_Result + type: object + required: + - goal + title: StopStir + type: object + type: StopStir + module: unilabos.devices.mock.mock_stirrer_new:MockStirrer_new + status_types: + max_stir_speed: float + progress: float + purpose: str + settling_time: float + status: str + status_info: dict + stir_speed: float + stir_state: str + stir_time: float + target_stir_speed: float + vessel: str + type: python + description: Mock Stirrer Device (Copy Version) + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +mock_vacuum: + class: + action_value_mappings: + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand emergency_stop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop 命令参数 + type: object + type: UniLabJsonCommand + auto-pause_vacuum: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand pause_vacuum 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand pause_vacuum 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: pause_vacuum 命令参数 + type: object + type: UniLabJsonCommand + auto-power_control: + feedback: {} + goal: {} + goal_default: + power_state: 'On' + handles: [] + result: {} + schema: + description: UniLabJsonCommand power_control 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand power_control 的参数schema + properties: + power_state: + default: 'On' + description: '参数: power_state' + type: string + required: [] + type: object + result: {} + required: + - goal + title: power_control 命令参数 + type: object + type: UniLabJsonCommand + auto-resume_vacuum: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand resume_vacuum 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand resume_vacuum 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: resume_vacuum 命令参数 + type: object + type: UniLabJsonCommand + auto-set_vacuum_level: + feedback: {} + goal: {} + goal_default: + vacuum_level: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_vacuum_level 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_vacuum_level 的参数schema + properties: + vacuum_level: + description: '参数: vacuum_level' + type: number + required: + - vacuum_level + type: object + result: {} + required: + - goal + title: set_vacuum_level 命令参数 + type: object + type: UniLabJsonCommand + auto-start_vacuum: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand start_vacuum 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand start_vacuum 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: start_vacuum 命令参数 + type: object + type: UniLabJsonCommand + auto-stop_vacuum: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_vacuum 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_vacuum 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_vacuum 命令参数 + type: object + type: UniLabJsonCommand + auto-vent_to_atmosphere: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand vent_to_atmosphere 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand vent_to_atmosphere 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: vent_to_atmosphere 命令参数 + type: object + type: UniLabJsonCommand + pause_vacuum: + feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - message: message - schema: - type: object - properties: - status: - type: string - vessel: - type: string - purpose: - type: string - stir_speed: - type: number - target_stir_speed: - type: number - stir_state: - type: string - stir_time: - type: number - settling_time: - type: number - progress: - type: number - max_stir_speed: - type: number - required: - - status - - stir_speed - - stir_state - - vessel - additionalProperties: false -mock_vacuum: - description: Mock Vacuum Pump Device - class: - module: unilabos.devices.mock.mock_vacuum:MockVacuum - type: python - status_types: - status: String - power_state: String - pump_state: String - vacuum_level: Float64 - target_vacuum: Float64 - pump_speed: Float64 - pump_efficiency: Float64 - max_pump_speed: Float64 - action_value_mappings: + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn power_control: - type: StrSingleInput + feedback: {} goal: string: power_state - feedback: {} + goal_default: + string: '' + handles: [] result: success: success + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + resume_vacuum: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn set_vacuum_level: - type: FloatSingleInput + feedback: {} goal: float_in: vacuum_level - feedback: {} + goal_default: + float_in: 0.0 + handles: [] result: success: success + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput start_vacuum: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn stop_vacuum: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - pause_vacuum: + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object type: EmptyIn - goal: {} - feedback: {} - result: - success: success - resume_vacuum: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success vent_to_atmosphere: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - schema: - type: object + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_vacuum:MockVacuum + status_types: + max_pump_speed: float + power_state: str + pump_efficiency: float + pump_speed: float + pump_state: str + status: str + status_info: dict + target_vacuum: float + vacuum_level: float + type: python + description: Mock Vacuum Pump Device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema properties: - status: - type: string - description: Current status of the vacuum pump - power_state: - type: string - description: Power state (On/Off) - pump_state: - type: string - description: Pump operation state (Running/Stopped/Paused) - vacuum_level: - type: number - description: Current vacuum level in mbar - target_vacuum: - type: number - description: Target vacuum level in mbar - pump_speed: - type: number - description: Current pump speed in L/s - pump_efficiency: - type: number - description: Pump efficiency percentage - max_pump_speed: - type: number - description: Maximum pump speed in L/s + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: MOCK + description: '参数: port' + type: string + required: [] + type: object + result: {} required: - - status - - power_state - - pump_state - - vacuum_level - additionalProperties: false + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/moveit_config.yaml b/unilabos/registry/devices/moveit_config.yaml index 6236855d..8865d50d 100644 --- a/unilabos/registry/devices/moveit_config.yaml +++ b/unilabos/registry/devices/moveit_config.yaml @@ -1,56 +1,932 @@ -moveit.toyo_xyz: - description: Toyo XYZ - class: - module: unilabos.devices.ros_dev.moveit_interface:MoveitInterface - type: python - action_value_mappings: - set_position: - type: SendCmd - goal: - command: command - feedback: { } - result: { } - pick_and_place: - type: SendCmd - goal: - command: command - feedback: { } - result: { } - set_status: - type: SendCmd - goal: - command: command - feedback: { } - result: { } - - model: - type: device - mesh: toyo_xyz - moveit.arm_slider: - description: Arm with Slider - model: - type: device - mesh: arm_slider class: - module: unilabos.devices.ros_dev.moveit_interface:MoveitInterface - type: python action_value_mappings: - set_position: - type: SendCmd - goal: - command: command + auto-check_tf_update_actions: feedback: {} + goal: {} + goal_default: {} + handles: [] result: {} + schema: + description: UniLabJsonCommand check_tf_update_actions 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand check_tf_update_actions 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: check_tf_update_actions 命令参数 + type: object + type: UniLabJsonCommand + auto-moveit_joint_task: + feedback: {} + goal: {} + goal_default: + joint_names: null + joint_positions: null + move_group: null + retry: 10 + speed: 1 + handles: [] + result: {} + schema: + description: UniLabJsonCommand moveit_joint_task 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand moveit_joint_task 的参数schema + properties: + joint_names: + description: '参数: joint_names' + type: string + joint_positions: + description: '参数: joint_positions' + type: string + move_group: + description: '参数: move_group' + type: string + retry: + default: 10 + description: '参数: retry' + type: string + speed: + default: 1 + description: '参数: speed' + type: string + required: + - move_group + - joint_positions + type: object + result: {} + required: + - goal + title: moveit_joint_task 命令参数 + type: object + type: UniLabJsonCommand + auto-moveit_task: + feedback: {} + goal: {} + goal_default: + cartesian: false + move_group: null + offsets: + - 0 + - 0 + - 0 + position: null + quaternion: null + retry: 10 + speed: 1 + target_link: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand moveit_task 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand moveit_task 的参数schema + properties: + cartesian: + default: false + description: '参数: cartesian' + type: string + move_group: + description: '参数: move_group' + type: string + offsets: + default: + - 0 + - 0 + - 0 + description: '参数: offsets' + type: string + position: + description: '参数: position' + type: string + quaternion: + description: '参数: quaternion' + type: string + retry: + default: 10 + description: '参数: retry' + type: string + speed: + default: 1 + description: '参数: speed' + type: string + target_link: + description: '参数: target_link' + type: string + required: + - move_group + - position + - quaternion + type: object + result: {} + required: + - goal + title: moveit_task 命令参数 + type: object + type: UniLabJsonCommand + auto-pick_and_place: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand pick_and_place 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand pick_and_place 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: pick_and_place 命令参数 + type: object + type: UniLabJsonCommand + auto-post_init: + feedback: {} + goal: {} + goal_default: + ros_node: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand post_init 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand post_init 的参数schema + properties: + ros_node: + description: '参数: ros_node' + type: string + required: + - ros_node + type: object + result: {} + required: + - goal + title: post_init 命令参数 + type: object + type: UniLabJsonCommand + auto-resource_manager: + feedback: {} + goal: {} + goal_default: + parent_link: null + resource: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand resource_manager 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand resource_manager 的参数schema + properties: + parent_link: + description: '参数: parent_link' + type: string + resource: + description: '参数: resource' + type: string + required: + - resource + - parent_link + type: object + result: {} + required: + - goal + title: resource_manager 命令参数 + type: object + type: UniLabJsonCommand + auto-set_position: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_position 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_position 命令参数 + type: object + type: UniLabJsonCommand + auto-set_status: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_status 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_status 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_status 命令参数 + type: object + type: UniLabJsonCommand + auto-wait_for_resource_action: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand wait_for_resource_action 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand wait_for_resource_action 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_resource_action 命令参数 + type: object + type: UniLabJsonCommand pick_and_place: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: {} + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: {} + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd set_status: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: {} + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.ros_dev.moveit_interface:MoveitInterface + status_types: {} + type: python + description: Arm with Slider + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + device_config: + description: '参数: device_config' + type: string + joint_poses: + description: '参数: joint_poses' + type: string + moveit_type: + description: '参数: moveit_type' + type: string + rotation: + description: '参数: rotation' + type: string + required: + - moveit_type + - joint_poses + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object + model: + mesh: arm_slider + type: device +moveit.toyo_xyz: + class: + action_value_mappings: + auto-check_tf_update_actions: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand check_tf_update_actions 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand check_tf_update_actions 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: check_tf_update_actions 命令参数 + type: object + type: UniLabJsonCommand + auto-moveit_joint_task: + feedback: {} + goal: {} + goal_default: + joint_names: null + joint_positions: null + move_group: null + retry: 10 + speed: 1 + handles: [] + result: {} + schema: + description: UniLabJsonCommand moveit_joint_task 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand moveit_joint_task 的参数schema + properties: + joint_names: + description: '参数: joint_names' + type: string + joint_positions: + description: '参数: joint_positions' + type: string + move_group: + description: '参数: move_group' + type: string + retry: + default: 10 + description: '参数: retry' + type: string + speed: + default: 1 + description: '参数: speed' + type: string + required: + - move_group + - joint_positions + type: object + result: {} + required: + - goal + title: moveit_joint_task 命令参数 + type: object + type: UniLabJsonCommand + auto-moveit_task: + feedback: {} + goal: {} + goal_default: + cartesian: false + move_group: null + offsets: + - 0 + - 0 + - 0 + position: null + quaternion: null + retry: 10 + speed: 1 + target_link: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand moveit_task 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand moveit_task 的参数schema + properties: + cartesian: + default: false + description: '参数: cartesian' + type: string + move_group: + description: '参数: move_group' + type: string + offsets: + default: + - 0 + - 0 + - 0 + description: '参数: offsets' + type: string + position: + description: '参数: position' + type: string + quaternion: + description: '参数: quaternion' + type: string + retry: + default: 10 + description: '参数: retry' + type: string + speed: + default: 1 + description: '参数: speed' + type: string + target_link: + description: '参数: target_link' + type: string + required: + - move_group + - position + - quaternion + type: object + result: {} + required: + - goal + title: moveit_task 命令参数 + type: object + type: UniLabJsonCommand + auto-pick_and_place: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand pick_and_place 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand pick_and_place 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: pick_and_place 命令参数 + type: object + type: UniLabJsonCommand + auto-post_init: + feedback: {} + goal: {} + goal_default: + ros_node: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand post_init 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand post_init 的参数schema + properties: + ros_node: + description: '参数: ros_node' + type: string + required: + - ros_node + type: object + result: {} + required: + - goal + title: post_init 命令参数 + type: object + type: UniLabJsonCommand + auto-resource_manager: + feedback: {} + goal: {} + goal_default: + parent_link: null + resource: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand resource_manager 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand resource_manager 的参数schema + properties: + parent_link: + description: '参数: parent_link' + type: string + resource: + description: '参数: resource' + type: string + required: + - resource + - parent_link + type: object + result: {} + required: + - goal + title: resource_manager 命令参数 + type: object + type: UniLabJsonCommand + auto-set_position: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_position 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_position 命令参数 + type: object + type: UniLabJsonCommand + auto-set_status: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_status 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_status 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_status 命令参数 + type: object + type: UniLabJsonCommand + auto-wait_for_resource_action: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand wait_for_resource_action 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand wait_for_resource_action 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_resource_action 命令参数 + type: object + type: UniLabJsonCommand + pick_and_place: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: {} + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: {} + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_status: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: {} + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.ros_dev.moveit_interface:MoveitInterface + status_types: {} + type: python + description: Toyo XYZ + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + device_config: + description: '参数: device_config' + type: string + joint_poses: + description: '参数: joint_poses' + type: string + moveit_type: + description: '参数: moveit_type' + type: string + rotation: + description: '参数: rotation' + type: string + required: + - moveit_type + - joint_poses + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object + model: + mesh: toyo_xyz + type: device diff --git a/unilabos/registry/devices/organic_miscellaneous.yaml b/unilabos/registry/devices/organic_miscellaneous.yaml index 74551e7c..7dcf87b7 100644 --- a/unilabos/registry/devices/organic_miscellaneous.yaml +++ b/unilabos/registry/devices/organic_miscellaneous.yaml @@ -1,73 +1,488 @@ -separator.homemade: - description: Separator device with homemade grbl controller - class: - module: unilabos.devices.separator.homemade_grbl_conductivity:SeparatorController - type: python - status_types: - sensordata: Float64 - status: String - action_value_mappings: - stir: - type: Stir - goal: - stir_time: stir_time, - stir_speed: stir_speed - settling_time: settling_time - feedback: - status: status - result: - success: success - valve_open_cmd: - type: SendCmd - goal: - command: command - feedback: - status: status - result": - success: success - schema: - type: object - properties: - status: - type: string - description: The status of the device - sensordata: - type: number - description: 电导传感器数据 - required: - - status - - sensordata - additionalProperties: false - rotavap.one: - description: Rotavap device class: - module: unilabos.devices.rotavap.rotavap_one:RotavapOne - type: python - status_types: - pump_time: Float64 - rotate_time: Float64 action_value_mappings: + auto-cmd_write: + feedback: {} + goal: {} + goal_default: + cmd: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand cmd_write 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cmd_write 的参数schema + properties: + cmd: + description: '参数: cmd' + type: string + required: + - cmd + type: object + result: {} + required: + - goal + title: cmd_write 命令参数 + type: object + type: UniLabJsonCommand + auto-main_loop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand main_loop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand main_loop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: main_loop 命令参数 + type: object + type: UniLabJsonCommand + auto-set_pump_time: + feedback: {} + goal: {} + goal_default: + time: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_pump_time 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_pump_time 的参数schema + properties: + time: + description: '参数: time' + type: string + required: + - time + type: object + result: {} + required: + - goal + title: set_pump_time 命令参数 + type: object + type: UniLabJsonCommand + auto-set_rotate_time: + feedback: {} + goal: {} + goal_default: + time: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_rotate_time 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_rotate_time 的参数schema + properties: + time: + description: '参数: time' + type: string + required: + - time + type: object + result: {} + required: + - goal + title: set_rotate_time 命令参数 + type: object + type: UniLabJsonCommand + auto-set_timer: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_timer 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_timer 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_timer 命令参数 + type: object + type: UniLabJsonCommand set_timer: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success - schema: - type: object + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.rotavap.rotavap_one:RotavapOne + status_types: {} + type: python + description: Rotavap device + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema properties: - temperature: - type: number - description: 旋蒸水浴温度 - pump_time: - type: number - description: The pump time of the device - rotate_time: - type: number - description: The rotate time of the device + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + description: '参数: port' + type: string + rate: + default: 9600 + description: '参数: rate' + type: integer + required: + - port + type: object + result: {} required: - - pump_time - - rotate_time - additionalProperties: false \ No newline at end of file + - goal + title: __init__ 命令参数 + type: object +separator.homemade: + class: + action_value_mappings: + auto-read_sensor_loop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand read_sensor_loop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand read_sensor_loop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: read_sensor_loop 命令参数 + type: object + type: UniLabJsonCommand + auto-stir: + feedback: {} + goal: {} + goal_default: + settling_time: 10 + stir_speed: 300 + stir_time: 10 + handles: [] + result: {} + schema: + description: UniLabJsonCommand stir 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stir 的参数schema + properties: + settling_time: + default: 10 + description: '参数: settling_time' + type: number + stir_speed: + default: 300 + description: '参数: stir_speed' + type: number + stir_time: + default: 10 + description: '参数: stir_time' + type: number + required: [] + type: object + result: {} + required: + - goal + title: stir 命令参数 + type: object + type: UniLabJsonCommand + auto-valve_open: + feedback: {} + goal: {} + goal_default: + condition: null + value: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand valve_open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand valve_open 的参数schema + properties: + condition: + description: '参数: condition' + type: string + value: + description: '参数: value' + type: string + required: + - condition + - value + type: object + result: {} + required: + - goal + title: valve_open 命令参数 + type: object + type: UniLabJsonCommand + auto-valve_open_cmd: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand valve_open_cmd 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand valve_open_cmd 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: valve_open_cmd 命令参数 + type: object + type: UniLabJsonCommand + auto-write: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand write 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand write 的参数schema + properties: + data: + description: '参数: data' + type: string + required: + - data + type: object + result: {} + required: + - goal + title: write 命令参数 + type: object + type: UniLabJsonCommand + stir: + feedback: + status: status + goal: + settling_time: settling_time + stir_speed: stir_speed + stir_time: stir_time, + goal_default: + settling_time: 0.0 + stir_speed: 0.0 + stir_time: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action Stir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: Stir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + settling_time: + type: number + stir_speed: + type: number + stir_time: + type: number + required: + - stir_time + - stir_speed + - settling_time + title: Stir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Stir_Result + type: object + required: + - goal + title: Stir + type: object + type: Stir + valve_open_cmd: + feedback: + status: status + goal: + command: command + goal_default: + command: '' + handles: [] + result": + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.separator.homemade_grbl_conductivity:SeparatorController + status_types: {} + type: python + description: Separator device with homemade grbl controller + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + baudrate_executor: + default: 115200 + description: '参数: baudrate_executor' + type: integer + baudrate_sensor: + default: 115200 + description: '参数: baudrate_sensor' + type: integer + port_executor: + description: '参数: port_executor' + type: string + port_sensor: + description: '参数: port_sensor' + type: string + required: + - port_executor + - port_sensor + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/pump_and_valve.yaml b/unilabos/registry/devices/pump_and_valve.yaml index 651a25f8..3abe9e2e 100644 --- a/unilabos/registry/devices/pump_and_valve.yaml +++ b/unilabos/registry/devices/pump_and_valve.yaml @@ -1,85 +1,900 @@ -syringe_pump_with_valve.runze: - description: Runze Syringe pump with valve +solenoid_valve: class: - module: unilabos.devices.pump_and_valve.runze_backbone:RunzeSyringePump + action_value_mappings: + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_closed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_closed 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed 命令参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open 命令参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open 命令参数 + type: object + type: UniLabJsonCommand + auto-read_data: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand read_data 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand read_data 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: read_data 命令参数 + type: object + type: UniLabJsonCommand + auto-send_command: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand send_command 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand send_command 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: send_command 命令参数 + type: object + type: UniLabJsonCommand + auto-set_valve_position: + feedback: {} + goal: {} + goal_default: + position: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + position: + description: '参数: position' + type: string + required: + - position + type: object + result: {} + required: + - goal + title: set_valve_position 命令参数 + type: object + type: UniLabJsonCommand + set_valve_position: + feedback: {} + goal: + string: position + goal_default: + string: '' + handles: [] + result: {} + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.pump_and_valve.solenoid_valve:SolenoidValve + status_types: + status: str + valve_position: str type: python + description: Solenoid valve + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + io_device_port: + description: '参数: io_device_port' + type: string + required: + - io_device_port + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +solenoid_valve.mock: + class: + action_value_mappings: + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_closed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_closed 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed 命令参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open 命令参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open 命令参数 + type: object + type: UniLabJsonCommand + auto-set_valve_position: + feedback: {} + goal: {} + goal_default: + position: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + position: + description: '参数: position' + type: string + required: + - position + type: object + result: {} + required: + - goal + title: set_valve_position 命令参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.pump_and_valve.solenoid_valve_mock:SolenoidValveMock + status_types: + status: str + valve_position: str + type: python + description: Mock solenoid valve + handles: + - data_type: fluid + handler_key: in + io_type: target + label: in + side: NORTH + - data_type: fluid + handler_key: out + io_type: source + label: out + side: SOUTH + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: COM6 + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +syringe_pump_with_valve.runze: + class: + action_value_mappings: + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommand + auto-pull_plunger: + feedback: {} + goal: {} + goal_default: + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand pull_plunger 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand pull_plunger 的参数schema + properties: + volume: + description: '参数: volume' + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: pull_plunger 命令参数 + type: object + type: UniLabJsonCommand + auto-push_plunger: + feedback: {} + goal: {} + goal_default: + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand push_plunger 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand push_plunger 的参数schema + properties: + volume: + description: '参数: volume' + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: push_plunger 命令参数 + type: object + type: UniLabJsonCommand + auto-query_aux_input_status_1: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand query_aux_input_status_1 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand query_aux_input_status_1 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_aux_input_status_1 命令参数 + type: object + type: UniLabJsonCommand + auto-query_aux_input_status_2: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand query_aux_input_status_2 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand query_aux_input_status_2 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_aux_input_status_2 命令参数 + type: object + type: UniLabJsonCommand + auto-query_backlash_position: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand query_backlash_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand query_backlash_position 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_backlash_position 命令参数 + type: object + type: UniLabJsonCommand + auto-query_command_buffer_status: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand query_command_buffer_status 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand query_command_buffer_status 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_command_buffer_status 命令参数 + type: object + type: UniLabJsonCommand + auto-query_software_version: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand query_software_version 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand query_software_version 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_software_version 命令参数 + type: object + type: UniLabJsonCommand + auto-send_command: + feedback: {} + goal: {} + goal_default: + full_command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand send_command 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand send_command 的参数schema + properties: + full_command: + description: '参数: full_command' + type: string + required: + - full_command + type: object + result: {} + required: + - goal + title: send_command 命令参数 + type: object + type: UniLabJsonCommand + auto-set_baudrate: + feedback: {} + goal: {} + goal_default: + baudrate: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_baudrate 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_baudrate 的参数schema + properties: + baudrate: + description: '参数: baudrate' + type: string + required: + - baudrate + type: object + result: {} + required: + - goal + title: set_baudrate 命令参数 + type: object + type: UniLabJsonCommand + auto-set_max_velocity: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_max_velocity 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_max_velocity 的参数schema + properties: + velocity: + description: '参数: velocity' + type: number + required: + - velocity + type: object + result: {} + required: + - goal + title: set_max_velocity 命令参数 + type: object + type: UniLabJsonCommand + auto-set_position: + feedback: {} + goal: {} + goal_default: + max_velocity: null + position: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_position 的参数schema + properties: + max_velocity: + description: '参数: max_velocity' + type: number + position: + description: '参数: position' + type: number + required: + - position + type: object + result: {} + required: + - goal + title: set_position 命令参数 + type: object + type: UniLabJsonCommand + auto-set_valve_position: + feedback: {} + goal: {} + goal_default: + position: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + position: + description: '参数: position' + type: string + required: + - position + type: object + result: {} + required: + - goal + title: set_valve_position 命令参数 + type: object + type: UniLabJsonCommand + auto-set_velocity_grade: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_velocity_grade 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_velocity_grade 的参数schema + properties: + velocity: + description: '参数: velocity' + type: string + required: + - velocity + type: object + result: {} + required: + - goal + title: set_velocity_grade 命令参数 + type: object + type: UniLabJsonCommand + auto-stop_operation: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_operation 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_operation 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_operation 命令参数 + type: object + type: UniLabJsonCommand + auto-wait_error: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand wait_error 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand wait_error 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_error 命令参数 + type: object + type: UniLabJsonCommand hardware_interface: name: hardware_interface read: send_command write: send_command - schema: - type: object - properties: - status: - type: string - description: The status of the device - position: - type: number - description: The volume of the syringe - speed_max: - type: number - description: The speed of the syringe - valve_position: - type: string - description: The position of the valve - required: - - status - - position - - valve_position - additionalProperties: false - -solenoid_valve.mock: - description: Mock solenoid valve - class: - module: unilabos.devices.pump_and_valve.solenoid_valve_mock:SolenoidValveMock - type: python + module: unilabos.devices.pump_and_valve.runze_backbone:RunzeSyringePump status_types: - status: String - valve_position: String - action_value_mappings: - open: - type: EmptyIn - goal: {} - feedback: {} - result: {} - close: - type: EmptyIn - goal: {} - feedback: {} - result: {} - handles: - - handler_key: in - label: in - io_type: target - data_type: fluid - side: NORTH - - handler_key: out - label: out - io_type: source - data_type: fluid - side: SOUTH + max_velocity: float + mode: int + plunger_position: String + position: float + status: str + valve_position: str + velocity_end: String + velocity_grade: String + velocity_init: String + type: python + description: Runze Syringe pump with valve + handles: [] + icon: '' init_param_schema: - type: object + description: UniLabJsonCommand __init__ 的参数schema properties: - port: - type: string - description: "通信端口" - default: "COM6" + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + address: + default: '1' + description: '参数: address' + type: string + max_volume: + default: 25.0 + description: '参数: max_volume' + type: number + mode: + description: '参数: mode' + type: string + port: + description: '参数: port' + type: string + required: + - port + type: object + result: {} required: - - port - -solenoid_valve: - description: Solenoid valve - class: - module: unilabos.devices.pump_and_valve.solenoid_valve:SolenoidValve - type: python - status_types: - status: String - valve_position: String - action_value_mappings: - set_valve_position: - type: StrSingleInput - goal: - string: position - feedback: {} - result: {} \ No newline at end of file + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/robot_agv.yaml b/unilabos/registry/devices/robot_agv.yaml index a78107ed..30639a0a 100644 --- a/unilabos/registry/devices/robot_agv.yaml +++ b/unilabos/registry/devices/robot_agv.yaml @@ -1,29 +1,138 @@ -# 仙工智能底盘(知行使用) agv.SEER: - description: SEER AGV class: - module: unilabos.devices.agv.agv_navigator:AgvNavigator - type: python - status_types: - pose: Float64MultiArray - status: String action_value_mappings: + auto-send: + feedback: {} + goal: {} + goal_default: + cmd: null + ex_data: '' + obj: receive_socket + handles: [] + result: {} + schema: + description: UniLabJsonCommand send 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand send 的参数schema + properties: + cmd: + description: '参数: cmd' + type: string + ex_data: + default: '' + description: '参数: ex_data' + type: string + obj: + default: receive_socket + description: '参数: obj' + type: string + required: + - cmd + type: object + result: {} + required: + - goal + title: send 命令参数 + type: object + type: UniLabJsonCommand + auto-send_nav_task: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand send_nav_task 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand send_nav_task 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: send_nav_task 命令参数 + type: object + type: UniLabJsonCommand send_nav_task: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success - schema: + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.agv.agv_navigator:AgvNavigator + status_types: + pose: list + status: str + type: python + description: SEER AGV + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema properties: - pose: - type: array - items: - type: number - status: - type: string + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + host: + description: '参数: host' + type: string + required: + - host + type: object + result: {} required: - - status - additionalProperties: false - type: object \ No newline at end of file + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/robot_arm.yaml b/unilabos/registry/devices/robot_arm.yaml index ba1e5f32..0e32da1c 100644 --- a/unilabos/registry/devices/robot_arm.yaml +++ b/unilabos/registry/devices/robot_arm.yaml @@ -1,37 +1,202 @@ robotic_arm.UR: - description: UR robotic arm class: - module: unilabos.devices.agv.ur_arm_task:UrArmTask - type: python - status_types: - arm_pose: Float64MultiArray - gripper_pose: Float64 - arm_status: String - gripper_status: String action_value_mappings: + auto-arm_init: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand arm_init 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand arm_init 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: arm_init 命令参数 + type: object + type: UniLabJsonCommand + auto-load_pose_data: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand load_pose_data 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand load_pose_data 的参数schema + properties: + data: + description: '参数: data' + type: string + required: + - data + type: object + result: {} + required: + - goal + title: load_pose_data 命令参数 + type: object + type: UniLabJsonCommand + auto-load_pose_file: + feedback: {} + goal: {} + goal_default: + file: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand load_pose_file 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand load_pose_file 的参数schema + properties: + file: + description: '参数: file' + type: string + required: + - file + type: object + result: {} + required: + - goal + title: load_pose_file 命令参数 + type: object + type: UniLabJsonCommand + auto-move_pos_task: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand move_pos_task 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand move_pos_task 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: move_pos_task 命令参数 + type: object + type: UniLabJsonCommand + auto-reload_pose: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand reload_pose 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand reload_pose 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: reload_pose 命令参数 + type: object + type: UniLabJsonCommand move_pos_task: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success - schema: + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.agv.ur_arm_task:UrArmTask + status_types: + arm_pose: list + arm_status: str + gripper_pose: float + gripper_status: str + type: python + description: UR robotic arm + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema properties: - arm_pose: - type: array - items: - type: number - gripper_pose: - type: number - arm_status: - type: string - description: 机械臂设备状态 - gripper_status: - type: string - description: 机械爪设备状态 + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + host: + description: '参数: host' + type: string + retry: + default: 30 + description: '参数: retry' + type: integer + required: + - host + type: object + result: {} required: - - arm_status - - gripper_status - additionalProperties: false - type: object \ No newline at end of file + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/robot_gripper.yaml b/unilabos/registry/devices/robot_gripper.yaml index bae970ac..aa1795a8 100644 --- a/unilabos/registry/devices/robot_gripper.yaml +++ b/unilabos/registry/devices/robot_gripper.yaml @@ -1,37 +1,669 @@ -gripper.mock: - description: Mock gripper - class: - module: unilabos.devices.gripper.mock:MockGripper - type: python - status_types: - position: Float64 - torque: Float64 - status: String - action_value_mappings: - push_to: - type: GripperCommand - goal: - command.position: position - command.max_effort: torque - feedback: - position: position - effort: torque - result: - position: position - effort: torque - gripper.misumi_rz: - description: Misumi RZ gripper class: - module: unilabos.devices.motor:Grasp.EleGripper - type: python - status_types: - status: String action_value_mappings: + auto-data_loop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand data_loop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand data_loop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: data_loop 命令参数 + type: object + type: UniLabJsonCommand + auto-data_reader: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand data_reader 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand data_reader 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: data_reader 命令参数 + type: object + type: UniLabJsonCommand + auto-gripper_move: + feedback: {} + goal: {} + goal_default: + force: null + pos: null + speed: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand gripper_move 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand gripper_move 的参数schema + properties: + force: + description: '参数: force' + type: string + pos: + description: '参数: pos' + type: string + speed: + description: '参数: speed' + type: string + required: + - pos + - speed + - force + type: object + result: {} + required: + - goal + title: gripper_move 命令参数 + type: object + type: UniLabJsonCommand + auto-init_gripper: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand init_gripper 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand init_gripper 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: init_gripper 命令参数 + type: object + type: UniLabJsonCommand + auto-modbus_crc: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand modbus_crc 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand modbus_crc 的参数schema + properties: + data: + description: '参数: data' + type: string + required: + - data + type: object + result: {} + required: + - goal + title: modbus_crc 命令参数 + type: object + type: UniLabJsonCommand + auto-move_and_rotate: + feedback: {} + goal: {} + goal_default: + grasp_F: null + grasp_pos: null + grasp_v: null + spin_F: null + spin_pos: null + spin_v: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand move_and_rotate 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand move_and_rotate 的参数schema + properties: + grasp_F: + description: '参数: grasp_F' + type: string + grasp_pos: + description: '参数: grasp_pos' + type: string + grasp_v: + description: '参数: grasp_v' + type: string + spin_F: + description: '参数: spin_F' + type: string + spin_pos: + description: '参数: spin_pos' + type: string + spin_v: + description: '参数: spin_v' + type: string + required: + - spin_pos + - grasp_pos + - spin_v + - grasp_v + - spin_F + - grasp_F + type: object + result: {} + required: + - goal + title: move_and_rotate 命令参数 + type: object + type: UniLabJsonCommand + auto-node_gripper_move: + feedback: {} + goal: {} + goal_default: + cmd: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand node_gripper_move 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand node_gripper_move 的参数schema + properties: + cmd: + description: '参数: cmd' + type: string + required: + - cmd + type: object + result: {} + required: + - goal + title: node_gripper_move 命令参数 + type: object + type: UniLabJsonCommand + auto-node_rotate_move: + feedback: {} + goal: {} + goal_default: + cmd: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand node_rotate_move 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand node_rotate_move 的参数schema + properties: + cmd: + description: '参数: cmd' + type: string + required: + - cmd + type: object + result: {} + required: + - goal + title: node_rotate_move 命令参数 + type: object + type: UniLabJsonCommand + auto-read_address: + feedback: {} + goal: {} + goal_default: + address: null + data_len: null + id: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand read_address 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand read_address 的参数schema + properties: + address: + description: '参数: address' + type: string + data_len: + description: '参数: data_len' + type: string + id: + description: '参数: id' + type: string + required: + - id + - address + - data_len + type: object + result: {} + required: + - goal + title: read_address 命令参数 + type: object + type: UniLabJsonCommand + auto-rotate_move_abs: + feedback: {} + goal: {} + goal_default: + force: null + pos: null + speed: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand rotate_move_abs 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand rotate_move_abs 的参数schema + properties: + force: + description: '参数: force' + type: string + pos: + description: '参数: pos' + type: string + speed: + description: '参数: speed' + type: string + required: + - pos + - speed + - force + type: object + result: {} + required: + - goal + title: rotate_move_abs 命令参数 + type: object + type: UniLabJsonCommand + auto-send_cmd: + feedback: {} + goal: {} + goal_default: + address: null + data: null + fun: null + id: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand send_cmd 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand send_cmd 的参数schema + properties: + address: + description: '参数: address' + type: string + data: + description: '参数: data' + type: string + fun: + description: '参数: fun' + type: string + id: + description: '参数: id' + type: string + required: + - id + - fun + - address + - data + type: object + result: {} + required: + - goal + title: send_cmd 命令参数 + type: object + type: UniLabJsonCommand + auto-wait_for_gripper: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand wait_for_gripper 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand wait_for_gripper 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_gripper 命令参数 + type: object + type: UniLabJsonCommand + auto-wait_for_gripper_init: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand wait_for_gripper_init 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand wait_for_gripper_init 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_gripper_init 命令参数 + type: object + type: UniLabJsonCommand + auto-wait_for_rotate: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand wait_for_rotate 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand wait_for_rotate 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_rotate 命令参数 + type: object + type: UniLabJsonCommand execute_command_from_outer: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.motor.Grasp:EleGripper + status_types: + status: str + type: python + description: Misumi RZ gripper + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + baudrate: + default: 115200 + description: '参数: baudrate' + type: integer + id: + default: 9 + description: '参数: id' + type: integer + port: + description: '参数: port' + type: string + pos_error: + default: -11 + description: '参数: pos_error' + type: integer + required: + - port + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +gripper.mock: + class: + action_value_mappings: + auto-edit_id: + feedback: {} + goal: {} + goal_default: + params: '{}' + resource: + Gripper1: {} + wf_name: gripper_run + handles: [] + result: {} + schema: + description: UniLabJsonCommand edit_id 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand edit_id 的参数schema + properties: + params: + default: '{}' + description: '参数: params' + type: string + resource: + default: + Gripper1: {} + description: '参数: resource' + type: object + wf_name: + default: gripper_run + description: '参数: wf_name' + type: string + required: [] + type: object + result: {} + required: + - goal + title: edit_id 命令参数 + type: object + type: UniLabJsonCommand + auto-push_to: + feedback: {} + goal: {} + goal_default: + position: null + torque: null + velocity: 0.0 + handles: [] + result: {} + schema: + description: UniLabJsonCommand push_to 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand push_to 的参数schema + properties: + position: + description: '参数: position' + type: number + torque: + description: '参数: torque' + type: number + velocity: + default: 0.0 + description: '参数: velocity' + type: number + required: + - position + - torque + type: object + result: {} + required: + - goal + title: push_to 命令参数 + type: object + type: UniLabJsonCommand + push_to: + feedback: + effort: torque + position: position + goal: + command.max_effort: torque + command.position: position + goal_default: + command: + max_effort: 0.0 + position: 0.0 + handles: [] + result: + effort: torque + position: position + schema: + description: ROS Action GripperCommand 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + effort: + type: number + position: + type: number + reached_goal: + type: boolean + stalled: + type: boolean + required: + - position + - effort + - stalled + - reached_goal + title: GripperCommand_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + properties: + max_effort: + type: number + position: + type: number + required: + - position + - max_effort + title: GripperCommand + type: object + required: + - command + title: GripperCommand_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + effort: + type: number + position: + type: number + reached_goal: + type: boolean + stalled: + type: boolean + required: + - position + - effort + - stalled + - reached_goal + title: GripperCommand_Result + type: object + required: + - goal + title: GripperCommand + type: object + type: GripperCommand + module: unilabos.devices.gripper.mock:MockGripper + status_types: + position: float + status: str + torque: float + velocity: float + type: python + description: Mock gripper + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/robot_linear_motion.yaml b/unilabos/registry/devices/robot_linear_motion.yaml index 91e253d2..9a99a61e 100644 --- a/unilabos/registry/devices/robot_linear_motion.yaml +++ b/unilabos/registry/devices/robot_linear_motion.yaml @@ -1,57 +1,709 @@ linear_motion.grbl: - description: Grbl CNC class: - module: unilabos.devices.cnc.grbl_sync:GrblCNC - type: python action_value_mappings: - move_through_points: &move_through_points - type: NavigateThroughPoses - goal: - poses[].pose.position: positions[] - feedback: - current_pose.pose.position: position - navigation_time.sec: time_spent - estimated_time_remaining.sec: time_remaining - number_of_poses_remaining: pose_number_remaining + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] result: {} - set_spindle_speed: - type: SingleJointPosition + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommand + auto-move_through_points: + feedback: {} + goal: {} + goal_default: + positions: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand move_through_points 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand move_through_points 的参数schema + properties: + positions: + description: '参数: positions' + type: array + required: + - positions + type: object + result: {} + required: + - goal + title: move_through_points 命令参数 + type: object + type: UniLabJsonCommand + auto-set_position: + feedback: {} + goal: {} + goal_default: + position: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_position 的参数schema + properties: + position: + description: '参数: position' + type: string + required: + - position + type: object + result: {} + required: + - goal + title: set_position 命令参数 + type: object + type: UniLabJsonCommand + auto-set_spindle_speed: + feedback: {} + goal: {} + goal_default: + max_velocity: 500 + spindle_speed: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_spindle_speed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_spindle_speed 的参数schema + properties: + max_velocity: + default: 500 + description: '参数: max_velocity' + type: number + spindle_speed: + description: '参数: spindle_speed' + type: number + required: + - spindle_speed + type: object + result: {} + required: + - goal + title: set_spindle_speed 命令参数 + type: object + type: UniLabJsonCommand + auto-stop_operation: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_operation 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_operation 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_operation 命令参数 + type: object + type: UniLabJsonCommand + auto-wait_error: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand wait_error 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand wait_error 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_error 命令参数 + type: object + type: UniLabJsonCommandAsync + move_through_points: + feedback: + current_pose.pose.position: position + estimated_time_remaining.sec: time_remaining + navigation_time.sec: time_spent + number_of_poses_remaining: pose_number_remaining goal: - position: spindle_speed + poses[].pose.position: positions[] + goal_default: + behavior_tree: '' + poses: + - header: + frame_id: '' + stamp: + nanosec: 0 + sec: 0 + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + handles: [] + result: {} + schema: + description: ROS Action NavigateThroughPoses 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_pose: + properties: + header: + properties: + frame_id: + type: string + stamp: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Time + type: object + required: + - stamp + - frame_id + title: Header + type: object + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + required: + - header + - pose + title: PoseStamped + type: object + distance_remaining: + type: number + estimated_time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + navigation_time: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + number_of_poses_remaining: + maximum: 32767 + minimum: -32768 + type: integer + number_of_recoveries: + maximum: 32767 + minimum: -32768 + type: integer + required: + - current_pose + - navigation_time + - estimated_time_remaining + - number_of_recoveries + - distance_remaining + - number_of_poses_remaining + title: NavigateThroughPoses_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + behavior_tree: + type: string + poses: + items: + properties: + header: + properties: + frame_id: + type: string + stamp: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Time + type: object + required: + - stamp + - frame_id + title: Header + type: object + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + required: + - header + - pose + title: PoseStamped + type: object + type: array + required: + - poses + - behavior_tree + title: NavigateThroughPoses_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + result: + properties: {} + required: [] + title: Empty + type: object + required: + - result + title: NavigateThroughPoses_Result + type: object + required: + - goal + title: NavigateThroughPoses + type: object + type: NavigateThroughPoses + set_spindle_speed: feedback: position: spindle_speed + goal: + position: spindle_speed + goal_default: + max_velocity: 0.0 + min_duration: + nanosec: 0 + sec: 0 + position: 0.0 + handles: [] result: {} - schema: - type: object - properties: - position: - type: array - items: - type: number - description: The position of the device - spindle_speed: - type: number - description: The spindle speed of the device - required: - - position - - spindle_speed - additionalProperties: false - - -motor.iCL42: - description: iCL42 motor - class: - module: unilabos.devices.motor.iCL42:iCL42Driver - type: python + schema: + description: ROS Action SingleJointPosition 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + error: + type: number + header: + properties: + frame_id: + type: string + stamp: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Time + type: object + required: + - stamp + - frame_id + title: Header + type: object + position: + type: number + velocity: + type: number + required: + - header + - position + - velocity + - error + title: SingleJointPosition_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + max_velocity: + type: number + min_duration: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + position: + type: number + required: + - position + - min_duration + - max_velocity + title: SingleJointPosition_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: {} + required: [] + title: SingleJointPosition_Result + type: object + required: + - goal + title: SingleJointPosition + type: object + type: SingleJointPosition + module: unilabos.devices.cnc.grbl_sync:GrblCNC status_types: - motor_position: Int64 - is_executing_run: Bool - success: Bool + position: unilabos.messages:Point3D + spindle_speed: float + status: str + type: python + description: Grbl CNC + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + address: + default: '1' + description: '参数: address' + type: string + limits: + default: + - -150 + - 150 + - -200 + - 0 + - -80 + - 0 + description: '参数: limits' + type: array + port: + description: '参数: port' + type: string + required: + - port + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +motor.iCL42: + class: action_value_mappings: + auto-execute_run_motor: + feedback: {} + goal: {} + goal_default: + mode: null + position: null + velocity: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand execute_run_motor 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand execute_run_motor 的参数schema + properties: + mode: + description: '参数: mode' + type: string + position: + description: '参数: position' + type: number + velocity: + description: '参数: velocity' + type: integer + required: + - mode + - position + - velocity + type: object + result: {} + required: + - goal + title: execute_run_motor 命令参数 + type: object + type: UniLabJsonCommand + auto-init_device: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand init_device 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand init_device 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: init_device 命令参数 + type: object + type: UniLabJsonCommand + auto-run_motor: + feedback: {} + goal: {} + goal_default: + mode: null + position: null + velocity: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand run_motor 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand run_motor 的参数schema + properties: + mode: + description: '参数: mode' + type: string + position: + description: '参数: position' + type: number + velocity: + description: '参数: velocity' + type: integer + required: + - mode + - position + - velocity + type: object + result: {} + required: + - goal + title: run_motor 命令参数 + type: object + type: UniLabJsonCommand execute_command_from_outer: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: - success: success \ No newline at end of file + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.motor.iCL42:iCL42Driver + status_types: + is_executing_run: bool + motor_position: int + success: bool + type: python + description: iCL42 motor + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + device_address: + default: 1 + description: '参数: device_address' + type: integer + device_com: + default: COM9 + description: '参数: device_com' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/sim_nodes.yaml b/unilabos/registry/devices/sim_nodes.yaml index de4d110e..bf33b8ef 100644 --- a/unilabos/registry/devices/sim_nodes.yaml +++ b/unilabos/registry/devices/sim_nodes.yaml @@ -1,5 +1,355 @@ lh_joint_publisher: class: + action_value_mappings: + auto-check_tf_update_actions: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand check_tf_update_actions 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand check_tf_update_actions 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: check_tf_update_actions 命令参数 + type: object + type: UniLabJsonCommand + auto-find_resource_parent: + feedback: {} + goal: {} + goal_default: + resource_id: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand find_resource_parent 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand find_resource_parent 的参数schema + properties: + resource_id: + description: '参数: resource_id' + type: string + required: + - resource_id + type: object + result: {} + required: + - goal + title: find_resource_parent 命令参数 + type: object + type: UniLabJsonCommand + auto-inverse_kinematics: + feedback: {} + goal: {} + goal_default: + parent_id: null + x: null + x_joint: null + y: null + y_joint: null + z: null + z_joint: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand inverse_kinematics 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand inverse_kinematics 的参数schema + properties: + parent_id: + description: '参数: parent_id' + type: string + x: + description: '参数: x' + type: string + x_joint: + description: '参数: x_joint' + type: object + y: + description: '参数: y' + type: string + y_joint: + description: '参数: y_joint' + type: object + z: + description: '参数: z' + type: string + z_joint: + description: '参数: z_joint' + type: object + required: + - x + - y + - z + - parent_id + - x_joint + - y_joint + - z_joint + type: object + result: {} + required: + - goal + title: inverse_kinematics 命令参数 + type: object + type: UniLabJsonCommand + auto-lh_joint_action_callback: + feedback: {} + goal: {} + goal_default: + goal_handle: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand lh_joint_action_callback 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand lh_joint_action_callback 的参数schema + properties: + goal_handle: + description: '参数: goal_handle' + type: string + required: + - goal_handle + type: object + result: {} + required: + - goal + title: lh_joint_action_callback 命令参数 + type: object + type: UniLabJsonCommand + auto-lh_joint_pub_callback: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand lh_joint_pub_callback 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand lh_joint_pub_callback 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: lh_joint_pub_callback 命令参数 + type: object + type: UniLabJsonCommand + auto-move_joints: + feedback: {} + goal: {} + goal_default: + option: null + resource_names: null + speed: 0.1 + x: null + x_joint: null + y: null + y_joint: null + z: null + z_joint: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand move_joints 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand move_joints 的参数schema + properties: + option: + description: '参数: option' + type: string + resource_names: + description: '参数: resource_names' + type: string + speed: + default: 0.1 + description: '参数: speed' + type: string + x: + description: '参数: x' + type: string + x_joint: + description: '参数: x_joint' + type: string + y: + description: '参数: y' + type: string + y_joint: + description: '参数: y_joint' + type: string + z: + description: '参数: z' + type: string + z_joint: + description: '参数: z_joint' + type: string + required: + - resource_names + - x + - y + - z + - option + type: object + result: {} + required: + - goal + title: move_joints 命令参数 + type: object + type: UniLabJsonCommand + auto-move_to: + feedback: {} + goal: {} + goal_default: + joint_positions: null + parent_id: null + speed: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand move_to 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand move_to 的参数schema + properties: + joint_positions: + description: '参数: joint_positions' + type: string + parent_id: + description: '参数: parent_id' + type: string + speed: + description: '参数: speed' + type: string + required: + - joint_positions + - speed + - parent_id + type: object + result: {} + required: + - goal + title: move_to 命令参数 + type: object + type: UniLabJsonCommand + auto-resource_move: + feedback: {} + goal: {} + goal_default: + channels: null + link_name: null + resource_id: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand resource_move 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand resource_move 的参数schema + properties: + channels: + description: '参数: channels' + type: array + link_name: + description: '参数: link_name' + type: string + resource_id: + description: '参数: resource_id' + type: string + required: + - resource_id + - link_name + - channels + type: object + result: {} + required: + - goal + title: resource_move 命令参数 + type: object + type: UniLabJsonCommand + auto-send_resource_action: + feedback: {} + goal: {} + goal_default: + link_name: null + resource_id_list: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand send_resource_action 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand send_resource_action 的参数schema + properties: + link_name: + description: '参数: link_name' + type: string + resource_id_list: + description: '参数: resource_id_list' + type: array + required: + - resource_id_list + - link_name + type: object + result: {} + required: + - goal + title: send_resource_action 命令参数 + type: object + type: UniLabJsonCommand module: unilabos.devices.ros_dev.liquid_handler_joint_publisher:LiquidHandlerJointPublisher + status_types: {} type: ros2 - + description: '' + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + device_id: + default: lh_joint_publisher + description: '参数: device_id' + type: string + rate: + default: 50 + description: '参数: rate' + type: integer + resource_tracker: + description: '参数: resource_tracker' + type: string + resources_config: + description: '参数: resources_config' + type: array + required: + - resources_config + - resource_tracker + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/temperature.yaml b/unilabos/registry/devices/temperature.yaml index 662ee016..b94f9398 100644 --- a/unilabos/registry/devices/temperature.yaml +++ b/unilabos/registry/devices/temperature.yaml @@ -1,65 +1,841 @@ -heaterstirrer.dalong: - description: DaLong heater stirrer +chiller: class: - module: unilabos.devices.heaterstirrer.dalong:HeaterStirrer_DaLong - type: python - status_types: - temp: Float64 - temp_warning: Float64 - stir_speed: Float64 action_value_mappings: - set_temp_warning: - type: SendCmd - goal: - command: temp + auto-build_modbus_frame: feedback: {} + goal: {} + goal_default: + device_address: null + function_code: null + register_address: null + value: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand build_modbus_frame 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand build_modbus_frame 的参数schema + properties: + device_address: + description: '参数: device_address' + type: integer + function_code: + description: '参数: function_code' + type: integer + register_address: + description: '参数: register_address' + type: integer + value: + description: '参数: value' + type: integer + required: + - device_address + - function_code + - register_address + - value + type: object + result: {} + required: + - goal + title: build_modbus_frame 命令参数 + type: object + type: UniLabJsonCommand + auto-convert_temperature_to_modbus_value: + feedback: {} + goal: {} + goal_default: + decimal_points: 1 + temperature: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand convert_temperature_to_modbus_value 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand convert_temperature_to_modbus_value 的参数schema + properties: + decimal_points: + default: 1 + description: '参数: decimal_points' + type: integer + temperature: + description: '参数: temperature' + type: number + required: + - temperature + type: object + result: {} + required: + - goal + title: convert_temperature_to_modbus_value 命令参数 + type: object + type: UniLabJsonCommand + auto-modbus_crc: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand modbus_crc 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand modbus_crc 的参数schema + properties: + data: + description: '参数: data' + type: string + required: + - data + type: object + result: {} + required: + - goal + title: modbus_crc 命令参数 + type: object + type: UniLabJsonCommand + auto-set_temperature: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_temperature 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_temperature 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_temperature 命令参数 + type: object + type: UniLabJsonCommand + auto-stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop 命令参数 + type: object + type: UniLabJsonCommand + set_temperature: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] result: success: success - set_temp_target: + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object type: SendCmd - goal: - command: temp + module: unilabos.devices.temperature.chiller:Chiller + status_types: {} + type: python + description: Chiller + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + description: '参数: port' + type: string + rate: + default: 9600 + description: '参数: rate' + type: integer + required: + - port + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +heaterstirrer.dalong: + class: + action_value_mappings: + auto-close: feedback: {} - result: - success: success + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-heatchill: + feedback: {} + goal: {} + goal_default: + purpose: reaction + stir: true + stir_speed: 300 + temp: null + time: 3600 + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand heatchill 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heatchill 的参数schema + properties: + purpose: + default: reaction + description: '参数: purpose' + type: string + stir: + default: true + description: '参数: stir' + type: boolean + stir_speed: + default: 300 + description: '参数: stir_speed' + type: number + temp: + description: '参数: temp' + type: number + time: + default: 3600 + description: '参数: time' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + - temp + type: object + result: {} + required: + - goal + title: heatchill 命令参数 + type: object + type: UniLabJsonCommand + auto-set_stir_speed: + feedback: {} + goal: {} + goal_default: + speed: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_stir_speed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_stir_speed 的参数schema + properties: + speed: + description: '参数: speed' + type: number + required: + - speed + type: object + result: {} + required: + - goal + title: set_stir_speed 命令参数 + type: object + type: UniLabJsonCommand + auto-set_temp_inner: + feedback: {} + goal: {} + goal_default: + temp: null + type: warning + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_temp_inner 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_temp_inner 的参数schema + properties: + temp: + description: '参数: temp' + type: number + type: + default: warning + description: '参数: type' + type: string + required: + - temp + type: object + result: {} + required: + - goal + title: set_temp_inner 命令参数 + type: object + type: UniLabJsonCommand + auto-set_temp_target: + feedback: {} + goal: {} + goal_default: + temp: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_temp_target 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_temp_target 的参数schema + properties: + temp: + description: '参数: temp' + type: string + required: + - temp + type: object + result: {} + required: + - goal + title: set_temp_target 命令参数 + type: object + type: UniLabJsonCommand + auto-set_temp_warning: + feedback: {} + goal: {} + goal_default: + temp: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_temp_warning 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_temp_warning 的参数schema + properties: + temp: + description: '参数: temp' + type: string + required: + - temp + type: object + result: {} + required: + - goal + title: set_temp_warning 命令参数 + type: object + type: UniLabJsonCommand heatchill: - type: HeatChill - goal: - vessel: vessel - temp: temp - time: time - purpose: purpose feedback: status: status - result: - success: success - -chiller: - description: Chiller - class: - module: unilabos.devices.temperature.chiller:Chiller - type: python - action_value_mappings: - set_temperature: - type: SendCmd goal: - command: command - feedback: {} + purpose: purpose + temp: temp + time: time + vessel: vessel + goal_default: + purpose: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' + handles: [] result: success: success -tempsensor: - description: Temperature sensor - class: - module: unilabos.devices.temperature.sensor_node:TempSensorNode - type: python + schema: + description: ROS Action HeatChill 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChill_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + required: + - vessel + - temp + - time + - stir + - stir_speed + - purpose + title: HeatChill_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChill_Result + type: object + required: + - goal + title: HeatChill + type: object + type: HeatChill + set_temp_target: + feedback: {} + goal: + command: temp + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_temp_warning: + feedback: {} + goal: + command: temp + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.heaterstirrer.dalong:HeaterStirrer_DaLong status_types: - value: Float64 - warning: Float64 + status: str + stir_speed: float + temp: float + temp_target: float + temp_warning: float + type: python + description: DaLong heater stirrer + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + baudrate: + default: 9600 + description: '参数: baudrate' + type: integer + port: + default: COM6 + description: '参数: port' + type: string + temp_warning: + default: 50.0 + description: '参数: temp_warning' + type: number + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +tempsensor: + class: action_value_mappings: + auto-build_modbus_request: + feedback: {} + goal: {} + goal_default: + device_id: null + function_code: null + register_address: null + register_count: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand build_modbus_request 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand build_modbus_request 的参数schema + properties: + device_id: + description: '参数: device_id' + type: string + function_code: + description: '参数: function_code' + type: string + register_address: + description: '参数: register_address' + type: string + register_count: + description: '参数: register_count' + type: string + required: + - device_id + - function_code + - register_address + - register_count + type: object + result: {} + required: + - goal + title: build_modbus_request 命令参数 + type: object + type: UniLabJsonCommand + auto-calculate_crc: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand calculate_crc 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand calculate_crc 的参数schema + properties: + data: + description: '参数: data' + type: string + required: + - data + type: object + result: {} + required: + - goal + title: calculate_crc 命令参数 + type: object + type: UniLabJsonCommand + auto-read_modbus_response: + feedback: {} + goal: {} + goal_default: + response: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand read_modbus_response 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand read_modbus_response 的参数schema + properties: + response: + description: '参数: response' + type: string + required: + - response + type: object + result: {} + required: + - goal + title: read_modbus_response 命令参数 + type: object + type: UniLabJsonCommand + auto-send_prototype_command: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand send_prototype_command 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand send_prototype_command 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: send_prototype_command 命令参数 + type: object + type: UniLabJsonCommand + auto-set_warning: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_warning 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_warning 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_warning 命令参数 + type: object + type: UniLabJsonCommand set_warning: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.temperature.sensor_node:TempSensorNode + status_types: + value: float + type: python + description: Temperature sensor + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + address: + description: '参数: address' + type: string + baudrate: + default: 9600 + description: '参数: baudrate' + type: integer + port: + description: '参数: port' + type: string + warning: + description: '参数: warning' + type: string + required: + - port + - warning + - address + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/vacuum_and_purge.yaml b/unilabos/registry/devices/vacuum_and_purge.yaml index 84fb58cf..0497ee76 100644 --- a/unilabos/registry/devices/vacuum_and_purge.yaml +++ b/unilabos/registry/devices/vacuum_and_purge.yaml @@ -1,81 +1,514 @@ -vacuum_pump.mock: - description: Mock vacuum pump - class: - module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock - type: python - status_types: - status: String - action_value_mappings: - open: - type: EmptyIn - goal: {} - feedback: {} - result: {} - close: - type: EmptyIn - goal: {} - feedback: {} - result: {} - set_status: - type: StrSingleInput - goal: - string: string - feedback: {} - result: {} - handles: - - handler_key: out - label: out - data_type: fluid - io_type: source - data_source: handle - data_key: fluid_in - init_param_schema: - type: object - properties: - port: - type: string - description: "通信端口" - default: "COM6" - required: - - port - gas_source.mock: - description: Mock gas source class: - module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock - type: python - status_types: - status: String action_value_mappings: - open: - type: EmptyIn - goal: {} + auto-close: feedback: {} + goal: {} + goal_default: {} + handles: [] result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_closed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_closed 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed 命令参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open 命令参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open 命令参数 + type: object + type: UniLabJsonCommand + auto-set_status: + feedback: {} + goal: {} + goal_default: + string: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_status 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_status 的参数schema + properties: + string: + description: '参数: string' + type: string + required: + - string + type: object + result: {} + required: + - goal + title: set_status 命令参数 + type: object + type: UniLabJsonCommand close: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn set_status: - type: StrSingleInput + feedback: {} goal: string: string - feedback: {} + goal_default: + string: '' + handles: [] result: {} + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock + status_types: + status: str + type: python + description: Mock gas source handles: - - handler_key: out - label: out - data_type: fluid - io_type: source - data_source: executor - data_key: fluid_out + - data_key: fluid_out + data_source: executor + data_type: fluid + handler_key: out + io_type: source + label: out + icon: '' init_param_schema: - type: object + description: UniLabJsonCommand __init__ 的参数schema properties: - port: - type: string - description: "通信端口" - default: "COM6" + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: COM6 + description: '参数: port' + type: string + required: [] + type: object + result: {} required: - - port \ No newline at end of file + - goal + title: __init__ 命令参数 + type: object +vacuum_pump.mock: + class: + action_value_mappings: + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_closed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_closed 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed 命令参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open 命令参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open 命令参数 + type: object + type: UniLabJsonCommand + auto-set_status: + feedback: {} + goal: {} + goal_default: + string: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_status 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_status 的参数schema + properties: + string: + description: '参数: string' + type: string + required: + - string + type: object + result: {} + required: + - goal + title: set_status 命令参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + set_status: + feedback: {} + goal: + string: string + goal_default: + string: '' + handles: [] + result: {} + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock + status_types: + status: str + type: python + description: Mock vacuum pump + handles: + - data_key: fluid_in + data_source: handle + data_type: fluid + handler_key: out + io_type: source + label: out + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: COM6 + description: '参数: port' + type: string + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/virtual_device.yaml b/unilabos/registry/devices/virtual_device.yaml index e25c0d6b..953be1af 100644 --- a/unilabos/registry/devices/virtual_device.yaml +++ b/unilabos/registry/devices/virtual_device.yaml @@ -1,961 +1,4527 @@ -# 虚拟设备清单及连接特性 - -# 1. virtual_pump - 虚拟泵 -# 描述:具有多通道阀门特性的泵,根据valve_position可连接多个容器 -# 连接特性:1个输入口 + 1个输出口 -# 数据类型:fluid(流体连接) - -# 2. virtual_stirrer - 虚拟搅拌器 -# 描述:机械连接设备,提供搅拌功能 -# 连接特性:1个连接点 -# 数据类型:mechanical(机械连接) - -# 3a. virtual_valve - 虚拟八通阀门 -# 描述:8通阀门,可切换流向 -# 连接特性:1个口连接注射泵 + 多个输出口 -# 数据类型:fluid(流体连接) - -# 3b. virtual_solenoid_valve (电磁阀门) -# 描述:简单的开关型电磁阀,只有开启和关闭两个状态 -# 连接特性:1个输入口 + 1个输出口,控制通断 -# 数据类型:fluid(流体连接) - -# 4. virtual_centrifuge - 虚拟离心机 -# 描述:单个样品处理设备,原地处理样品 -# 连接特性:1个输入口 + 1个输出口 -# 数据类型:resource(资源/样品连接) - -# 5. virtual_filter - 虚拟过滤器 -# 描述:分离设备,将样品分离为滤液和滤渣 -# 连接特性:1个输入口 + 2个输出口(滤液和滤渣) -# 数据类型:resource(资源/样品连接) - -# 6. virtual_heatchill - 虚拟加热/冷却器 -# 描述:温控设备,容器直接放置在设备上进行温度控制 -# 连接特性:1个连接点 -# 数据类型:mechanical(机械/物理接触连接) - -# 7. virtual_transfer_pump - 虚拟转移泵(注射器式) -# 描述:注射器式转移泵,通过同一个口吸入和排出液体 -# 连接特性:1个连接点 -# 数据类型:fluid(流体连接) - -# 8. virtual_column - 虚拟色谱柱 -# 描述:分离纯化设备,用于样品纯化 -# 连接特性:1个输入口 + 1个输出口 -# 数据类型:resource(资源/样品连接) - -# 9. virtual_rotavap - 虚拟旋转蒸发仪 -# 描述:旋转蒸发仪用于溶剂蒸发和浓缩,具有加热、旋转和真空功能 -# 连接特性:1个输入口(样品),1个输出口(浓缩物),1个冷凝器出口(回收溶剂) -# 数据类型:resource(资源/样品连接) - -# 10. virtual_separator - 虚拟分液器 -# 描述:分液器用于两相液体的分离,可进行萃取和洗涤操作 -# 连接特性:1个输入口(混合液),2个输出口(上相和下相) -# 数据类型:fluid(流体连接) - -# 11. virtual_vacuum_pump - 虚拟真空泵 -# 描述:真空泵设备,用于抽真空操作和真空/充气循环 -# 连接特性:1个输出口(连接需要抽真空的系统) -# 数据类型:fluid(流体连接) - -# 12. virtual_gas_source - 虚拟气源 -# 描述:气源设备,用于充气操作和真空/充气循环 -# 连接特性:1个输出口(向系统提供加压气体) -# 数据类型:fluid(流体连接) - -virtual_pump: - description: Virtual Pump for PumpTransferProtocol Testing +virtual_centrifuge: class: - module: unilabos.devices.virtual.virtual_pump:VirtualPump - type: python - status_types: - status: String - position: Float64 - valve_position: Int32 - max_volume: Float64 - current_volume: Float64 action_value_mappings: - transfer: - type: PumpTransfer + auto-centrifuge: + feedback: {} + goal: {} + goal_default: + speed: null + temp: 25.0 + time: null + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand centrifuge 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand centrifuge 的参数schema + properties: + speed: + description: '参数: speed' + type: number + temp: + default: 25.0 + description: '参数: temp' + type: number + time: + description: '参数: time' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + - speed + - time + type: object + result: {} + required: + - goal + title: centrifuge 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + centrifuge: + feedback: + current_speed: current_speed + current_status: status + current_temp: current_temp + progress: progress goal: + speed: speed + temp: temp + time: time + vessel: vessel + goal_default: + speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' + handles: [] + result: + message: message + success: success + schema: + description: ROS Action Centrifuge 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_speed: + type: number + current_status: + type: string + current_temp: + type: number + progress: + type: number + required: + - progress + - current_speed + - current_temp + - current_status + title: Centrifuge_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + required: + - vessel + - speed + - time + - temp + title: Centrifuge_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Centrifuge_Result + type: object + required: + - goal + title: Centrifuge + type: object + type: Centrifuge + module: unilabos.devices.virtual.virtual_centrifuge:VirtualCentrifuge + status_types: + centrifuge_state: str + current_speed: float + current_temp: float + max_speed: float + max_temp: float + message: str + min_temp: float + progress: float + status: str + target_speed: float + target_temp: float + time_remaining: float + type: python + description: Virtual Centrifuge for CentrifugeProtocol Testing + handles: + - data_key: vessel + data_source: handle + data_type: transport + description: 需要离心的样品容器 + handler_key: centrifuge + io_type: target + label: centrifuge + side: NORTH + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: string + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_column: + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-run_column: + feedback: {} + goal: {} + goal_default: + column: null + from_vessel: null + to_vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand run_column 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand run_column 的参数schema + properties: + column: + description: '参数: column' + type: string + from_vessel: + description: '参数: from_vessel' + type: string + to_vessel: + description: '参数: to_vessel' + type: string + required: + - from_vessel + - to_vessel + - column + type: object + result: {} + required: + - goal + title: run_column 命令参数 + type: object + type: UniLabJsonCommandAsync + run_column: + feedback: + current_status: current_status + processed_volume: processed_volume + progress: progress + goal: + column: column from_vessel: from_vessel to_vessel: to_vessel - volume: volume - amount: amount - time: time - viscous: viscous - rinsing_solvent: rinsing_solvent - rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats - solid: solid - feedback: - status: status + goal_default: + column: '' + from_vessel: '' + to_vessel: '' + handles: [] result: + message: current_status + return_info: current_status success: success - set_valve_position: - type: FloatSingleInput - goal: - float_in: valve_position - feedback: - status: status - result: - success: success - handles: - - handler_key: pumpio - label: pumpio - data_type: fluid - io_type: source - data_source: handle - data_key: fluid_in - description: "泵的输出口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_volume: - type: number - default: 25.0 - additionalProperties: false - -virtual_stirrer: - description: Virtual Stirrer for StirProtocol Testing - icon: Stirrer.webp - class: - module: unilabos.devices.virtual.virtual_stirrer:VirtualStirrer - type: python + schema: + description: ROS Action RunColumn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: RunColumn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + column: + type: string + from_vessel: + type: string + to_vessel: + type: string + required: + - from_vessel + - to_vessel + - column + title: RunColumn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: RunColumn_Result + type: object + required: + - goal + title: RunColumn + type: object + type: RunColumn + module: unilabos.devices.virtual.virtual_column:VirtualColumn status_types: - status: String - operation_mode: String - current_vessel: String - current_speed: Float64 - is_stirring: Bool - remaining_time: Float64 - action_value_mappings: - stir: - type: Stir - goal: - stir_time: stir_time - stir_speed: stir_speed - settling_time: settling_time - feedback: - status: status - result: - success: success - start_stir: - type: StartStir - goal: - vessel: vessel - stir_speed: stir_speed - purpose: purpose - feedback: - status: status - result: - success: success - stop_stir: - type: StopStir - goal: - vessel: vessel - feedback: - status: status - result: - success: success - handles: - - handler_key: stirrer - label: stirrer - data_type: mechanical - side: NORTH - io_type: source - data_source: handle - data_key: vessel - description: "搅拌器的机械连接口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_speed: - type: number - default: 1500.0 - min_speed: - type: number - default: 50.0 - additionalProperties: false - -virtual_multiway_valve: - description: Virtual 8-Way Valve for flow direction control - icon: EightPipeline.webp - class: - module: unilabos.devices.virtual.virtual_multiway_valve:VirtualMultiwayValve + column_diameter: float + column_length: float + column_state: str + current_flow_rate: float + current_status: str + max_flow_rate: float + processed_volume: float + progress: float + status: str type: python - status_types: - status: String - valve_state: String - current_position: Int32 - target_position: Int32 - max_positions: Int32 - action_value_mappings: - set_position: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success - set_valve_position: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success + description: Virtual Column Chromatography Device for RunColumn Protocol Testing handles: - - handler_key: transferpump - label: transferpump - data_type: fluid - side: NORTH - io_type: target + - data_key: from_vessel data_source: handle - data_key: fluid_in - description: "八通阀门进液口" - - handler_key: 1 - label: 1 - data_type: fluid - side: NORTH - io_type: source - data_source: executor - data_key: fluid_port_1 - description: "八通阀门端口1" - - handler_key: 2 - label: 2 - data_type: fluid - side: EAST - io_type: source - data_source: executor - data_key: fluid_port_2 - description: "八通阀门端口2" - - handler_key: 3 - label: 3 - data_type: fluid - side: EAST - io_type: source - data_source: executor - data_key: fluid_port_3 - description: "八通阀门端口3" - - handler_key: 4 - label: 4 - data_type: fluid - side: SOUTH - io_type: source - data_source: executor - data_key: fluid_port_4 - description: "八通阀门端口4" - - handler_key: 5 - label: 5 - data_type: fluid - side: SOUTH - io_type: source - data_source: executor - data_key: fluid_port_5 - description: "八通阀门端口5" - - handler_key: 6 - label: 6 - data_type: fluid - side: WEST - io_type: source - data_source: executor - data_key: fluid_port_6 - description: "八通阀门端口6" - - handler_key: 7 - label: 7 - data_type: fluid - side: WEST - io_type: source - data_source: executor - data_key: fluid_port_7 - description: "八通阀门端口7" - - handler_key: 8 - label: 8 - data_type: fluid - side: NORTH - io_type: source - data_source: executor - data_key: fluid_port_8 - description: "八通阀门端口8" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - positions: - type: integer - default: 8 - additionalProperties: false - -virtual_solenoid_valve: - description: Virtual Solenoid Valve for simple on/off flow control - class: - module: unilabos.devices.virtual.virtual_solenoid_valve:VirtualSolenoidValve - type: python - status_types: - status: String - valve_state: String - is_open: Bool - action_value_mappings: - set_valve_position: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success - open: - type: SendCmd - goal: - command: "OPEN" - feedback: {} - result: - success: success - close: - type: SendCmd - goal: - command: "CLOSED" - feedback: {} - result: - success: success - set_state: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success - handles: - - handler_key: in - label: in - data_type: fluid - side: NORTH - io_type: target - data_source: handle - data_key: fluid_port_in - description: "电磁阀的进液口" - - handler_key: out - label: out - data_type: fluid - side: SOUTH - io_type: source - data_source: handle - data_key: fluid_port_out - description: "电磁阀的出液口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - voltage: - type: number - default: 12.0 - response_time: - type: number - default: 0.1 - additionalProperties: false - -virtual_centrifuge: - description: Virtual Centrifuge for CentrifugeProtocol Testing - class: - module: unilabos.devices.virtual.virtual_centrifuge:VirtualCentrifuge - type: python - status_types: - status: String - current_speed: Float64 - target_speed: Float64 - current_temp: Float64 - target_temp: Float64 - max_speed: Float64 - max_temp: Float64 - min_temp: Float64 - centrifuge_state: String - time_remaining: Float64 - progress: Float64 - message: String - action_value_mappings: - centrifuge: - type: Centrifuge - goal: - vessel: vessel - speed: speed - time: time - temp: temp - feedback: - progress: progress - current_speed: current_speed - current_temp: current_temp - current_status: status - result: - success: success - message: message - handles: - - handler_key: centrifuge - label: centrifuge data_type: transport - side: NORTH + description: 样品输入口 + handler_key: columnin io_type: target + label: columnin + side: WEST + - data_key: to_vessel data_source: handle - data_key: vessel - description: "需要离心的样品容器" - schema: - type: object + data_type: transport + description: 产物输出口 + handler_key: columnout + io_type: source + label: columnout + side: EAST + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema properties: - port: - type: string - default: "VIRTUAL" - max_speed: - type: number - default: 15000.0 - max_temp: - type: number - default: 40.0 - min_temp: - type: number - default: 4.0 - additionalProperties: false - + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: object + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object virtual_filter: - description: Virtual Filter for FilterProtocol Testing class: - module: unilabos.devices.virtual.virtual_filter:VirtualFilter - type: python - status_types: - status: String - progress: Float64 - current_temp: Float64 - filtered_volume: Float64 - current_status: String - message: String - max_temp: Float64 - max_stir_speed: Float64 - max_volume: Float64 action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-filter: + feedback: {} + goal: {} + goal_default: + continue_heatchill: false + filtrate_vessel: '' + stir: false + stir_speed: 300.0 + temp: 25.0 + vessel: null + volume: 0.0 + handles: [] + result: {} + schema: + description: UniLabJsonCommand filter 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand filter 的参数schema + properties: + continue_heatchill: + default: false + description: '参数: continue_heatchill' + type: boolean + filtrate_vessel: + default: '' + description: '参数: filtrate_vessel' + type: string + stir: + default: false + description: '参数: stir' + type: boolean + stir_speed: + default: 300.0 + description: '参数: stir_speed' + type: number + temp: + default: 25.0 + description: '参数: temp' + type: number + vessel: + description: '参数: vessel' + type: string + volume: + default: 0.0 + description: '参数: volume' + type: number + required: + - vessel + type: object + result: {} + required: + - goal + title: filter 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync filter: - type: Filter + feedback: + current_status: current_status + current_temp: current_temp + filtered_volume: filtered_volume + progress: progress goal: - vessel: vessel + continue_heatchill: continue_heatchill filtrate_vessel: filtrate_vessel stir: stir stir_speed: stir_speed temp: temp - continue_heatchill: continue_heatchill + vessel: vessel volume: volume - feedback: - progress: progress - current_temp: current_temp - filtered_volume: filtered_volume - current_status: current_status + goal_default: + continue_heatchill: false + filtrate_vessel: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + vessel: '' + volume: 0.0 + handles: [] result: - success: success message: message return_info: message - handles: - - handler_key: filter_in - label: filter_in - data_type: transport - side: NORTH - io_type: target - data_source: handle - data_key: vessel_in - description: "需要过滤的样品容器" - - handler_key: filtrate_out - label: filtrate_out - data_type: transport - side: SOUTH - io_type: source - data_source: handle - data_key: filtrate_out - description: "滤液出口" - - handler_key: retentate_out - label: retentate_out - data_type: transport - side: EAST - io_type: source - data_source: handle - data_key: retentate_out - description: "滤渣/固体出口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_temp: - type: number - default: 100.0 - max_stir_speed: - type: number - default: 1000.0 - max_volume: - type: number - default: 500.0 - additionalProperties: false - -virtual_heatchill: - description: Virtual HeatChill for HeatChillProtocol Testing - icon: Heater.webp - class: - module: unilabos.devices.virtual.virtual_heatchill:VirtualHeatChill - type: python + success: success + schema: + description: ROS Action Filter 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + current_temp: + type: number + filtered_volume: + type: number + progress: + type: number + required: + - progress + - current_temp + - filtered_volume + - current_status + title: Filter_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + continue_heatchill: + type: boolean + filtrate_vessel: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + vessel: + type: string + volume: + type: number + required: + - vessel + - filtrate_vessel + - stir + - stir_speed + - temp + - continue_heatchill + - volume + title: Filter_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Filter_Result + type: object + required: + - goal + title: Filter + type: object + type: Filter + module: unilabos.devices.virtual.virtual_filter:VirtualFilter status_types: - status: String - operation_mode: String - is_stirring: Bool - stir_speed: Float64 + current_status: str + current_temp: float + filtered_volume: float + max_stir_speed: float + max_temp: float + max_volume: float + message: str + progress: float + status: str + type: python + description: Virtual Filter for FilterProtocol Testing + handles: + - data_key: vessel_in + data_source: handle + data_type: transport + description: 需要过滤的样品容器 + handler_key: filterin + io_type: target + label: filter_in + side: NORTH + - data_key: filtrate_out + data_source: handle + data_type: transport + description: 滤液出口 + handler_key: filtrateout + io_type: source + label: filtrate_out + side: SOUTH + - data_key: retentate_out + data_source: handle + data_type: transport + description: 滤渣/固体出口 + handler_key: retentateout + io_type: source + label: retentate_out + side: EAST + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: string + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_gas_source: + class: action_value_mappings: - heat_chill: - type: HeatChill + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_closed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_closed 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed 命令参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open 命令参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open 命令参数 + type: object + type: UniLabJsonCommand + auto-set_status: + feedback: {} + goal: {} + goal_default: + string: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_status 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_status 的参数schema + properties: + string: + description: '参数: string' + type: string + required: + - string + type: object + result: {} + required: + - goal + title: set_status 命令参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + set_status: + feedback: {} goal: - vessel: vessel - temp: temp - time: time + string: string + goal_default: + string: '' + handles: [] + result: {} + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.virtual.virtual_gas_source:VirtualGasSource + status_types: + status: str + type: python + description: Virtual gas source + handles: + - data_key: fluid_out + data_source: executor + data_type: fluid + description: 气源出气口 + handler_key: gassource + io_type: source + label: gassource + side: SOUTH + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: string + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_heatchill: + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-heat_chill: + feedback: {} + goal: {} + goal_default: + purpose: null + stir: null + stir_speed: null + temp: null + time: null + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand heat_chill 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heat_chill 的参数schema + properties: + purpose: + description: '参数: purpose' + type: string + stir: + description: '参数: stir' + type: boolean + stir_speed: + description: '参数: stir_speed' + type: number + temp: + description: '参数: temp' + type: number + time: + description: '参数: time' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + - temp + - time + - stir + - stir_speed + - purpose + type: object + result: {} + required: + - goal + title: heat_chill 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-heat_chill_start: + feedback: {} + goal: {} + goal_default: + purpose: null + temp: null + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand heat_chill_start 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heat_chill_start 的参数schema + properties: + purpose: + description: '参数: purpose' + type: string + temp: + description: '参数: temp' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + - temp + - purpose + type: object + result: {} + required: + - goal + title: heat_chill_start 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-heat_chill_stop: + feedback: {} + goal: {} + goal_default: + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand heat_chill_stop 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand heat_chill_stop 的参数schema + properties: + vessel: + description: '参数: vessel' + type: string + required: + - vessel + type: object + result: {} + required: + - goal + title: heat_chill_stop 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + heat_chill: + feedback: + status: status + goal: + purpose: purpose stir: stir stir_speed: stir_speed - purpose: purpose - feedback: - status: status - result: - success: success - heat_chill_start: - type: HeatChillStart - goal: - vessel: vessel temp: temp - purpose: purpose - feedback: - status: status + time: time + vessel: vessel + goal_default: + purpose: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' + handles: [] result: success: success + schema: + description: ROS Action HeatChill 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChill_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + required: + - vessel + - temp + - time + - stir + - stir_speed + - purpose + title: HeatChill_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChill_Result + type: object + required: + - goal + title: HeatChill + type: object + type: HeatChill + heat_chill_start: + feedback: + status: status + goal: + purpose: purpose + temp: temp + vessel: vessel + goal_default: + purpose: '' + temp: 0.0 + vessel: '' + handles: [] + result: + success: success + schema: + description: ROS Action HeatChillStart 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChillStart_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + temp: + type: number + vessel: + type: string + required: + - vessel + - temp + - purpose + title: HeatChillStart_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStart_Result + type: object + required: + - goal + title: HeatChillStart + type: object + type: HeatChillStart heat_chill_stop: - type: HeatChillStop + feedback: + status: status goal: vessel: vessel - feedback: - status: status + goal_default: + vessel: '' + handles: [] result: success: success - handles: - - handler_key: heatchill - label: heatchill - data_type: mechanical - side: NORTH - io_type: source - data_source: handle - data_key: vessel - description: "加热/冷却器的物理连接口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_temp: - type: number - default: 200.0 - min_temp: - type: number - default: -80 - max_stir_speed: - type: number - default: 1000.0 - additionalProperties: false - -virtual_transfer_pump: - description: Virtual Transfer Pump for TransferProtocol Testing (Syringe-style) - icon: Pump.webp - class: - module: unilabos.devices.virtual.virtual_transferpump:VirtualTransferPump - type: python + schema: + description: ROS Action HeatChillStop 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChillStop_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + vessel: + type: string + required: + - vessel + title: HeatChillStop_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStop_Result + type: object + required: + - goal + title: HeatChillStop + type: object + type: HeatChillStop + module: unilabos.devices.virtual.virtual_heatchill:VirtualHeatChill status_types: - status: String - current_volume: Float64 - max_volume: Float64 - transfer_rate: Float64 - position: Float64 + is_stirring: bool + operation_mode: str + remaining_time: float + status: str + stir_speed: float + type: python + description: Virtual HeatChill for HeatChillProtocol Testing + handles: + - data_key: vessel + data_source: handle + data_type: mechanical + description: 加热/冷却器的物理连接口 + handler_key: heatchill + io_type: source + label: heatchill + side: NORTH + icon: Heater.webp + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: object + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_multiway_valve: + class: action_value_mappings: - transfer: - type: Transfer + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-is_at_port: + feedback: {} + goal: {} + goal_default: + port_number: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_at_port 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_at_port 的参数schema + properties: + port_number: + description: '参数: port_number' + type: integer + required: + - port_number + type: object + result: {} + required: + - goal + title: is_at_port 命令参数 + type: object + type: UniLabJsonCommand + auto-is_at_position: + feedback: {} + goal: {} + goal_default: + position: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_at_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_at_position 的参数schema + properties: + position: + description: '参数: position' + type: integer + required: + - position + type: object + result: {} + required: + - goal + title: is_at_position 命令参数 + type: object + type: UniLabJsonCommand + auto-is_at_pump_position: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_at_pump_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_at_pump_position 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_at_pump_position 命令参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open 命令参数 + type: object + type: UniLabJsonCommand + auto-reset: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand reset 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand reset 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: reset 命令参数 + type: object + type: UniLabJsonCommand + auto-set_position: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_position 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_position 命令参数 + type: object + type: UniLabJsonCommand + auto-set_to_port: + feedback: {} + goal: {} + goal_default: + port_number: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_to_port 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_to_port 的参数schema + properties: + port_number: + description: '参数: port_number' + type: integer + required: + - port_number + type: object + result: {} + required: + - goal + title: set_to_port 命令参数 + type: object + type: UniLabJsonCommand + auto-set_to_pump_position: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_to_pump_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_to_pump_position 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: set_to_pump_position 命令参数 + type: object + type: UniLabJsonCommand + auto-set_valve_position: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_valve_position 命令参数 + type: object + type: UniLabJsonCommand + auto-switch_between_pump_and_port: + feedback: {} + goal: {} + goal_default: + port_number: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand switch_between_pump_and_port 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand switch_between_pump_and_port 的参数schema + properties: + port_number: + description: '参数: port_number' + type: integer + required: + - port_number + type: object + result: {} + required: + - goal + title: switch_between_pump_and_port 命令参数 + type: object + type: UniLabJsonCommand + set_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_valve_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.virtual.virtual_multiway_valve:VirtualMultiwayValve + status_types: + available_ports: dict + available_positions: list + current_port: str + current_position: int + flow_path: str + info: dict + status: str + target_position: int + valve_position: int + valve_state: str + type: python + description: Virtual 8-Way Valve for flow direction control + handles: + - data_key: fluid_in + data_source: handle + data_type: fluid + description: 八通阀门进液口 + handler_key: transferpump + io_type: target + label: transferpump + side: NORTH + - data_key: fluid_port_1 + data_source: executor + data_type: fluid + description: 八通阀门端口1 + handler_key: 1 + io_type: source + label: 1 + side: NORTH + - data_key: fluid_port_2 + data_source: executor + data_type: fluid + description: 八通阀门端口2 + handler_key: 2 + io_type: source + label: 2 + side: EAST + - data_key: fluid_port_3 + data_source: executor + data_type: fluid + description: 八通阀门端口3 + handler_key: 3 + io_type: source + label: 3 + side: EAST + - data_key: fluid_port_4 + data_source: executor + data_type: fluid + description: 八通阀门端口4 + handler_key: 4 + io_type: source + label: 4 + side: SOUTH + - data_key: fluid_port_5 + data_source: executor + data_type: fluid + description: 八通阀门端口5 + handler_key: 5 + io_type: source + label: 5 + side: SOUTH + - data_key: fluid_port_6 + data_source: executor + data_type: fluid + description: 八通阀门端口6 + handler_key: 6 + io_type: source + label: 6 + side: WEST + - data_key: fluid_port_7 + data_source: executor + data_type: fluid + description: 八通阀门端口7 + handler_key: 7 + io_type: source + label: 7 + side: WEST + - data_key: fluid_port_8 + data_source: executor + data_type: fluid + description: 八通阀门端口8 + handler_key: 8 + io_type: source + label: 8 + side: NORTH + icon: EightPipeline.webp + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + port: + default: VIRTUAL + description: '参数: port' + type: string + positions: + default: 8 + description: '参数: positions' + type: integer + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_pump: + class: + action_value_mappings: + auto-clean_vessel: + feedback: {} + goal: {} + goal_default: + repeats: 1 + solvent: null + temp: null + vessel: null + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand clean_vessel 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand clean_vessel 的参数schema + properties: + repeats: + default: 1 + description: '参数: repeats' + type: integer + solvent: + description: '参数: solvent' + type: string + temp: + description: '参数: temp' + type: number + vessel: + description: '参数: vessel' + type: string + volume: + description: '参数: volume' + type: number + required: + - vessel + - solvent + - volume + - temp + type: object + result: {} + required: + - goal + title: clean_vessel 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-transfer: + feedback: {} + goal: {} + goal_default: + amount: '' + from_vessel: null + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: null + viscous: false + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand transfer 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand transfer 的参数schema + properties: + amount: + default: '' + description: '参数: amount' + type: string + from_vessel: + description: '参数: from_vessel' + type: string + rinsing_repeats: + default: 0 + description: '参数: rinsing_repeats' + type: integer + rinsing_solvent: + default: '' + description: '参数: rinsing_solvent' + type: string + rinsing_volume: + default: 0.0 + description: '参数: rinsing_volume' + type: number + solid: + default: false + description: '参数: solid' + type: boolean + time: + default: 0.0 + description: '参数: time' + type: number + to_vessel: + description: '参数: to_vessel' + type: string + viscous: + default: false + description: '参数: viscous' + type: boolean + volume: + description: '参数: volume' + type: number + required: + - from_vessel + - to_vessel + - volume + type: object + result: {} + required: + - goal + title: transfer 命令参数 + type: object + type: UniLabJsonCommandAsync + set_valve_position: + feedback: + status: status + goal: + float_in: valve_position + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action FloatSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + transfer: + feedback: + status: status goal: - from_vessel: from_vessel - to_vessel: to_vessel - volume: volume amount: amount - time: time - viscous: viscous + from_vessel: from_vessel + rinsing_repeats: rinsing_repeats rinsing_solvent: rinsing_solvent rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats solid: solid - feedback: - progress: progress - transferred_volume: transferred_volume - current_status: current_status - result: - success: success - message: message - set_position: - type: SetPumpPosition - goal: - position: position - max_velocity: max_velocity - feedback: - status: status - current_position: current_position - progress: progress - result: - success: success - message: message - handles: - - handler_key: transferpump - label: transferpump - data_type: fluid - side: SOUTH - io_type: source - data_source: handle - data_key: fluid_port - description: "注射器式转移泵的连接口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - description: "通信端口" - max_volume: - type: number - default: 50.0 - description: "最大注射器容量 (mL)" - transfer_rate: - type: number - default: 5.0 - description: "默认转移速率 (mL/s)" - additionalProperties: false - -virtual_column: - description: Virtual Column Chromatography Device for RunColumn Protocol Testing - class: - module: unilabos.devices.virtual.virtual_column:VirtualColumn - type: python - status_types: - status: String - column_state: String - current_flow_rate: Float64 - max_flow_rate: Float64 - column_length: Float64 - column_diameter: Float64 - processed_volume: Float64 - progress: Float64 - current_status: String - action_value_mappings: - run_column: - type: RunColumn - goal: - from_vessel: from_vessel - to_vessel: to_vessel - column: column - feedback: - progress: progress - processed_volume: processed_volume - current_status: current_status - result: - success: success - message: current_status - return_info: current_status - handles: - - handler_key: columnin - label: columnin - data_type: transport - side: WEST - io_type: target - data_source: handle - data_key: from_vessel - description: "样品输入口" - - handler_key: columnout - label: columnout - data_type: transport - side: EAST - io_type: source - data_source: handle - data_key: to_vessel - description: "产物输出口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_flow_rate: - type: number - default: 10.0 - column_length: - type: number - default: 25.0 - column_diameter: - type: number - default: 2.0 - additionalProperties: false - -virtual_rotavap: - description: Virtual Rotary Evaporator for EvaporateProtocol Testing - icon: Rotaryevaporator.webp - class: - module: unilabos.devices.virtual.virtual_rotavap:VirtualRotavap - type: python - status_types: - status: String - rotavap_state: String - current_temp: Float64 - rotation_speed: Float64 - vacuum_pressure: Float64 - evaporated_volume: Float64 - progress: Float64 - remaining_time: Float64 - message: String - max_temp: Float64 - max_rotation_speed: Float64 - action_value_mappings: - evaporate: - type: Evaporate - goal: - vessel: vessel - pressure: pressure - temp: temp time: time - stir_speed: stir_speed + to_vessel: to_vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + from_vessel: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: '' + viscous: false + volume: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action PumpTransfer 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: PumpTransfer_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + amount: + type: string + from_vessel: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + time: + type: number + to_vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + title: PumpTransfer_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: PumpTransfer_Result + type: object + required: + - goal + title: PumpTransfer + type: object + type: PumpTransfer + module: unilabos.devices.virtual.virtual_pump:VirtualPump + status_types: + current_status: str + current_volume: float + from_vessel: str + max_volume: float + progress: float + status: str + to_vessel: str + transfer_rate: float + transferred_volume: float + valve_position: int + type: python + description: Virtual Pump for PumpTransferProtocol Testing + handles: + - data_key: fluid_in + data_source: handle + data_type: fluid + description: 泵的输出口 + handler_key: pumpio + io_type: source + label: pumpio + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: object + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_rotavap: + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-evaporate: + feedback: {} + goal: {} + goal_default: + pressure: 0.1 + stir_speed: 100.0 + temp: 60.0 + time: 1800.0 + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand evaporate 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand evaporate 的参数schema + properties: + pressure: + default: 0.1 + description: '参数: pressure' + type: number + stir_speed: + default: 100.0 + description: '参数: stir_speed' + type: number + temp: + default: 60.0 + description: '参数: temp' + type: number + time: + default: 1800.0 + description: '参数: time' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + type: object + result: {} + required: + - goal + title: evaporate 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + evaporate: feedback: - progress: progress current_temp: current_temp evaporated_volume: evaporated_volume + progress: progress status: status - result: - success: success - message: message - handles: - - handler_key: sample_in - label: sample_in - data_type: fluid - side: NORTH - io_type: target - data_source: handle - data_key: vessel_in - description: "样品连接口" - - handler_key: product_out - label: product_out - data_type: fluid - side: SOUTH - io_type: source - data_source: handle - data_key: product_out - description: "浓缩产物出口" - - handler_key: solvent_out - label: solvent_out - data_type: fluid - side: EAST - io_type: source - data_source: handle - data_key: solvent_out - description: "冷凝溶剂出口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_temp: - type: number - default: 180.0 - max_rotation_speed: - type: number - default: 280.0 - additionalProperties: false - -virtual_separator: - description: Virtual Separator for SeparateProtocol Testing - icon: Separator.webp - class: - module: unilabos.devices.virtual.virtual_separator:VirtualSeparator - type: python - status_types: - status: String - separator_state: String - volume: Float64 - has_phases: Bool - phase_separation: Bool - stir_speed: Float64 - settling_time: Float64 - progress: Float64 - message: String - action_value_mappings: - separate: - type: Separate goal: - purpose: purpose - product_phase: product_phase + pressure: pressure + stir_speed: stir_speed + temp: temp + time: time + vessel: vessel + goal_default: + pressure: 0.0 + stir_speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' + handles: [] + result: + message: message + success: success + schema: + description: ROS Action Evaporate 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Evaporate_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + pressure: + type: number + stir_speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + required: + - vessel + - pressure + - temp + - time + - stir_speed + title: Evaporate_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Evaporate_Result + type: object + required: + - goal + title: Evaporate + type: object + type: Evaporate + module: unilabos.devices.virtual.virtual_rotavap:VirtualRotavap + status_types: + current_temp: float + evaporated_volume: float + max_rotation_speed: float + max_temp: float + message: str + progress: float + remaining_time: float + rotation_speed: float + rotavap_state: str + status: str + vacuum_pressure: float + type: python + description: Virtual Rotary Evaporator for EvaporateProtocol Testing + handles: + - data_key: vessel_in + data_source: handle + data_type: fluid + description: 样品连接口 + handler_key: samplein + io_type: target + label: sample_in + side: NORTH + - data_key: product_out + data_source: handle + data_type: fluid + description: 浓缩产物出口 + handler_key: productout + io_type: source + label: product_out + side: SOUTH + - data_key: solvent_out + data_source: handle + data_type: fluid + description: 冷凝溶剂出口 + handler_key: solventout + io_type: source + label: solvent_out + side: EAST + icon: Rotaryevaporator.webp + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: string + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_separator: + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-separate: + feedback: {} + goal: {} + goal_default: + from_vessel: null + product_phase: null + purpose: null + repeats: 1 + separation_vessel: null + settling_time: 300.0 + solvent: '' + solvent_volume: 50.0 + stir_speed: 300.0 + stir_time: 30.0 + through: '' + to_vessel: null + waste_phase_to_vessel: '' + handles: [] + result: {} + schema: + description: UniLabJsonCommand separate 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand separate 的参数schema + properties: + from_vessel: + description: '参数: from_vessel' + type: string + product_phase: + description: '参数: product_phase' + type: string + purpose: + description: '参数: purpose' + type: string + repeats: + default: 1 + description: '参数: repeats' + type: integer + separation_vessel: + description: '参数: separation_vessel' + type: string + settling_time: + default: 300.0 + description: '参数: settling_time' + type: number + solvent: + default: '' + description: '参数: solvent' + type: string + solvent_volume: + default: 50.0 + description: '参数: solvent_volume' + type: number + stir_speed: + default: 300.0 + description: '参数: stir_speed' + type: number + stir_time: + default: 30.0 + description: '参数: stir_time' + type: number + through: + default: '' + description: '参数: through' + type: string + to_vessel: + description: '参数: to_vessel' + type: string + waste_phase_to_vessel: + default: '' + description: '参数: waste_phase_to_vessel' + type: string + required: + - purpose + - product_phase + - from_vessel + - separation_vessel + - to_vessel + type: object + result: {} + required: + - goal + title: separate 命令参数 + type: object + type: UniLabJsonCommandAsync + separate: + feedback: + current_status: status + progress: progress + goal: from_vessel: from_vessel + product_phase: product_phase + purpose: purpose + repeats: repeats separation_vessel: separation_vessel - to_vessel: to_vessel - waste_phase_to_vessel: waste_phase_to_vessel + settling_time: settling_time solvent: solvent solvent_volume: solvent_volume - through: through - repeats: repeats - stir_time: stir_time stir_speed: stir_speed - settling_time: settling_time - feedback: - progress: progress - current_status: status + stir_time: stir_time + through: through + to_vessel: to_vessel + waste_phase_to_vessel: waste_phase_to_vessel + goal_default: + from_vessel: '' + product_phase: '' + purpose: '' + repeats: 0 + separation_vessel: '' + settling_time: 0.0 + solvent: '' + solvent_volume: 0.0 + stir_speed: 0.0 + stir_time: 0.0 + through: '' + to_vessel: '' + waste_phase_to_vessel: '' + handles: [] + result: + message: message + success: success + schema: + description: ROS Action Separate 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Separate_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + from_vessel: + type: string + product_phase: + type: string + purpose: + type: string + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + separation_vessel: + type: string + settling_time: + type: number + solvent: + type: string + solvent_volume: + type: number + stir_speed: + type: number + stir_time: + type: number + through: + type: string + to_vessel: + type: string + waste_phase_to_vessel: + type: string + required: + - purpose + - product_phase + - from_vessel + - separation_vessel + - to_vessel + - waste_phase_to_vessel + - solvent + - solvent_volume + - through + - repeats + - stir_time + - stir_speed + - settling_time + title: Separate_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Separate_Result + type: object + required: + - goal + title: Separate + type: object + type: Separate + module: unilabos.devices.virtual.virtual_separator:VirtualSeparator + status_types: + has_phases: bool + message: str + phase_separation: bool + progress: float + separator_state: str + settling_time: float + status: str + stir_speed: float + volume: float + type: python + description: Virtual Separator for SeparateProtocol Testing + handles: + - data_key: from_vessel + data_source: handle + data_type: fluid + description: 需要分离的混合液体输入口 + handler_key: separatorin + io_type: target + label: separator_in + side: NORTH + - data_key: bottom_outlet + data_source: executor + data_type: fluid + description: 下相(重相)液体输出口 + handler_key: bottomphaseout + io_type: source + label: bottom_phase_out + side: SOUTH + - data_key: top_outlet + data_source: executor + data_type: fluid + description: 上相(轻相)液体输出口 + handler_key: topphaseout + io_type: source + label: top_phase_out + side: EAST + - data_key: mechanical_port + data_source: handle + data_type: mechanical + description: 用于连接搅拌器等机械设备的接口 + handler_key: bind + io_type: target + label: bind + side: WEST + icon: Separator.webp + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: string + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_solenoid_valve: + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_closed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_closed 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed 命令参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-reset: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand reset 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand reset 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: reset 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-set_state: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_state 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_state 的参数schema + properties: + command: + description: '参数: command' + type: string + required: + - command + type: object + result: {} + required: + - goal + title: set_state 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-set_valve_position: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_valve_position 的参数schema + properties: + command: + description: '参数: command' + type: string + required: [] + type: object + result: {} + required: + - goal + title: set_valve_position 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-toggle: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand toggle 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand toggle 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: toggle 命令参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: + command: CLOSED + goal_default: + command: '' + handles: [] result: success: success - message: message + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + open: + feedback: {} + goal: + command: OPEN + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_state: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_valve_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: ROS Action SendCmd 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.virtual.virtual_solenoid_valve:VirtualSolenoidValve + status_types: + is_open: bool + state: dict + status: str + valve_position: str + valve_state: str + type: python + description: Virtual Solenoid Valve for simple on/off flow control handles: - - handler_key: separator_in - label: separator_in + - data_key: fluid_port_in + data_source: handle data_type: fluid + description: 电磁阀的进液口 + handler_key: in + io_type: target + label: in side: NORTH - io_type: target + - data_key: fluid_port_out data_source: handle - data_key: from_vessel - description: "需要分离的混合液体输入口" - - handler_key: bottom_phase_out - label: bottom_phase_out data_type: fluid + description: 电磁阀的出液口 + handler_key: out + io_type: source + label: out side: SOUTH - io_type: source - data_source: executor - data_key: bottom_outlet - description: "下相(重相)液体输出口" - - handler_key: top_phase_out - label: top_phase_out - data_type: fluid - side: EAST - io_type: source - data_source: executor - data_key: top_outlet - description: "上相(轻相)液体输出口" - - handler_key: bind - label: bind - io_type: target + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: object + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_stirrer: + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-start_stir: + feedback: {} + goal: {} + goal_default: + purpose: null + stir_speed: null + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand start_stir 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand start_stir 的参数schema + properties: + purpose: + description: '参数: purpose' + type: string + stir_speed: + description: '参数: stir_speed' + type: number + vessel: + description: '参数: vessel' + type: string + required: + - vessel + - stir_speed + - purpose + type: object + result: {} + required: + - goal + title: start_stir 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-stir: + feedback: {} + goal: {} + goal_default: + settling_time: null + stir_speed: null + stir_time: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand stir 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stir 的参数schema + properties: + settling_time: + description: '参数: settling_time' + type: number + stir_speed: + description: '参数: stir_speed' + type: number + stir_time: + description: '参数: stir_time' + type: number + required: + - stir_time + - stir_speed + - settling_time + type: object + result: {} + required: + - goal + title: stir 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-stop_stir: + feedback: {} + goal: {} + goal_default: + vessel: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_stir 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_stir 的参数schema + properties: + vessel: + description: '参数: vessel' + type: string + required: + - vessel + type: object + result: {} + required: + - goal + title: stop_stir 命令参数 + type: object + type: UniLabJsonCommandAsync + start_stir: + feedback: + status: status + goal: + purpose: purpose + stir_speed: stir_speed + vessel: vessel + goal_default: + purpose: '' + stir_speed: 0.0 + vessel: '' + handles: [] + result: + success: success + schema: + description: ROS Action StartStir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_speed: + type: number + current_status: + type: string + progress: + type: number + required: + - progress + - current_speed + - current_status + title: StartStir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + stir_speed: + type: number + vessel: + type: string + required: + - vessel + - stir_speed + - purpose + title: StartStir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StartStir_Result + type: object + required: + - goal + title: StartStir + type: object + type: StartStir + stir: + feedback: + status: status + goal: + settling_time: settling_time + stir_speed: stir_speed + stir_time: stir_time + goal_default: + settling_time: 0.0 + stir_speed: 0.0 + stir_time: 0.0 + handles: [] + result: + success: success + schema: + description: ROS Action Stir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: Stir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + settling_time: + type: number + stir_speed: + type: number + stir_time: + type: number + required: + - stir_time + - stir_speed + - settling_time + title: Stir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Stir_Result + type: object + required: + - goal + title: Stir + type: object + type: Stir + stop_stir: + feedback: + status: status + goal: + vessel: vessel + goal_default: + vessel: '' + handles: [] + result: + success: success + schema: + description: ROS Action StopStir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + progress: + type: number + required: + - progress + - current_status + title: StopStir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + vessel: + type: string + required: + - vessel + title: StopStir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StopStir_Result + type: object + required: + - goal + title: StopStir + type: object + type: StopStir + module: unilabos.devices.virtual.virtual_stirrer:VirtualStirrer + status_types: + current_speed: float + current_vessel: str + is_stirring: bool + operation_mode: str + remaining_time: float + status: str + type: python + description: Virtual Stirrer for StirProtocol Testing + handles: + - data_key: vessel + data_source: handle data_type: mechanical - side: WEST - data_source: handle - data_key: mechanical_port - description: "用于连接搅拌器等机械设备的接口" - schema: - type: object + description: 搅拌器的机械连接口 + handler_key: stirrer + io_type: source + label: stirrer + side: NORTH + icon: Stirrer.webp + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema properties: - port: - type: string - default: "VIRTUAL" - volume: - type: number - default: 250.0 - has_phases: - type: boolean - default: true - additionalProperties: false - + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: object + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object +virtual_transfer_pump: + class: + action_value_mappings: + auto-aspirate: + feedback: {} + goal: {} + goal_default: + velocity: null + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand aspirate 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand aspirate 的参数schema + properties: + velocity: + description: '参数: velocity' + type: number + volume: + description: '参数: volume' + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: aspirate 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-dispense: + feedback: {} + goal: {} + goal_default: + velocity: null + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand dispense 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand dispense 的参数schema + properties: + velocity: + description: '参数: velocity' + type: number + volume: + description: '参数: volume' + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: dispense 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-empty_syringe: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand empty_syringe 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand empty_syringe 的参数schema + properties: + velocity: + description: '参数: velocity' + type: number + required: [] + type: object + result: {} + required: + - goal + title: empty_syringe 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-fill_syringe: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand fill_syringe 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand fill_syringe 的参数schema + properties: + velocity: + description: '参数: velocity' + type: number + required: [] + type: object + result: {} + required: + - goal + title: fill_syringe 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-is_empty: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_empty 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_empty 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_empty 命令参数 + type: object + type: UniLabJsonCommand + auto-is_full: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_full 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_full 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_full 命令参数 + type: object + type: UniLabJsonCommand + auto-pull_plunger: + feedback: {} + goal: {} + goal_default: + velocity: null + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand pull_plunger 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand pull_plunger 的参数schema + properties: + velocity: + description: '参数: velocity' + type: number + volume: + description: '参数: volume' + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: pull_plunger 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-push_plunger: + feedback: {} + goal: {} + goal_default: + velocity: null + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand push_plunger 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand push_plunger 的参数schema + properties: + velocity: + description: '参数: velocity' + type: number + volume: + description: '参数: volume' + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: push_plunger 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-set_max_velocity: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_max_velocity 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_max_velocity 的参数schema + properties: + velocity: + description: '参数: velocity' + type: number + required: + - velocity + type: object + result: {} + required: + - goal + title: set_max_velocity 命令参数 + type: object + type: UniLabJsonCommand + auto-set_position: + feedback: {} + goal: {} + goal_default: + max_velocity: null + position: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_position 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_position 的参数schema + properties: + max_velocity: + description: '参数: max_velocity' + type: number + position: + description: '参数: position' + type: number + required: + - position + type: object + result: {} + required: + - goal + title: set_position 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-stop_operation: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand stop_operation 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand stop_operation 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_operation 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-transfer: + feedback: {} + goal: {} + goal_default: + aspirate_velocity: null + dispense_velocity: null + volume: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand transfer 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand transfer 的参数schema + properties: + aspirate_velocity: + description: '参数: aspirate_velocity' + type: number + dispense_velocity: + description: '参数: dispense_velocity' + type: number + volume: + description: '参数: volume' + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: transfer 命令参数 + type: object + type: UniLabJsonCommandAsync + set_position: + feedback: + current_position: current_position + progress: progress + status: status + goal: + max_velocity: max_velocity + position: position + goal_default: + max_velocity: 0.0 + position: 0.0 + handles: [] + result: + message: message + success: success + schema: + description: ROS Action SetPumpPosition 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_position: + type: number + progress: + type: number + status: + type: string + required: + - status + - current_position + - progress + title: SetPumpPosition_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + max_velocity: + type: number + position: + type: number + required: + - position + - max_velocity + title: SetPumpPosition_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + - message + title: SetPumpPosition_Result + type: object + required: + - goal + title: SetPumpPosition + type: object + type: SetPumpPosition + transfer: + feedback: + current_status: current_status + progress: progress + transferred_volume: transferred_volume + goal: + amount: amount + from_vessel: from_vessel + rinsing_repeats: rinsing_repeats + rinsing_solvent: rinsing_solvent + rinsing_volume: rinsing_volume + solid: solid + time: time + to_vessel: to_vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + from_vessel: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: '' + viscous: false + volume: 0.0 + handles: [] + result: + message: message + success: success + schema: + description: ROS Action Transfer 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + progress: + type: number + transferred_volume: + type: number + required: + - progress + - transferred_volume + - current_status + title: Transfer_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + amount: + type: string + from_vessel: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + time: + type: number + to_vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + title: Transfer_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Transfer_Result + type: object + required: + - goal + title: Transfer + type: object + type: Transfer + module: unilabos.devices.virtual.virtual_transferpump:VirtualTransferPump + status_types: + current_volume: float + max_velocity: float + position: float + pump_info: dict + remaining_capacity: float + status: str + transfer_rate: float + type: python + description: Virtual Transfer Pump for TransferProtocol Testing (Syringe-style) + handles: + - data_key: fluid_port + data_source: handle + data_type: fluid + description: 注射器式转移泵的连接口 + handler_key: transferpump + io_type: source + label: transferpump + side: SOUTH + icon: Pump.webp + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: object + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object virtual_vacuum_pump: - description: Virtual vacuum pump - icon: Vacuum.webp class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand cleanup 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand cleanup 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_closed 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_closed 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed 命令参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand is_open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand is_open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open 命令参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand open 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand open 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open 命令参数 + type: object + type: UniLabJsonCommand + auto-set_status: + feedback: {} + goal: {} + goal_default: + string: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand set_status 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand set_status 的参数schema + properties: + string: + description: '参数: string' + type: string + required: + - string + type: object + result: {} + required: + - goal + title: set_status 命令参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + set_status: + feedback: {} + goal: + string: string + goal_default: + string: '' + handles: [] + result: {} + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput module: unilabos.devices.virtual.virtual_vacuum_pump:VirtualVacuumPump - type: python status_types: - status: String - action_value_mappings: - open: - type: EmptyIn - goal: {} - feedback: {} - result: {} - close: - type: EmptyIn - goal: {} - feedback: {} - result: {} - set_status: - type: StrSingleInput - goal: - string: string - feedback: {} - result: {} + status: str + type: python + description: Virtual vacuum pump handles: - - handler_key: vacuumpump - label: vacuumpump - data_type: fluid - side: SOUTH - io_type: source + - data_key: fluid_in data_source: handle - data_key: fluid_in - description: "真空泵进气口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - description: "通信端口" - additionalProperties: false - -virtual_gas_source: - description: Virtual gas source - class: - module: unilabos.devices.virtual.virtual_gas_source:VirtualGasSource - type: python - status_types: - status: String - action_value_mappings: - open: - type: EmptyIn - goal: {} - feedback: {} - result: {} - close: - type: EmptyIn - goal: {} - feedback: {} - result: {} - set_status: - type: StrSingleInput - goal: - string: string - feedback: {} - result: {} - handles: - - handler_key: gassource - label: gassource data_type: fluid - side: SOUTH + description: 真空泵进气口 + handler_key: vacuumpump io_type: source - data_source: executor - data_key: fluid_out - description: "气源出气口" - schema: - type: object + label: vacuumpump + side: SOUTH + icon: Vacuum.webp + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema properties: - port: - type: string - default: "VIRTUAL" - description: "通信端口" - gas_type: - type: string - default: "nitrogen" - description: "气体类型" - max_pressure: - type: number - default: 5.0 - description: "最大输出压力 (bar)" - additionalProperties: false \ No newline at end of file + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + config: + description: '参数: config' + type: string + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + required: + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/work_station.yaml b/unilabos/registry/devices/work_station.yaml index c8c0324d..28661603 100644 --- a/unilabos/registry/devices/work_station.yaml +++ b/unilabos/registry/devices/work_station.yaml @@ -1,625 +1,2411 @@ workstation: - description: Workstation class: - module: unilabos.ros.nodes.presets.protocol_node:ROS2ProtocolNode - type: ros2 action_value_mappings: - AddProtocol: - type: Add - goal: - vessel: vessel - reagent: reagent - volume: volume - mass: mass - amount: amount - time: time - stir: stir - stir_speed: stir_speed - viscous: viscous - purpose: purpose - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: reagent - label: Reagent - data_type: resource - data_source: handle - data_key: reagent - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - AGVTransferProtocol: - type: AGVTransfer + feedback: {} goal: from_repo: from_repo from_repo_position: from_repo_position to_repo: to_repo to_repo_position: to_repo_position - feedback: {} + goal_default: + from_repo: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + from_repo_position: '' + to_repo: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + to_repo_position: '' + handles: [] result: {} - - CentrifugeProtocol: - type: Centrifuge - goal: - vessel: vessel - speed: speed - time: time - temp: temp + schema: + description: ROS Action AGVTransfer 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: AGVTransfer_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + from_repo: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + from_repo_position: + type: string + to_repo: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + to_repo_position: + type: string + required: + - from_repo + - from_repo_position + - to_repo + - to_repo_position + title: AGVTransfer_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: AGVTransfer_Result + type: object + required: + - goal + title: AGVTransfer + type: object + type: AGVTransfer + AddProtocol: feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - CleanProtocol: - type: Clean goal: - vessel: vessel - solvent: solvent - volume: volume - temp: temp - repeats: repeats - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - CleanVesselProtocol: - type: CleanVessel - goal: - vessel: vessel - solvent: solvent - volume: volume - temp: temp - repeats: repeats - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - DissolveProtocol: - type: Dissolve - goal: - vessel: vessel - solvent: solvent - volume: volume amount: amount - temp: temp - time: time + mass: mass + purpose: purpose + reagent: reagent + stir: stir stir_speed: stir_speed - feedback: {} - result: {} + time: time + vessel: vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + mass: 0.0 + purpose: '' + reagent: '' + stir: false + stir_speed: 0.0 + time: 0.0 + vessel: '' + viscous: false + volume: 0.0 handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: reagent + data_source: handle + data_type: resource + handler_key: reagent + label: Reagent output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - EvacuateAndRefillProtocol: - type: EvacuateAndRefill + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action Add 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + progress: + type: number + required: + - progress + - current_status + title: Add_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + amount: + type: string + mass: + type: number + purpose: + type: string + reagent: + type: string + stir: + type: boolean + stir_speed: + type: number + time: + type: number + vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - vessel + - reagent + - volume + - mass + - amount + - time + - stir + - stir_speed + - viscous + - purpose + title: Add_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Add_Result + type: object + required: + - goal + title: Add + type: object + type: Add + CentrifugeProtocol: + feedback: {} goal: + speed: speed + temp: temp + time: time vessel: vessel + goal_default: + speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action Centrifuge 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_speed: + type: number + current_status: + type: string + current_temp: + type: number + progress: + type: number + required: + - progress + - current_speed + - current_temp + - current_status + title: Centrifuge_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + required: + - vessel + - speed + - time + - temp + title: Centrifuge_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Centrifuge_Result + type: object + required: + - goal + title: Centrifuge + type: object + type: Centrifuge + CleanProtocol: + feedback: {} + goal: + repeats: repeats + solvent: solvent + temp: temp + vessel: vessel + volume: volume + goal_default: + repeats: 0 + solvent: '' + temp: 0.0 + vessel: '' + volume: 0.0 + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action Clean 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Clean_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + solvent: + type: string + temp: + type: number + vessel: + type: string + volume: + type: number + required: + - vessel + - solvent + - volume + - temp + - repeats + title: Clean_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Clean_Result + type: object + required: + - goal + title: Clean + type: object + type: Clean + CleanVesselProtocol: + feedback: {} + goal: + repeats: repeats + solvent: solvent + temp: temp + vessel: vessel + volume: volume + goal_default: + repeats: 0 + solvent: '' + temp: 0.0 + vessel: '' + volume: 0.0 + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action CleanVessel 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: CleanVessel_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + solvent: + type: string + temp: + type: number + vessel: + type: string + volume: + type: number + required: + - vessel + - solvent + - volume + - temp + - repeats + title: CleanVessel_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: CleanVessel_Result + type: object + required: + - goal + title: CleanVessel + type: object + type: CleanVessel + DissolveProtocol: + feedback: {} + goal: + amount: amount + solvent: solvent + stir_speed: stir_speed + temp: temp + time: time + vessel: vessel + volume: volume + goal_default: + amount: '' + solvent: '' + stir_speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' + volume: 0.0 + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action Dissolve 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Dissolve_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + amount: + type: string + solvent: + type: string + stir_speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + volume: + type: number + required: + - vessel + - solvent + - volume + - amount + - temp + - time + - stir_speed + title: Dissolve_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Dissolve_Result + type: object + required: + - goal + title: Dissolve + type: object + type: Dissolve + EvacuateAndRefillProtocol: + feedback: {} + goal: gas: gas repeats: repeats - feedback: {} - result: {} + vessel: vessel + goal_default: + gas: '' + repeats: 0 + vessel: '' handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action EvacuateAndRefill 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: EvacuateAndRefill_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + gas: + type: string + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + vessel: + type: string + required: + - vessel + - gas + - repeats + title: EvacuateAndRefill_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: EvacuateAndRefill_Result + type: object + required: + - goal + title: EvacuateAndRefill + type: object + type: EvacuateAndRefill EvaporateProtocol: - type: Evaporate + feedback: {} goal: - vessel: vessel pressure: pressure + stir_speed: stir_speed temp: temp time: time - stir_speed: stir_speed - feedback: {} - result: {} + vessel: vessel + goal_default: + pressure: 0.0 + stir_speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action Evaporate 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Evaporate_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + pressure: + type: number + stir_speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + required: + - vessel + - pressure + - temp + - time + - stir_speed + title: Evaporate_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Evaporate_Result + type: object + required: + - goal + title: Evaporate + type: object + type: Evaporate FilterProtocol: - type: Filter + feedback: {} goal: - vessel: vessel + continue_heatchill: continue_heatchill filtrate_vessel: filtrate_vessel stir: stir stir_speed: stir_speed temp: temp - continue_heatchill: continue_heatchill + vessel: vessel volume: volume - feedback: {} - result: {} + goal_default: + continue_heatchill: false + filtrate_vessel: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + vessel: '' + volume: 0.0 handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: filtrate_vessel - label: Filtrate Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: filtrate_vessel + label: Filtrate Vessel output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: filtrate_out - label: Filtrate Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: filtrate_out + label: Filtrate Vessel + result: {} + schema: + description: ROS Action Filter 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + current_temp: + type: number + filtered_volume: + type: number + progress: + type: number + required: + - progress + - current_temp + - filtered_volume + - current_status + title: Filter_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + continue_heatchill: + type: boolean + filtrate_vessel: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + vessel: + type: string + volume: + type: number + required: + - vessel + - filtrate_vessel + - stir + - stir_speed + - temp + - continue_heatchill + - volume + title: Filter_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Filter_Result + type: object + required: + - goal + title: Filter + type: object + type: Filter FilterThroughProtocol: - type: FilterThrough + feedback: {} goal: - from_vessel: from_vessel - to_vessel: to_vessel - filter_through: filter_through + eluting_repeats: eluting_repeats eluting_solvent: eluting_solvent eluting_volume: eluting_volume - eluting_repeats: eluting_repeats + filter_through: filter_through + from_vessel: from_vessel residence_time: residence_time - feedback: {} - result: {} + to_vessel: to_vessel + goal_default: + eluting_repeats: 0 + eluting_solvent: '' + eluting_volume: 0.0 + filter_through: '' + from_vessel: '' + residence_time: 0.0 + to_vessel: '' handles: input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: solvent - label: Eluting Solvent - data_type: resource - data_source: handle - data_key: solvent + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Eluting Solvent output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + result: {} + schema: + description: ROS Action FilterThrough 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: FilterThrough_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + eluting_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + eluting_solvent: + type: string + eluting_volume: + type: number + filter_through: + type: string + from_vessel: + type: string + residence_time: + type: number + to_vessel: + type: string + required: + - from_vessel + - to_vessel + - filter_through + - eluting_solvent + - eluting_volume + - eluting_repeats + - residence_time + title: FilterThrough_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: FilterThrough_Result + type: object + required: + - goal + title: FilterThrough + type: object + type: FilterThrough HeatChillProtocol: - type: HeatChill + feedback: {} goal: - vessel: vessel - temp: temp - time: time + purpose: purpose stir: stir stir_speed: stir_speed - purpose: purpose - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - HeatChillStartProtocol: - type: HeatChillStart - goal: - vessel: vessel temp: temp - purpose: purpose - feedback: {} - result: {} + time: time + vessel: vessel + goal_default: + purpose: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action HeatChill 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChill_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + required: + - vessel + - temp + - time + - stir + - stir_speed + - purpose + title: HeatChill_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChill_Result + type: object + required: + - goal + title: HeatChill + type: object + type: HeatChill + HeatChillStartProtocol: + feedback: {} + goal: + purpose: purpose + temp: temp + vessel: vessel + goal_default: + purpose: '' + temp: 0.0 + vessel: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action HeatChillStart 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChillStart_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + temp: + type: number + vessel: + type: string + required: + - vessel + - temp + - purpose + title: HeatChillStart_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStart_Result + type: object + required: + - goal + title: HeatChillStart + type: object + type: HeatChillStart HeatChillStopProtocol: - type: HeatChillStop + feedback: {} goal: vessel: vessel - feedback: {} - result: {} + goal_default: + vessel: '' handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action HeatChillStop 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: HeatChillStop_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + vessel: + type: string + required: + - vessel + title: HeatChillStop_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStop_Result + type: object + required: + - goal + title: HeatChillStop + type: object + type: HeatChillStop PumpTransferProtocol: - type: PumpTransfer + feedback: {} goal: - from_vessel: from_vessel - to_vessel: to_vessel - volume: volume amount: amount - time: time - viscous: viscous + from_vessel: from_vessel + rinsing_repeats: rinsing_repeats rinsing_solvent: rinsing_solvent rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats solid: solid - feedback: {} - result: {} + time: time + to_vessel: to_vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + from_vessel: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: '' + viscous: false + volume: 0.0 handles: input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: solvent - label: Rinsing Solvent - data_type: resource - data_source: handle - data_key: solvent + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Rinsing Solvent output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + result: {} + schema: + description: ROS Action PumpTransfer 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: PumpTransfer_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + amount: + type: string + from_vessel: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + time: + type: number + to_vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + title: PumpTransfer_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: PumpTransfer_Result + type: object + required: + - goal + title: PumpTransfer + type: object + type: PumpTransfer RunColumnProtocol: - type: RunColumn + feedback: {} goal: + column: column from_vessel: from_vessel to_vessel: to_vessel - column: column - feedback: {} - result: {} + goal_default: + column: '' + from_vessel: '' + to_vessel: '' handles: input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + result: {} + schema: + description: ROS Action RunColumn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: RunColumn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + column: + type: string + from_vessel: + type: string + to_vessel: + type: string + required: + - from_vessel + - to_vessel + - column + title: RunColumn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: RunColumn_Result + type: object + required: + - goal + title: RunColumn + type: object + type: RunColumn SeparateProtocol: - type: Separate + feedback: {} goal: - purpose: purpose - product_phase: product_phase from_vessel: from_vessel + product_phase: product_phase + purpose: purpose + repeats: repeats separation_vessel: separation_vessel - to_vessel: to_vessel - waste_phase_to_vessel: waste_phase_to_vessel + settling_time: settling_time solvent: solvent solvent_volume: solvent_volume + stir_speed: stir_speed + stir_time: stir_time through: through - repeats: repeats - stir_time: stir_time - stir_speed: stir_speed - settling_time: settling_time - feedback: {} - result: {} - handles: - input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent - output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - StartStirProtocol: - type: StartStir - goal: - vessel: vessel - stir_speed: stir_speed - purpose: purpose - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - StirProtocol: - type: Stir - goal: - stir_time: stir_time - stir_speed: stir_speed - settling_time: settling_time - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - StopStirProtocol: - type: StopStir - goal: - vessel: vessel - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - TransferProtocol: - type: Transfer - goal: - from_vessel: from_vessel to_vessel: to_vessel - volume: volume + waste_phase_to_vessel: waste_phase_to_vessel + goal_default: + from_vessel: '' + product_phase: '' + purpose: '' + repeats: 0 + separation_vessel: '' + settling_time: 0.0 + solvent: '' + solvent_volume: 0.0 + stir_speed: 0.0 + stir_time: 0.0 + through: '' + to_vessel: '' + waste_phase_to_vessel: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + output: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + result: {} + schema: + description: ROS Action Separate 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Separate_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + from_vessel: + type: string + product_phase: + type: string + purpose: + type: string + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + separation_vessel: + type: string + settling_time: + type: number + solvent: + type: string + solvent_volume: + type: number + stir_speed: + type: number + stir_time: + type: number + through: + type: string + to_vessel: + type: string + waste_phase_to_vessel: + type: string + required: + - purpose + - product_phase + - from_vessel + - separation_vessel + - to_vessel + - waste_phase_to_vessel + - solvent + - solvent_volume + - through + - repeats + - stir_time + - stir_speed + - settling_time + title: Separate_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Separate_Result + type: object + required: + - goal + title: Separate + type: object + type: Separate + StartStirProtocol: + feedback: {} + goal: + purpose: purpose + stir_speed: stir_speed + vessel: vessel + goal_default: + purpose: '' + stir_speed: 0.0 + vessel: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action StartStir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_speed: + type: number + current_status: + type: string + progress: + type: number + required: + - progress + - current_speed + - current_status + title: StartStir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + purpose: + type: string + stir_speed: + type: number + vessel: + type: string + required: + - vessel + - stir_speed + - purpose + title: StartStir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StartStir_Result + type: object + required: + - goal + title: StartStir + type: object + type: StartStir + StirProtocol: + feedback: {} + goal: + settling_time: settling_time + stir_speed: stir_speed + stir_time: stir_time + goal_default: + settling_time: 0.0 + stir_speed: 0.0 + stir_time: 0.0 + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action Stir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + status: + type: string + required: + - status + title: Stir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + settling_time: + type: number + stir_speed: + type: number + stir_time: + type: number + required: + - stir_time + - stir_speed + - settling_time + title: Stir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Stir_Result + type: object + required: + - goal + title: Stir + type: object + type: Stir + StopStirProtocol: + feedback: {} + goal: + vessel: vessel + goal_default: + vessel: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action StopStir 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + progress: + type: number + required: + - progress + - current_status + title: StopStir_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + vessel: + type: string + required: + - vessel + title: StopStir_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StopStir_Result + type: object + required: + - goal + title: StopStir + type: object + type: StopStir + TransferProtocol: + feedback: {} + goal: amount: amount - time: time - viscous: viscous + from_vessel: from_vessel + rinsing_repeats: rinsing_repeats rinsing_solvent: rinsing_solvent rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats solid: solid - feedback: {} - result: {} + time: time + to_vessel: to_vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + from_vessel: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: '' + viscous: false + volume: 0.0 handles: input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: solvent - label: Rinsing Solvent - data_type: resource - data_source: handle - data_key: solvent + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Rinsing Solvent output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + result: {} + schema: + description: ROS Action Transfer 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + progress: + type: number + transferred_volume: + type: number + required: + - progress + - transferred_volume + - current_status + title: Transfer_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + amount: + type: string + from_vessel: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + time: + type: number + to_vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + title: Transfer_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Transfer_Result + type: object + required: + - goal + title: Transfer + type: object + type: Transfer WashSolidProtocol: - type: WashSolid + feedback: {} goal: - vessel: vessel - solvent: solvent - volume: volume filtrate_vessel: filtrate_vessel - temp: temp + repeats: repeats + solvent: solvent stir: stir stir_speed: stir_speed + temp: temp time: time - repeats: repeats - feedback: {} - result: {} + vessel: vessel + volume: volume + goal_default: + filtrate_vessel: '' + repeats: 0 + solvent: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' + volume: 0.0 handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent - - handler_key: filtrate_vessel - label: Filtrate Vessel - data_type: resource - data_source: executor - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + - data_key: vessel + data_source: executor + data_type: resource + handler_key: filtrate_vessel + label: Filtrate Vessel output: - - handler_key: vessel_out - label: Vessel Out - data_type: resource - data_source: handle - data_key: vessel - - handler_key: filtrate_vessel_out - label: Filtrate Vessel - data_type: resource - data_source: executor - data_key: vessel \ No newline at end of file + - data_key: vessel + data_source: handle + data_type: resource + handler_key: VesselOut + label: Vessel Out + - data_key: vessel + data_source: executor + data_type: resource + handler_key: filtrate_vessel_out + label: Filtrate Vessel + result: {} + schema: + description: ROS Action WashSolid 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: WashSolid_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + filtrate_vessel: + type: string + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + solvent: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string + volume: + type: number + required: + - vessel + - solvent + - volume + - filtrate_vessel + - temp + - stir + - stir_speed + - time + - repeats + title: WashSolid_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: WashSolid_Result + type: object + required: + - goal + title: WashSolid + type: object + type: WashSolid + auto-create_ros_action_server: + feedback: {} + goal: {} + goal_default: + action_name: null + action_value_mapping: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand create_ros_action_server 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand create_ros_action_server 的参数schema + properties: + action_name: + description: '参数: action_name' + type: string + action_value_mapping: + description: '参数: action_value_mapping' + type: string + required: + - action_name + - action_value_mapping + type: object + result: {} + required: + - goal + title: create_ros_action_server 命令参数 + type: object + type: UniLabJsonCommand + auto-execute_single_action: + feedback: {} + goal: {} + goal_default: + action_kwargs: null + action_name: null + device_id: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand execute_single_action 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand execute_single_action 的参数schema + properties: + action_kwargs: + description: '参数: action_kwargs' + type: string + action_name: + description: '参数: action_name' + type: string + device_id: + description: '参数: device_id' + type: string + required: + - device_id + - action_name + - action_kwargs + type: object + result: {} + required: + - goal + title: execute_single_action 命令参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize_device: + feedback: {} + goal: {} + goal_default: + device_config: null + device_id: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand initialize_device 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand initialize_device 的参数schema + properties: + device_config: + description: '参数: device_config' + type: string + device_id: + description: '参数: device_id' + type: string + required: + - device_id + - device_config + type: object + result: {} + required: + - goal + title: initialize_device 命令参数 + type: object + type: UniLabJsonCommand + module: unilabos.ros.nodes.presets.protocol_node:ROS2ProtocolNode + status_types: {} + type: ros2 + description: Workstation + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + args: + description: '参数: args' + type: string + children: + description: '参数: children' + type: object + device_id: + description: '参数: device_id' + type: string + kwargs: + description: '参数: kwargs' + type: string + protocol_type: + description: '参数: protocol_type' + type: string + resource_tracker: + description: '参数: resource_tracker' + type: string + required: + - device_id + - children + - protocol_type + - resource_tracker + - args + - kwargs + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/devices/zhida_hplc.yaml b/unilabos/registry/devices/zhida_hplc.yaml index 1aed8a27..79183868 100644 --- a/unilabos/registry/devices/zhida_hplc.yaml +++ b/unilabos/registry/devices/zhida_hplc.yaml @@ -1,27 +1,239 @@ zhida_hplc: - description: Zhida HPLC class: - module: unilabos.devices.zhida_hplc.zhida:ZhidaClient - type: python - status_types: - status: String action_value_mappings: + abort: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + auto-abort: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand abort 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand abort 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: abort 命令参数 + type: object + type: UniLabJsonCommand + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand close 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand close 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close 命令参数 + type: object + type: UniLabJsonCommand + auto-connect: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: UniLabJsonCommand connect 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand connect 的参数schema + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: connect 命令参数 + type: object + type: UniLabJsonCommand + auto-start: + feedback: {} + goal: {} + goal_default: + text: null + handles: [] + result: {} + schema: + description: UniLabJsonCommand start 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand start 的参数schema + properties: + text: + description: '参数: text' + type: string + required: + - text + type: object + result: {} + required: + - goal + title: start 命令参数 + type: object + type: UniLabJsonCommand + get_methods: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: ROS Action EmptyIn 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn start: - type: StrSingleInput + feedback: {} goal: string: string - feedback: {} + goal_default: + string: '' + handles: [] result: {} - abort: - type: EmptyIn - goal: {} - feedback: {} - result: {} - get_methods: - type: EmptyIn - goal: {} - feedback: {} - result: {} - - schema: - properties: {} \ No newline at end of file + schema: + description: ROS Action StrSingleInput 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.zhida_hplc.zhida:ZhidaClient + status_types: + methods: dict + status: dict + type: python + description: Zhida HPLC + handles: [] + icon: '' + init_param_schema: + description: UniLabJsonCommand __init__ 的参数schema + properties: + feedback: {} + goal: + description: UniLabJsonCommand __init__ 的参数schema + properties: + host: + default: 192.168.1.47 + description: '参数: host' + type: string + port: + default: 5792 + description: '参数: port' + type: integer + timeout: + default: 10.0 + description: '参数: timeout' + type: number + required: [] + type: object + result: {} + required: + - goal + title: __init__ 命令参数 + type: object diff --git a/unilabos/registry/registry.py b/unilabos/registry/registry.py index 03d48997..d47663e1 100644 --- a/unilabos/registry/registry.py +++ b/unilabos/registry/registry.py @@ -1,14 +1,17 @@ +import copy import io import os import sys from pathlib import Path -from typing import Any +from typing import Any, Dict, List import yaml -from unilabos.ros.msgs.message_converter import msg_converter_manager, ros_action_to_json_schema +from unilabos.ros.msgs.message_converter import msg_converter_manager, ros_action_to_json_schema, String from unilabos.utils import logger from unilabos.utils.decorator import singleton +from unilabos.utils.import_manager import get_enhanced_class_info +from unilabos.utils.type_check import NoAliasDumper DEFAULT_PATHS = [Path(__file__).absolute().parent] @@ -32,7 +35,7 @@ class Registry: # 其他状态变量 # self.is_host_mode = False # 移至BasicConfig中 - def setup(self): + def setup(self, complete_registry=False): # 检查是否已调用过setup if self._setup_called: logger.critical("[UniLab Registry] setup方法已被调用过,不允许多次调用") @@ -86,13 +89,15 @@ class Registry: io.StringIO(get_yaml_from_goal_type(self.ResourceCreateFromOuterEasy.Goal)) ), "handles": { - "output": [{ - "handler_key": "labware", - "label": "Labware", - "data_type": "resource", - "data_source": "handle", - "data_key": "liquid" - }] + "output": [ + { + "handler_key": "labware", + "label": "Labware", + "data_type": "resource", + "data_source": "handle", + "data_key": "liquid", + } + ] }, }, "test_latency": { @@ -110,7 +115,6 @@ class Registry: "registry_type": "device", "handles": [], "init_param_schema": {}, - "schema": {"properties": {}, "additionalProperties": False, "type": "object"}, "file_path": "/", } } @@ -121,13 +125,13 @@ class Registry: sys_path = path.parent logger.debug(f"[UniLab Registry] Path {i+1}/{len(self.registry_paths)}: {sys_path}") sys.path.append(str(sys_path)) - self.load_device_types(path) - self.load_resource_types(path) + self.load_device_types(path, complete_registry) + self.load_resource_types(path, complete_registry) logger.info("[UniLab Registry] 注册表设置完成") # 标记setup已被调用 self._setup_called = True - def load_resource_types(self, path: os.PathLike): + def load_resource_types(self, path: os.PathLike, complete_registry: bool): abs_path = Path(path).absolute() resource_path = abs_path / "resources" files = list(resource_path.glob("*/*.yaml")) @@ -176,7 +180,14 @@ class Registry: if not type_name or type_name == "": logger.warning(f"[UniLab Registry] 设备 {device_id} 的 {field_name} 类型为空,跳过替换") return type_name - if "." in type_name: + convert_manager = { # 将python基本对象转为ros2基本对象 + "str": "String", + "bool": "Bool", + "int": "Int64", + "float": "Float64", + } + type_name = convert_manager.get(type_name, type_name) # 替换为ROS2类型 + if ":" in type_name: type_class = msg_converter_manager.get_class(type_name) else: type_class = msg_converter_manager.search_class(type_name) @@ -186,7 +197,74 @@ class Registry: logger.error(f"[UniLab Registry] 无法找到类型 '{type_name}' 用于设备 {device_id} 的 {field_name}") sys.exit(1) - def load_device_types(self, path: os.PathLike): + def _generate_unilab_json_command_schema( + self, method_args: List[Dict[str, Any]], method_name: str + ) -> Dict[str, Any]: + """ + 根据UniLabJsonCommand方法信息生成JSON Schema,暂不支持嵌套类型 + + Args: + method_args: 方法信息字典,包含args等 + method_name: 方法名称 + + Returns: + JSON Schema格式的参数schema + """ + schema = { + "description": f"UniLabJsonCommand {method_name} 的参数schema", + "type": "object", + "properties": {}, + "required": [], + } + + for arg_info in method_args: + param_name = arg_info.get("name", "") + param_type = arg_info.get("type") + param_default = arg_info.get("default") + param_required = arg_info.get("required", True) + + prop_schema = {"description": f"参数: {param_name}"} + + # 根据类型设置schema FIXME 不完整 + if param_type: + param_type_lower = param_type.lower() + if param_type_lower in ["str", "string"]: + prop_schema["type"] = "string" + elif param_type_lower in ["int", "integer"]: + prop_schema["type"] = "integer" + elif param_type_lower in ["float", "number"]: + prop_schema["type"] = "number" + elif param_type_lower in ["bool", "boolean"]: + prop_schema["type"] = "boolean" + elif param_type_lower in ["list", "array"]: + prop_schema["type"] = "array" + elif param_type_lower in ["dict", "object"]: + prop_schema["type"] = "object" + else: + # 默认为字符串类型 + prop_schema["type"] = "string" + else: + # 如果没有类型信息,默认为字符串 + prop_schema["type"] = "string" + + # 设置默认值 + if param_default is not None: + prop_schema["default"] = param_default + + schema["properties"][param_name] = prop_schema + + # 如果是必需参数,添加到required列表 + if param_required: + schema["required"].append(param_name) + return { + "title": f"{method_name} 命令参数", + "description": f"UniLabJsonCommand {method_name} 的参数schema", + "type": "object", + "properties": {"goal": schema, "feedback": {}, "result": {}}, + "required": ["goal"], + } + + def load_device_types(self, path: os.PathLike, complete_registry: bool): abs_path = Path(path).absolute() devices_path = abs_path / "devices" device_comms_path = abs_path / "device_comms" @@ -199,12 +277,18 @@ class Registry: from unilabos.app.web.utils.action_utils import get_yaml_from_goal_type for i, file in enumerate(files): - data = yaml.safe_load(open(file, encoding="utf-8")) + with open(file, encoding="utf-8", mode="r") as f: + data = yaml.safe_load(io.StringIO(f.read())) + complete_data = {} + action_str_type_mapping = { + "UniLabJsonCommand": "UniLabJsonCommand", + "UniLabJsonCommandAsync": "UniLabJsonCommandAsync", + } + status_str_type_mapping = {} if data: # 在添加到注册表前处理类型替换 for device_id, device_config in data.items(): # 添加文件路径信息 - 使用规范化的完整文件路径 - device_config["file_path"] = str(file.absolute()).replace("\\", "/") if "description" not in device_config: device_config["description"] = "" if "icon" not in device_config: @@ -213,42 +297,116 @@ class Registry: device_config["handles"] = [] if "init_param_schema" not in device_config: device_config["init_param_schema"] = {} - device_config["registry_type"] = "device" if "class" in device_config: - # 处理状态类型 - if "status_types" in device_config["class"]: - for status_name, status_type in device_config["class"]["status_types"].items(): - device_config["class"]["status_types"][status_name] = self._replace_type_with_class( - status_type, device_id, f"状态 {status_name}" - ) - - # 处理动作值映射 - if "action_value_mappings" in device_config["class"]: - for action_name, action_config in device_config["class"]["action_value_mappings"].items(): - if "handles" not in action_config: - action_config["handles"] = [] - if "type" in action_config: - action_config["type"] = self._replace_type_with_class( - action_config["type"], device_id, f"动作 {action_name}" + if "status_types" not in device_config["class"]: + device_config["class"]["status_types"] = {} + if "action_value_mappings" not in device_config["class"]: + device_config["class"]["action_value_mappings"] = {} + enhanced_info = {} + if complete_registry: + device_config["class"]["status_types"].clear() + enhanced_info = get_enhanced_class_info(device_config["class"]["module"], use_dynamic=True) + device_config["class"]["status_types"].update( + {k: v["return_type"] for k, v in enhanced_info["status_methods"].items()} + ) + for status_name, status_type in device_config["class"]["status_types"].items(): + if status_type in ["Any", "None", "Unknown"]: + status_type = "String" # 替换成ROS的String,便于显示 + device_config["class"]["status_types"][status_name] = status_type + target_type = self._replace_type_with_class(status_type, device_id, f"状态 {status_name}") + if target_type in [dict, list]: # 对于嵌套类型返回的对象,暂时处理成字符串,无法直接进行转换 + target_type = String + status_str_type_mapping[status_type] = target_type + device_config["class"]["status_types"] = dict( + sorted(device_config["class"]["status_types"].items()) + ) + if complete_registry: + device_config["class"]["action_value_mappings"] = {k:v for k, v in device_config["class"]["action_value_mappings"].items() if not k.startswith("auto-")} + # 处理动作值映射 + device_config["class"]["action_value_mappings"].update( + { + f"auto-{k}": { + "type": "UniLabJsonCommandAsync" if v["is_async"] else "UniLabJsonCommand", + "goal": {}, + "feedback": {}, + "result": {}, + "schema": self._generate_unilab_json_command_schema(v["args"], k), + "goal_default": {i["name"]: i["default"] for i in v["args"]}, + "handles": [], + } + for k, v in enhanced_info["action_methods"].items() + } + ) + device_config["init_param_schema"] = self._generate_unilab_json_command_schema( + enhanced_info["init_params"], "__init__" + ) + device_config.pop("schema", None) + device_config["class"]["action_value_mappings"] = dict( + sorted(device_config["class"]["action_value_mappings"].items()) + ) + for action_name, action_config in device_config["class"]["action_value_mappings"].items(): + if "handles" not in action_config: + action_config["handles"] = [] + if "type" in action_config: + action_type_str: str = action_config["type"] + # 通过Json发放指令,而不是通过特殊的ros action进行处理 + if not action_type_str.startswith("UniLabJsonCommand"): + target_type = self._replace_type_with_class( + action_type_str, device_id, f"动作 {action_name}" ) - if action_config["type"] is not None: + action_str_type_mapping[action_type_str] = target_type + if target_type is not None: action_config["goal_default"] = yaml.safe_load( - io.StringIO(get_yaml_from_goal_type(action_config["type"].Goal)) + io.StringIO(get_yaml_from_goal_type(target_type.Goal)) ) - action_config["schema"] = ros_action_to_json_schema(action_config["type"]) + action_config["schema"] = ros_action_to_json_schema(target_type) else: logger.warning( f"[UniLab Registry] 设备 {device_id} 的动作 {action_name} 类型为空,跳过替换" ) - - self.device_type_registry.update(data) - - for device_id in data.keys(): + complete_data[device_id] = copy.deepcopy(dict(sorted(device_config.items()))) # 稍后dump到文件 + for status_name, status_type in device_config["class"]["status_types"].items(): + device_config["class"]["status_types"][status_name] = status_str_type_mapping[status_type] + for action_name, action_config in device_config["class"]["action_value_mappings"].items(): + action_config["type"] = action_str_type_mapping[action_config["type"]] + for additional_action in ["_execute_driver_command", "_execute_driver_command_async"]: + device_config["class"]["action_value_mappings"][additional_action] = { + "type": self._replace_type_with_class( + "StrSingleInput", device_id, f"动作 {additional_action}" + ), + "goal": {"string": "string"}, + "feedback": {}, + "result": {}, + "schema": ros_action_to_json_schema( + self._replace_type_with_class( + "StrSingleInput", device_id, f"动作 {additional_action}" + ) + ), + "goal_default": yaml.safe_load( + io.StringIO( + get_yaml_from_goal_type( + self._replace_type_with_class( + "StrSingleInput", device_id, f"动作 {additional_action}" + ).Goal + ) + ) + ), + "handles": [], + } + if "registry_type" not in device_config: + device_config["registry_type"] = "device" + device_config["file_path"] = str(file.absolute()).replace("\\", "/") + device_config["registry_type"] = "device" logger.debug( f"[UniLab Registry] Device-{current_device_number} File-{i+1}/{len(files)} Add {device_id} " + f"[{data[device_id].get('name', '未命名设备')}]" ) current_device_number += 1 + complete_data = dict(sorted(complete_data.items())) + complete_data = copy.deepcopy(complete_data) + with open(file, "w", encoding="utf-8") as f: + yaml.dump(complete_data, f, allow_unicode=True, default_flow_style=False, Dumper=NoAliasDumper) + self.device_type_registry.update(data) else: logger.debug( f"[UniLab Registry] Device File-{i+1}/{len(files)} Not Valid YAML File: {file.absolute()}" @@ -257,7 +415,28 @@ class Registry: def obtain_registry_device_info(self): devices = [] for device_id, device_info in self.device_type_registry.items(): - msg = {"id": device_id, **device_info} + device_info_copy = copy.deepcopy(device_info) + if "class" in device_info_copy and "action_value_mappings" in device_info_copy["class"]: + action_mappings = device_info_copy["class"]["action_value_mappings"] + for action_name, action_config in action_mappings.items(): + if "schema" in action_config and action_config["schema"]: + schema = action_config["schema"] + # 确保schema结构存在 + if ( + "properties" in schema + and "goal" in schema["properties"] + and "properties" in schema["properties"]["goal"] + ): + schema["properties"]["goal"]["properties"] = { + "unilabos_device_id": { + "type": "string", + "default": "", + "description": "UniLabOS设备ID,用于指定执行动作的具体设备实例", + }, + **schema["properties"]["goal"]["properties"], + } + + msg = {"id": device_id, **device_info_copy} devices.append(msg) return devices @@ -273,7 +452,7 @@ class Registry: lab_registry = Registry() -def build_registry(registry_paths=None): +def build_registry(registry_paths=None, complete_registry=False): """ 构建或获取Registry单例实例 @@ -297,6 +476,6 @@ def build_registry(registry_paths=None): lab_registry.registry_paths.append(path) # 初始化注册表 - lab_registry.setup() + lab_registry.setup(complete_registry) return lab_registry diff --git a/unilabos/ros/device_node_wrapper.py b/unilabos/ros/device_node_wrapper.py index f6d071f5..51ff2171 100644 --- a/unilabos/ros/device_node_wrapper.py +++ b/unilabos/ros/device_node_wrapper.py @@ -55,7 +55,7 @@ def ros2_device_node( "read": "read_data", "extra_info": [], } - + # FIXME 后面要删除 for k, v in cls.__dict__.items(): if not k.startswith("_") and isinstance(v, property): # noinspection PyUnresolvedReferences diff --git a/unilabos/ros/msgs/message_converter.py b/unilabos/ros/msgs/message_converter.py index 2bcaadb0..940c4816 100644 --- a/unilabos/ros/msgs/message_converter.py +++ b/unilabos/ros/msgs/message_converter.py @@ -727,7 +727,6 @@ def ros_action_to_json_schema(action_class: Any) -> Dict[str, Any]: # 创建基础 schema schema = { - '$schema': 'http://json-schema.org/draft-07/schema#', 'title': action_class.__name__, 'description': f"ROS Action {action_class.__name__} 的 JSON Schema", 'type': 'object', diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index e119e214..4b7eb076 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -1,4 +1,5 @@ import copy +import io import json import threading import time @@ -10,6 +11,7 @@ from concurrent.futures import ThreadPoolExecutor import asyncio import rclpy +import yaml from rclpy.node import Node from rclpy.action import ActionServer, ActionClient from rclpy.action.server import ServerGoalHandle @@ -166,7 +168,10 @@ class PropertyPublisher: self.print_publish = print_publish self._value = None - self.publisher_ = node.create_publisher(msg_type, f"{name}", 10) + try: + self.publisher_ = node.create_publisher(msg_type, f"{name}", 10) + except AttributeError as ex: + logger.error(f"创建发布者失败,可能由于注册表有误,类型: {msg_type},错误: {ex}\n{traceback.format_exc()}") self.timer = node.create_timer(self.timer_period, self.publish_property) self.__loop = get_event_loop() str_msg_type = str(msg_type)[8:-2] @@ -302,6 +307,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): # 创建动作服务 if self.create_action_server: for action_name, action_value_mapping in self._action_value_mappings.items(): + if action_name.startswith("auto-"): + continue self.create_ros_action_server(action_name, action_value_mapping) # 创建线程池执行器 @@ -838,6 +845,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): class DeviceInitError(Exception): pass +class JsonCommandInitError(Exception): + pass class ROS2DeviceNode: """ @@ -954,12 +963,51 @@ class ROS2DeviceNode: self._ros_node: BaseROS2DeviceNode self._ros_node.lab_logger().info(f"初始化完成 {self._ros_node.uuid} {self.driver_is_ros}") self.driver_instance._ros_node = self._ros_node # type: ignore + self.driver_instance._execute_driver_command = self._execute_driver_command # type: ignore + self.driver_instance._execute_driver_command_async = self._execute_driver_command_async # type: ignore if hasattr(self.driver_instance, "post_init"): try: self.driver_instance.post_init(self._ros_node) # type: ignore except Exception as e: self._ros_node.lab_logger().error(f"设备后初始化失败: {e}") + def _execute_driver_command(self, string: str): + try: + target = json.loads(string) + except Exception as ex: + try: + target = yaml.safe_load(io.StringIO(string)) + except Exception as ex2: + raise JsonCommandInitError(f"执行动作时JSON/YAML解析失败: \n{ex}\n{ex2}\n原内容: {string}\n{traceback.format_exc()}") + try: + function_name = target["function_name"] + function_args = target["function_args"] + assert isinstance(function_args, dict), "执行动作时JSON必须为dict类型\n原JSON: {string}" + function = getattr(self.driver_instance, function_name) + assert callable(function), f"执行动作时JSON中的function_name对应的函数不可调用: {function_name}\n原JSON: {string}" + return function(**function_args) + except KeyError as ex: + raise JsonCommandInitError(f"执行动作时JSON缺少function_name或function_args: {ex}\n原JSON: {string}\n{traceback.format_exc()}") + + async def _execute_driver_command_async(self, string: str): + try: + target = json.loads(string) + except Exception as ex: + try: + target = yaml.safe_load(io.StringIO(string)) + except Exception as ex2: + raise JsonCommandInitError(f"执行动作时JSON/YAML解析失败: \n{ex}\n{ex2}\n原内容: {string}\n{traceback.format_exc()}") + try: + function_name = target["function_name"] + function_args = target["function_args"] + assert isinstance(function_args, dict), "执行动作时JSON必须为dict类型\n原JSON: {string}" + function = getattr(self.driver_instance, function_name) + assert callable(function), f"执行动作时JSON中的function_name对应的函数不可调用: {function_name}\n原JSON: {string}" + assert asyncio.iscoroutinefunction(function), f"执行动作时JSON中的function并非异步: {function_name}\n原JSON: {string}" + return await function(**function_args) + except KeyError as ex: + raise JsonCommandInitError(f"执行动作时JSON缺少function_name或function_args: {ex}\n原JSON: {string}\n{traceback.format_exc()}") + def _start_loop(self): def run_event_loop(): loop = asyncio.new_event_loop() diff --git a/unilabos/ros/nodes/presets/camera.py b/unilabos/ros/nodes/presets/camera.py new file mode 100644 index 00000000..e161671f --- /dev/null +++ b/unilabos/ros/nodes/presets/camera.py @@ -0,0 +1,61 @@ +import rclpy +from rclpy.node import Node +import cv2 +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode, DeviceNodeResourceTracker + +class VideoPublisher(BaseROS2DeviceNode): + def __init__(self, device_id='video_publisher', camera_index=0, period: float = 0.1, resource_tracker: DeviceNodeResourceTracker = None): + # 初始化BaseROS2DeviceNode,使用自身作为driver_instance + BaseROS2DeviceNode.__init__( + self, + driver_instance=self, + device_id=device_id, + status_types={}, + action_value_mappings={}, + hardware_interface="camera", + print_publish=False, + resource_tracker=resource_tracker, + ) + # 创建一个发布者,发布到 /video 话题,消息类型为 sensor_msgs/Image,队列长度设为 10 + self.publisher_ = self.create_publisher(Image, f'/{device_id}/video', 10) + # 初始化摄像头(默认设备索引为 0) + self.cap = cv2.VideoCapture(camera_index) + if not self.cap.isOpened(): + self.get_logger().error("无法打开摄像头") + # 用于将 OpenCV 的图像转换为 ROS 图像消息 + self.bridge = CvBridge() + # 设置定时器,10 Hz 发布一次 + timer_period = period # 单位:秒 + self.timer = self.create_timer(timer_period, self.timer_callback) + + def timer_callback(self): + ret, frame = self.cap.read() + if not ret: + self.get_logger().error("读取视频帧失败") + return + # 将 OpenCV 图像转换为 ROS Image 消息,注意图像编码需与摄像头数据匹配,这里使用 bgr8 + img_msg = self.bridge.cv2_to_imgmsg(frame, encoding="bgr8") + self.publisher_.publish(img_msg) + # self.get_logger().info("已发布视频帧") + + def destroy_node(self): + # 释放摄像头资源 + if self.cap.isOpened(): + self.cap.release() + super().destroy_node() + +def main(args=None): + rclpy.init(args=args) + node = VideoPublisher() + try: + rclpy.spin(node) + except KeyboardInterrupt: + pass + finally: + node.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + main() diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index 66651651..0cb3db76 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -459,6 +459,8 @@ class HostNode(BaseROS2DeviceNode): self.devices_instances[device_id] = d # noinspection PyProtectedMember for action_name, action_value_mapping in d._ros_node._action_value_mappings.items(): + if action_name.startswith("auto-"): + continue action_id = f"/devices/{device_id}/{action_name}" if action_id not in self._action_clients: action_type = action_value_mapping["type"] @@ -567,6 +569,7 @@ class HostNode(BaseROS2DeviceNode): def send_goal( self, device_id: str, + action_type: str, action_name: str, action_kwargs: Dict[str, Any], goal_uuid: Optional[str] = None, @@ -577,11 +580,26 @@ class HostNode(BaseROS2DeviceNode): Args: device_id: 设备ID + action_type: 动作类型 action_name: 动作名称 action_kwargs: 动作参数 goal_uuid: 目标UUID,如果为None则自动生成 + server_info: 服务器发送信息,包含发送时间戳等 """ - action_id = f"/devices/{device_id}/{action_name}" + if action_type.startswith("UniLabJsonCommand"): + if action_name.startswith("auto-"): + action_name = action_name[5:] + action_id = f"/devices/{device_id}/_execute_driver_command" + action_kwargs = { + "string": json.dumps({ + "function_name": action_name, + "function_args": action_kwargs, + }) + } + if action_type.startswith("UniLabJsonCommandAsync"): + action_id = f"/devices/{device_id}/_execute_driver_command_async" + else: + action_id = f"/devices/{device_id}/{action_name}" if action_name == "test_latency" and server_info is not None: self.server_latest_timestamp = server_info.get("send_timestamp", 0.0) if action_id not in self._action_clients: diff --git a/unilabos/ros/nodes/presets/protocol_node.py b/unilabos/ros/nodes/presets/protocol_node.py index 4da8c62d..f8921dad 100644 --- a/unilabos/ros/nodes/presets/protocol_node.py +++ b/unilabos/ros/nodes/presets/protocol_node.py @@ -1,7 +1,5 @@ import time -import asyncio import traceback -from types import MethodType from typing import Union import rclpy @@ -19,9 +17,11 @@ from unilabos.ros.msgs.message_converter import ( get_action_type, convert_to_ros_msg, convert_from_ros_msg, - convert_from_ros_msg_with_mapping, + convert_from_ros_msg_with_mapping, String, ) 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 class ROS2ProtocolNode(BaseROS2DeviceNode): @@ -33,7 +33,15 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): # create_action_server = False # Action Server要自己创建 - def __init__(self, device_id: str, children: dict, protocol_type: Union[str, list[str]], resource_tracker: DeviceNodeResourceTracker, *args, **kwargs): + def __init__( + self, + device_id: str, + children: dict, + protocol_type: Union[str, list[str]], + resource_tracker: DeviceNodeResourceTracker, + *args, + **kwargs, + ): self._setup_protocol_names(protocol_type) # 初始化其它属性 @@ -60,12 +68,14 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): for device_id, device_config in self.children.items(): if device_config.get("type", "device") != "device": - self.lab_logger().debug(f"[Protocol Node] Skipping type {device_config['type']} {device_id} already existed, skipping.") + self.lab_logger().debug( + f"[Protocol Node] Skipping type {device_config['type']} {device_id} already existed, skipping." + ) continue try: d = self.initialize_device(device_id, device_config) except Exception as ex: - self.lab_logger().error(f"[Protocol Node] Failed to initialize device {device_id}: {ex}") + self.lab_logger().error(f"[Protocol Node] Failed to initialize device {device_id}: {ex}\n{traceback.format_exc()}") d = None if d is None: continue @@ -76,22 +86,27 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): # 设置硬件接口代理 if d: + hardware_interface = d.ros_node_instance._hardware_interface if ( - hasattr(d.driver_instance, d.ros_node_instance._hardware_interface["name"]) - and hasattr(d.driver_instance, d.ros_node_instance._hardware_interface["write"]) - and (d.ros_node_instance._hardware_interface["read"] is None or hasattr(d.driver_instance, d.ros_node_instance._hardware_interface["read"])) + hasattr(d.driver_instance, hardware_interface["name"]) + and hasattr(d.driver_instance, hardware_interface["write"]) + and (hardware_interface["read"] is None or hasattr(d.driver_instance, hardware_interface["read"])) ): - name = getattr(d.driver_instance, d.ros_node_instance._hardware_interface["name"]) - read = d.ros_node_instance._hardware_interface.get("read", None) - write = d.ros_node_instance._hardware_interface.get("write", None) + name = getattr(d.driver_instance, hardware_interface["name"]) + read = hardware_interface.get("read", None) + write = hardware_interface.get("write", None) # 如果硬件接口是字符串,通过通信设备提供 if isinstance(name, str) and name in self.sub_devices: communicate_device = self.sub_devices[name] communicate_hardware_info = communicate_device.ros_node_instance._hardware_interface self._setup_hardware_proxy(d, self.sub_devices[name], read, write) - self.lab_logger().info(f"\n通信代理:为子设备{device_id}\n 添加了{read}方法(来源:{name} {communicate_hardware_info['write']}) \n 添加了{write}方法(来源:{name} {communicate_hardware_info['read']})") + self.lab_logger().info( + f"\n通信代理:为子设备{device_id}\n " + f"添加了{read}方法(来源:{name} {communicate_hardware_info['write']}) \n " + f"添加了{write}方法(来源:{name} {communicate_hardware_info['read']})" + ) def _setup_protocol_names(self, protocol_type): # 处理协议类型 @@ -119,11 +134,17 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): if d is not None and hasattr(d, "ros_node_instance"): node = d.ros_node_instance for action_name, action_mapping in node._action_value_mappings.items(): + if action_name.startswith("auto-"): + continue action_id = f"/devices/{device_id_abs}/{action_name}" if action_id not in self._action_clients: - self._action_clients[action_id] = ActionClient( - self, action_mapping["type"], action_id, callback_group=self.callback_group - ) + try: + self._action_clients[action_id] = ActionClient( + self, action_mapping["type"], action_id, callback_group=self.callback_group + ) + except Exception as ex: + self.lab_logger().error(f"创建动作客户端失败: {action_id}, 错误: {ex}") + continue self.lab_logger().debug(f"为子设备 {device_id} 创建动作客户端: {action_name}") return d @@ -149,63 +170,126 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): def _create_protocol_execute_callback(self, protocol_name, protocol_steps_generator): async def execute_protocol(goal_handle: ServerGoalHandle): """执行完整的工作流""" - self.get_logger().info(f'Executing {protocol_name} action...') + # 初始化结果信息变量 + execution_error = "" + execution_success = False + protocol_return_value = None + self.get_logger().info(f"Executing {protocol_name} action...") action_value_mapping = self._action_value_mappings[protocol_name] - print('+'*30) - print(protocol_steps_generator) - # 从目标消息中提取参数, 并调用Protocol生成器(根据设备连接图)生成action步骤 - goal = goal_handle.request - protocol_kwargs = convert_from_ros_msg_with_mapping(goal, action_value_mapping["goal"]) + try: + print("+" * 30) + print(protocol_steps_generator) + # 从目标消息中提取参数, 并调用Protocol生成器(根据设备连接图)生成action步骤 + goal = goal_handle.request + protocol_kwargs = convert_from_ros_msg_with_mapping(goal, action_value_mapping["goal"]) - # 向Host查询物料当前状态 - for k, v in goal.get_fields_and_field_types().items(): - if v in ["unilabos_msgs/Resource", "sequence"]: - r = ResourceGet.Request() - r.id = protocol_kwargs[k]["id"] if v == "unilabos_msgs/Resource" else protocol_kwargs[k][0]["id"] - r.with_children = True - response = await self._resource_clients["resource_get"].call_async(r) - protocol_kwargs[k] = list_to_nested_dict([convert_from_ros_msg(rs) for rs in response.resources]) + # 向Host查询物料当前状态 + for k, v in goal.get_fields_and_field_types().items(): + if v in ["unilabos_msgs/Resource", "sequence"]: + r = ResourceGet.Request() + resource_id = ( + protocol_kwargs[k]["id"] if v == "unilabos_msgs/Resource" else protocol_kwargs[k][0]["id"] + ) + r.id = resource_id + r.with_children = True + response = await self._resource_clients["resource_get"].call_async(r) + protocol_kwargs[k] = list_to_nested_dict( + [convert_from_ros_msg(rs) for rs in response.resources] + ) - from unilabos.resources.graphio import physical_setup_graph - self.get_logger().info(f'Working on physical setup: {physical_setup_graph}') - protocol_steps = protocol_steps_generator(G=physical_setup_graph, **protocol_kwargs) + from unilabos.resources.graphio import physical_setup_graph - self.get_logger().info(f'Goal received: {protocol_kwargs}, running steps: \n{protocol_steps}') + self.lab_logger().info(f"Working on physical setup: {physical_setup_graph}") + protocol_steps = protocol_steps_generator(G=physical_setup_graph, **protocol_kwargs) - time_start = time.time() - time_overall = 100 - self._busy = True + self.lab_logger().info(f"Goal received: {protocol_kwargs}, running steps: \n{protocol_steps}") - # 逐步执行工作流 - for i, action in enumerate(protocol_steps): - self.get_logger().info(f'Running step {i+1}: {action}') - if type(action) == dict: - # 如果是单个动作,直接执行 - if action["action_name"] == "wait": - time.sleep(action["action_kwargs"]["time"]) - else: - result = await self.execute_single_action(**action) - elif type(action) == list: - # 如果是并行动作,同时执行 - actions = action - futures = [rclpy.get_global_executor().create_task(self.execute_single_action(**a)) for a in actions] - results = [await f for f in futures] + time_start = time.time() + time_overall = 100 + self._busy = True - # 向Host更新物料当前状态 - for k, v in goal.get_fields_and_field_types().items(): - if v in ["unilabos_msgs/Resource", "sequence"]: - r = ResourceUpdate.Request() - r.resources = [ - convert_to_ros_msg(Resource, rs) for rs in nested_dict_to_list(protocol_kwargs[k]) - ] - response = await self._resource_clients["resource_update"].call_async(r) + # 逐步执行工作流 + step_results = [] + for i, action in enumerate(protocol_steps): + self.get_logger().info(f"Running step {i + 1}: {action}") + if isinstance(action, dict): + # 如果是单个动作,直接执行 + if action["action_name"] == "wait": + time.sleep(action["action_kwargs"]["time"]) + step_results.append({"step": i + 1, "action": "wait", "result": "completed"}) + else: + result = await self.execute_single_action(**action) + step_results.append({"step": i + 1, "action": action["action_name"], "result": result}) + elif isinstance(action, list): + # 如果是并行动作,同时执行 + actions = action + futures = [ + rclpy.get_global_executor().create_task(self.execute_single_action(**a)) for a in actions + ] + results = [await f for f in futures] + step_results.append( + { + "step": i + 1, + "parallel_actions": [a["action_name"] for a in actions], + "results": results, + } + ) - goal_handle.succeed() + # 向Host更新物料当前状态 + for k, v in goal.get_fields_and_field_types().items(): + if v in ["unilabos_msgs/Resource", "sequence"]: + r = ResourceUpdate.Request() + r.resources = [ + convert_to_ros_msg(Resource, rs) for rs in nested_dict_to_list(protocol_kwargs[k]) + ] + response = await self._resource_clients["resource_update"].call_async(r) + + # 设置成功状态和返回值 + execution_success = True + protocol_return_value = { + "protocol_name": protocol_name, + "steps_executed": len(protocol_steps), + "step_results": step_results, + "total_time": time.time() - time_start, + } + + goal_handle.succeed() + + except Exception as e: + # 捕获并记录错误信息 + execution_error = traceback.format_exc() + execution_success = False + error(f"协议 {protocol_name} 执行失败") + error(traceback.format_exc()) + self.lab_logger().error(f"协议执行出错: {str(e)}") + + # 设置动作失败 + goal_handle.abort() + + finally: + self._busy = False + + # 创建结果消息 result = action_value_mapping["type"].Result() - result.success = True + result.success = execution_success - self._busy = False + # 获取结果消息类型信息,检查是否有return_info字段 + result_msg_types = action_value_mapping["type"].Result.get_fields_and_field_types() + + # 设置return_info字段(如果存在) + for attr_name in result_msg_types.keys(): + if attr_name in ["success", "reached_goal"]: + setattr(result, attr_name, execution_success) + elif attr_name == "return_info": + setattr( + result, + attr_name, + serialize_result_info(execution_error, execution_success, protocol_return_value), + ) + + self.lab_logger().info(f"协议 {protocol_name} 完成并返回结果") return result + return execute_protocol async def execute_single_action(self, device_id, action_name, action_kwargs): @@ -241,14 +325,19 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): return result_future.result - """还没有改过的部分""" - def _setup_hardware_proxy(self, device: ROS2DeviceNode, communication_device: ROS2DeviceNode, read_method, write_method): + def _setup_hardware_proxy( + self, device: ROS2DeviceNode, communication_device: ROS2DeviceNode, read_method, write_method + ): """为设备设置硬件接口代理""" # extra_info = [getattr(device.driver_instance, info) for info in communication_device.ros_node_instance._hardware_interface.get("extra_info", [])] - write_func = getattr(communication_device.driver_instance, communication_device.ros_node_instance._hardware_interface["write"]) - read_func = getattr(communication_device.driver_instance, communication_device.ros_node_instance._hardware_interface["read"]) + write_func = getattr( + communication_device.driver_instance, communication_device.ros_node_instance._hardware_interface["write"] + ) + read_func = getattr( + communication_device.driver_instance, communication_device.ros_node_instance._hardware_interface["read"] + ) def _read(*args, **kwargs): return read_func(*args, **kwargs) @@ -264,7 +353,6 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): # bound_write = MethodType(_write, device.driver_instance) setattr(device.driver_instance, write_method, _write) - async def _update_resources(self, goal, protocol_kwargs): """更新资源状态""" for k, v in goal.get_fields_and_field_types().items(): diff --git a/unilabos/utils/import_manager.py b/unilabos/utils/import_manager.py index 17c69d20..d04aca6a 100644 --- a/unilabos/utils/import_manager.py +++ b/unilabos/utils/import_manager.py @@ -7,7 +7,11 @@ import builtins import importlib import inspect +import sys import traceback +import ast +import os +from pathlib import Path from typing import Dict, List, Any, Optional, Callable, Type @@ -18,8 +22,12 @@ __all__ = [ "get_class", "get_module", "init_from_list", + "get_class_info_static", + "get_registry_class_info", ] +from ast import Constant + from unilabos.utils import logger @@ -114,15 +122,16 @@ class ImportManager: # 尝试动态导入 if ":" in class_name: module_path, cls_name = class_name.rsplit(":", 1) - # 如果cls_name是builtins中的关键字,则返回对应类 - if cls_name in builtins.__dict__: - return builtins.__dict__[cls_name] module = self.load_module(module_path) if hasattr(module, cls_name): cls = getattr(module, cls_name) self._classes[class_name] = cls self._classes[cls_name] = cls return cls + else: + # 如果cls_name是builtins中的关键字,则返回对应类 + if class_name in builtins.__dict__: + return builtins.__dict__[class_name] raise KeyError(f"找不到类: {class_name}") @@ -149,6 +158,9 @@ class ImportManager: Returns: 找到的类对象,如果未找到则返回None """ + # 如果cls_name是builtins中的关键字,则返回对应类 + if class_name in builtins.__dict__: + return builtins.__dict__[class_name] # 首先在已索引的类中查找 if class_name in self._classes: return self._classes[class_name] @@ -161,7 +173,9 @@ class ImportManager: # 遍历所有已加载的模块进行搜索 for module_path, module in self._modules.items(): for name, obj in inspect.getmembers(module): - if inspect.isclass(obj) and ((name.lower() == class_name.lower()) if search_lower else (name == class_name)): + if inspect.isclass(obj) and ( + (name.lower() == class_name.lower()) if search_lower else (name == class_name) + ): # 将找到的类添加到索引中 self._classes[name] = obj self._classes[f"{module_path}:{name}"] = obj @@ -169,6 +183,590 @@ class ImportManager: return None + def get_enhanced_class_info(self, module_path: str, use_dynamic: bool = True) -> Dict[str, Any]: + """ + 获取增强的类信息,支持动态导入和静态分析 + + Args: + module_path: 模块路径,格式为 "module.path" 或 "module.path:ClassName" + use_dynamic: 是否优先使用动态导入 + + Returns: + 包含详细类信息的字典 + """ + result = { + "module_path": module_path, + "dynamic_import_success": False, + "static_analysis_success": False, + "init_params": {}, + "status_methods": {}, # get_ 开头和 @property 方法 + "action_methods": {}, # set_ 开头和其他非_开头方法 + } + + # 尝试动态导入 + dynamic_info = None + static_info = None + if use_dynamic: + try: + dynamic_info = self._get_dynamic_class_info(module_path) + result["dynamic_import_success"] = True + logger.debug(f"[ImportManager] 动态导入类 {module_path} 成功") + except Exception as e: + logger.warning( + f"[UniLab Registry] 在补充注册表时,动态导入类 " + f"{module_path} 失败(将使用静态分析," + f"建议修复导入错误,以实现更好的注册表识别效果!): {e}" + ) + use_dynamic = False + if not use_dynamic: + # 尝试静态分析 + try: + static_info = self._get_static_class_info(module_path) + result["static_analysis_success"] = True + logger.debug(f"[ImportManager] 静态分析类 {module_path} 成功") + except Exception as e: + logger.warning(f"[ImportManager] 静态分析类 {module_path} 失败: {e}") + + # 合并信息(优先使用动态导入的信息) + if dynamic_info: + result.update(dynamic_info) + elif static_info: + result.update(static_info) + + return result + + def _get_dynamic_class_info(self, class_path: str) -> Dict[str, Any]: + """使用inspect模块动态获取类信息""" + cls = get_class(class_path) + class_name = cls.__name__ + + result = { + "class_name": class_name, + "init_params": [], + "status_methods": {}, + "action_methods": {}, + } + + init_signature = inspect.signature(cls.__init__) + for param_name, param in init_signature.parameters.items(): + if param_name == "self": + continue + + # 先获取注解类型 + param_type = self._get_type_string(param.annotation) + param_default = None if param.default == inspect.Parameter.empty else param.default + + # 如果type为Any或None,尝试用default的类型推断 + if param_type in ["Any", "None"]: + if param.default != inspect.Parameter.empty and param.default is not None: + default_type = type(param.default) + param_type = self._get_type_string(default_type) + + param_info = { + "name": param_name, + "type": param_type, + "required": param.default == inspect.Parameter.empty, + "default": param_default, + } + result["init_params"].append(param_info) + + # 分析类的所有成员 + for name, method in cls.__dict__.items(): + if name.startswith("_"): + continue + + # 检查是否是property + if isinstance(method, property): + # @property 装饰的方法 + # noinspection PyTypeChecker + return_type = self._get_return_type_from_method(method.fget) if method.fget else "Any" + prop_info = { + "name": name, + "return_type": return_type, + } + result["status_methods"][name] = prop_info + + # 检查是否有对应的setter + if method.fset: + setter_info = self._analyze_method_signature(method.fset) + result["action_methods"][name] = setter_info + + elif inspect.ismethod(method) or inspect.isfunction(method): + if name.startswith("get_"): + actual_name = name[4:] # 去掉get_前缀 + if actual_name in result["status_methods"]: + continue + # get_ 开头的方法归类为status + method_info = self._analyze_method_signature(method) + result["status_methods"][actual_name] = method_info + elif not name.startswith("_"): + # 其他非_开头的方法归类为action + method_info = self._analyze_method_signature(method) + result["action_methods"][name] = method_info + + return result + + def _get_static_class_info(self, module_path: str) -> Dict[str, Any]: + """使用AST静态分析获取类信息""" + module_name, class_name = module_path.rsplit(":", 1) + # 将模块路径转换为文件路径 + file_path = self._module_path_to_file_path(module_name) + if not file_path or not os.path.exists(file_path): + raise FileNotFoundError(f"找不到模块文件: {module_name} -> {file_path}") + + with open(file_path, "r", encoding="utf-8") as f: + source_code = f.read() + + tree = ast.parse(source_code) + + # 查找目标类 + target_class = None + for node in ast.walk(tree): + if isinstance(node, ast.ClassDef): + if node.name == class_name: + target_class = node + break + + if target_class is None: + raise AttributeError(f"在文件 {file_path} 中找不到类 {class_name}") + + result = { + "class_name": class_name, + "init_params": {}, + "status_methods": {}, + "action_methods": {}, + } + + # 分析类的方法 + for node in target_class.body: + if isinstance(node, ast.FunctionDef): + method_info = self._analyze_method_node(node) + method_name = node.name + if method_name == "__init__": + result["init_params"] = method_info["args"] + elif method_name.startswith("_"): + continue + elif self._is_property_method(node): + # @property 装饰的方法 + result["status_methods"][method_name] = method_info + elif method_name.startswith("get_"): + # get_ 开头的方法归类为status + actual_name = method_name[4:] # 去掉get_前缀 + if actual_name not in result["status_methods"]: + result["status_methods"][actual_name] = method_info + else: + # 其他非_开头的方法归类为action + result["action_methods"][method_name] = method_info + return result + + def _analyze_method_signature(self, method) -> Dict[str, Any]: + """ + 分析方法签名,提取具体的命名参数信息 + + 注意:此方法会跳过*args和**kwargs,只提取具体的命名参数 + 这样可以确保通过**dict方式传参时的准确性 + + 示例用法: + method_info = self._analyze_method_signature(some_method) + params = {"param1": "value1", "param2": "value2"} + result = some_method(**params) # 安全的参数传递 + """ + signature = inspect.signature(method) + args = [] + num_required = 0 + + for param_name, param in signature.parameters.items(): + # 跳过self参数 + if param_name == "self": + continue + + # 跳过*args和**kwargs参数 + if param.kind == param.VAR_POSITIONAL: # *args + continue + if param.kind == param.VAR_KEYWORD: # **kwargs + continue + + is_required = param.default == inspect.Parameter.empty + if is_required: + num_required += 1 + + args.append( + { + "name": param_name, + "type": self._get_type_string(param.annotation), + "required": is_required, + "default": None if param.default == inspect.Parameter.empty else param.default, + } + ) + + return { + "name": method.__name__, + "args": args, + "return_type": self._get_type_string(signature.return_annotation), + "is_async": inspect.iscoroutinefunction(method), + } + + def _get_return_type_from_method(self, method) -> str: + """从方法中获取返回类型""" + signature = inspect.signature(method) + return self._get_type_string(signature.return_annotation) + + def _get_type_string(self, annotation) -> str: + """将类型注解转换为Class Library中可搜索的类名""" + if annotation == inspect.Parameter.empty: + return "Any" # 如果没有注解,返回Any + if annotation is None: + return "None" # 明确的None类型 + if hasattr(annotation, "__origin__"): + # 处理typing模块的类型 + origin = annotation.__origin__ + if origin in (list, set, tuple): + if hasattr(annotation, "__args__") and annotation.__args__: + if len(annotation.__args__): + arg0 = annotation.__args__[0] + if isinstance(arg0, int): + return "Int64MultiArray" + elif isinstance(arg0, float): + return "Float64MultiArray" + return "list" + elif origin is dict: + return "dict" + elif origin is Optional: + return "Unknown" + return f"Unknown" + annotation_str = str(annotation) + # 处理typing模块的复杂类型 + if "typing." in annotation_str: + # 简化typing类型显示 + return ( + annotation_str.replace("typing.", "") + if getattr(annotation, "_name", None) is None + else annotation._name.lower() + ) + # 如果是类型对象 + if hasattr(annotation, "__name__"): + # 如果是内置类型 + if annotation.__module__ == "builtins": + return annotation.__name__ + else: + # 如果是自定义类,返回完整路径 + return f"{annotation.__module__}:{annotation.__name__}" + # 如果是typing模块的类型 + elif hasattr(annotation, "_name"): + return annotation._name + # 如果是字符串形式的类型注解 + elif isinstance(annotation, str): + return annotation + else: + return annotation_str + + def _is_property_method(self, node: ast.FunctionDef) -> bool: + """检查是否是@property装饰的方法""" + for decorator in node.decorator_list: + if isinstance(decorator, ast.Name) and decorator.id == "property": + return True + return False + + def _is_setter_method(self, node: ast.FunctionDef) -> bool: + """检查是否是@xxx.setter装饰的方法""" + for decorator in node.decorator_list: + if isinstance(decorator, ast.Attribute) and decorator.attr == "setter": + return True + return False + + def _get_property_name_from_setter(self, node: ast.FunctionDef) -> str: + """从setter装饰器中获取属性名""" + for decorator in node.decorator_list: + if isinstance(decorator, ast.Attribute) and decorator.attr == "setter": + if isinstance(decorator.value, ast.Name): + return decorator.value.id + return node.name + + def get_class_info_static(self, module_class_path: str) -> Dict[str, Any]: + """ + 静态分析获取类的方法信息,不需要实际导入模块 + + Args: + module_class_path: 格式为 "module.path:ClassName" 的字符串 + + Returns: + 包含类方法信息的字典 + """ + try: + if ":" not in module_class_path: + raise ValueError("module_class_path必须是 'module.path:ClassName' 格式") + + module_path, class_name = module_class_path.rsplit(":", 1) + + # 将模块路径转换为文件路径 + file_path = self._module_path_to_file_path(module_path) + if not file_path or not os.path.exists(file_path): + logger.warning(f"找不到模块文件: {module_path} -> {file_path}") + return {} + + # 解析源码 + with open(file_path, "r", encoding="utf-8") as f: + source_code = f.read() + + tree = ast.parse(source_code) + + # 查找目标类 + class_node = None + for node in ast.walk(tree): + if isinstance(node, ast.ClassDef) and node.name == class_name: + class_node = node + break + + if not class_node: + logger.warning(f"在模块 {module_path} 中找不到类 {class_name}") + return {} + + # 分析类的方法 + methods_info = {} + for node in class_node.body: + if isinstance(node, ast.FunctionDef): + method_info = self._analyze_method_node(node) + methods_info[node.name] = method_info + + return { + "class_name": class_name, + "module_path": module_path, + "file_path": file_path, + "methods": methods_info, + } + + except Exception as e: + logger.error(f"静态分析类 {module_class_path} 时出错: {str(e)}") + return {} + + def _module_path_to_file_path(self, module_path: str) -> Optional[str]: + for path in sys.path: + potential_path = Path(path) / module_path.replace(".", "/") + + # 检查是否为包 + if (potential_path / "__init__.py").exists(): + return str(potential_path / "__init__.py") + + # 检查是否为模块文件 + if (potential_path.parent / f"{potential_path.name}.py").exists(): + return str(potential_path.parent / f"{potential_path.name}.py") + + return None + + def _analyze_method_node(self, node: ast.FunctionDef) -> Dict[str, Any]: + """分析方法节点,提取参数和返回类型信息""" + method_info = { + "name": node.name, + "args": [], + "return_type": None, + "is_async": isinstance(node, ast.AsyncFunctionDef), + } + # 获取默认值列表 + defaults = node.args.defaults + num_defaults = len(defaults) + + # 计算必需参数数量 + total_args = len(node.args.args) + num_required = total_args - num_defaults + + # 提取参数信息 + for i, arg in enumerate(node.args.args): + if arg.arg == "self": + continue + arg_info = { + "name": arg.arg, + "type": None, + "default": None, + "required": i < num_required, + } + + # 提取类型注解 + if arg.annotation: + arg_info["type"] = ast.unparse(arg.annotation) if hasattr(ast, "unparse") else str(arg.annotation) + + # 提取默认值并推断类型 + if i >= num_required: + default_index = i - num_required + if default_index < len(defaults): + default_value: Constant = defaults[default_index] # type: ignore + assert isinstance(default_value, Constant), "暂不支持对非常量类型进行推断,可反馈开源仓库" + arg_info["default"] = default_value.value + # 如果没有类型注解,尝试从默认值推断类型 + if not arg_info["type"]: + arg_info["type"] = self._get_type_string(type(arg_info["default"])) + method_info["args"].append(arg_info) + + # 提取返回类型 + if node.returns: + method_info["return_type"] = ast.unparse(node.returns) if hasattr(ast, "unparse") else str(node.returns) + + return method_info + + def _infer_type_from_default(self, node: ast.AST) -> Optional[str]: + """从默认值推断参数类型""" + if isinstance(node, ast.Constant): + value = node.value + if isinstance(value, bool): + return "bool" + elif isinstance(value, int): + return "int" + elif isinstance(value, float): + return "float" + elif isinstance(value, str): + return "str" + elif value is None: + return "Optional[Any]" + elif isinstance(node, ast.List): + return "List" + elif isinstance(node, ast.Dict): + return "Dict" + elif isinstance(node, ast.Tuple): + return "Tuple" + elif isinstance(node, ast.Set): + return "Set" + elif isinstance(node, ast.Name): + # 常见的默认值模式 + if node.id in ["None"]: + return "Optional[Any]" + elif node.id in ["True", "False"]: + return "bool" + + return None + + def _infer_types_from_docstring(self, method_info: Dict[str, Any]) -> None: + """从docstring中推断参数类型""" + docstring = method_info.get("docstring", "") + if not docstring: + return + + lines = docstring.split("\n") + in_args_section = False + + for line in lines: + line = line.strip() + + # 检测Args或Arguments段落 + if line.lower().startswith(("args:", "arguments:")): + in_args_section = True + continue + elif line.startswith(("returns:", "return:", "yields:", "raises:")): + in_args_section = False + continue + elif not line or not in_args_section: + continue + + # 解析参数行,格式通常是: param_name (type): description 或 param_name: description + if ":" in line: + parts = line.split(":", 1) + param_part = parts[0].strip() + + # 提取参数名和类型 + param_name = None + param_type = None + + if "(" in param_part and ")" in param_part: + # 格式: param_name (type) + param_name = param_part.split("(")[0].strip() + type_part = param_part.split("(")[1].split(")")[0].strip() + param_type = type_part + else: + # 格式: param_name + param_name = param_part + + # 更新对应参数的类型信息 + if param_name: + for arg_info in method_info["args"]: + if arg_info["name"] == param_name and not arg_info["type"]: + if param_type: + arg_info["inferred_type"] = param_type + elif not arg_info["inferred_type"]: + # 从描述中推断类型 + description = parts[1].strip().lower() + if any(word in description for word in ["path", "file", "directory", "filename"]): + arg_info["inferred_type"] = "str" + elif any( + word in description for word in ["port", "number", "count", "size", "length"] + ): + arg_info["inferred_type"] = "int" + elif any( + word in description for word in ["rate", "ratio", "percentage", "temperature"] + ): + arg_info["inferred_type"] = "float" + elif any(word in description for word in ["flag", "enable", "disable", "option"]): + arg_info["inferred_type"] = "bool" + + def get_registry_class_info(self, module_class_path: str) -> Dict[str, Any]: + """ + 获取适用于注册表的类信息,包含完整的类型推断 + + Args: + module_class_path: 格式为 "module.path:ClassName" 的字符串 + + Returns: + 适用于注册表的类信息字典 + """ + class_info = self.get_class_info_static(module_class_path) + if not class_info: + return {} + + registry_info = { + "class_name": class_info["class_name"], + "module_path": class_info["module_path"], + "file_path": class_info["file_path"], + "methods": {}, + "properties": [], + "init_params": {}, + "action_methods": {}, + } + + for method_name, method_info in class_info["methods"].items(): + # 分类处理不同类型的方法 + if method_info["is_property"]: + registry_info["properties"].append( + { + "name": method_name, + "return_type": method_info.get("return_type"), + "docstring": method_info.get("docstring"), + } + ) + elif method_name == "__init__": + # 处理初始化参数 + init_params = {} + for arg in method_info["args"]: + if arg["name"] != "self": + param_info = { + "name": arg["name"], + "type": arg.get("type") or arg.get("inferred_type"), + "required": arg.get("is_required", True), + "default": arg.get("default"), + } + init_params[arg["name"]] = param_info + registry_info["init_params"] = init_params + elif not method_name.startswith("_"): + # 处理公共方法(可能的action方法) + action_info = { + "name": method_name, + "params": {}, + "return_type": method_info.get("return_type"), + "docstring": method_info.get("docstring"), + "num_required": method_info.get("num_required", 0) - 1, # 减去self + "num_defaults": method_info.get("num_defaults", 0), + } + + for arg in method_info["args"]: + if arg["name"] != "self": + param_info = { + "name": arg["name"], + "type": arg.get("type") or arg.get("inferred_type"), + "required": arg.get("is_required", True), + "default": arg.get("default"), + } + action_info["params"][arg["name"]] = param_info + + registry_info["action_methods"][method_name] = action_info + + return registry_info + # 全局实例,便于直接使用 default_manager = ImportManager() @@ -193,3 +791,18 @@ def init_from_list(module_list: List[str]) -> None: """从模块列表初始化默认管理器""" global default_manager default_manager = ImportManager(module_list) + + +def get_class_info_static(module_class_path: str) -> Dict[str, Any]: + """静态分析获取类信息的便捷函数""" + return default_manager.get_class_info_static(module_class_path) + + +def get_registry_class_info(module_class_path: str) -> Dict[str, Any]: + """获取适用于注册表的类信息的便捷函数""" + return default_manager.get_registry_class_info(module_class_path) + + +def get_enhanced_class_info(module_path: str, use_dynamic: bool = True) -> Dict[str, Any]: + """获取增强的类信息的便捷函数""" + return default_manager.get_enhanced_class_info(module_path, use_dynamic) diff --git a/unilabos/utils/type_check.py b/unilabos/utils/type_check.py index 578eb93d..52a6f0b0 100644 --- a/unilabos/utils/type_check.py +++ b/unilabos/utils/type_check.py @@ -2,6 +2,8 @@ import collections.abc import json from typing import get_origin, get_args +import yaml + def get_type_class(type_hint): origin = get_origin(type_hint) @@ -22,6 +24,12 @@ class TypeEncoder(json.JSONEncoder): return super().default(obj) +class NoAliasDumper(yaml.SafeDumper): + def ignore_aliases(self, data): + return True + + + class ResultInfoEncoder(json.JSONEncoder): """专门用于处理任务执行结果信息的JSON编码器"""