mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-17 04:51:10 +00:00
注册表自动补全 & Action自动注册 (#57)
* 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 <changjh@pku.edu.cn> Co-authored-by: Guangxin Zhang <guangxin.zhang.bio@gmail.com> Co-authored-by: qxw138 <qxw@stu.pku.edu.cn> * 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 commit498c997ad7. * Reapply "修改物料跟随与物料添加逻辑" This reverts commit3a60d2ae81. * Revert "Merge remote-tracking branch 'upstream/dev' into device_visualization" This reverts commitfa727220af, reversing changes made to498c997ad7. * 修改物料放下时的方法,如果选择 修改物料放下时的方法, 如果选择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 commit56d45b94f5. * Reapply "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit07d9db20c3. * 添加缺少物料:"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 commit5d9953c3e5. * Reapply "change to debug level" This reverts commit2487bb6ffc. * 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 <Q-Query@outlook.com> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: Junhan Chang <changjh@pku.edu.cn> Co-authored-by: Guangxin Zhang <guangxin.zhang.bio@gmail.com> Co-authored-by: qxw138 <qxw@stu.pku.edu.cn> * 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 commit498c997ad7. * Reapply "修改物料跟随与物料添加逻辑" This reverts commit3a60d2ae81. * Revert "Merge remote-tracking branch 'upstream/dev' into device_visualization" This reverts commitfa727220af, reversing changes made to498c997ad7. * 修改物料放下时的方法,如果选择 修改物料放下时的方法, 如果选择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 commit56d45b94f5. * Reapply "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit07d9db20c3. * 添加缺少物料:"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 commit5d9953c3e5. * Reapply "change to debug level" This reverts commit2487bb6ffc. * 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 <Q-Query@outlook.com> Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: q434343 <73513873+q434343@users.noreply.github.com> Co-authored-by: Junhan Chang <changjh@pku.edu.cn> Co-authored-by: Guangxin Zhang <guangxin.zhang.bio@gmail.com> Co-authored-by: qxw138 <qxw@stu.pku.edu.cn> * 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 commit498c997ad7. * Reapply "修改物料跟随与物料添加逻辑" This reverts commit3a60d2ae81. * Revert "Merge remote-tracking branch 'upstream/dev' into device_visualization" This reverts commitfa727220af, reversing changes made to498c997ad7. * 修改物料放下时的方法,如果选择 修改物料放下时的方法, 如果选择drop_trash,则删除物料显示 如果选择drop,则让其解除连接 * unilab添加moveit启动 1,整合所有moveit节点到一个move_group中,并整合所有的controller依次激活 2,添加pymoveit2的节点,使用json可直接启动 3,修改机械臂规划方式,添加约束,让冗余关节不会进行过多移动 * 修改物体attach时,多次赋值当前时间导致卡顿问题, * Revert "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit56d45b94f5. * Reapply "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit07d9db20c3. * 添加缺少物料:"plate_well_G12", * add * fix tip resource data * liquid states * change to debug level * Revert "change to debug level" This reverts commit5d9953c3e5. * Reapply "change to debug level" This reverts commit2487bb6ffc. * 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 <Q-Query@outlook.com> Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: q434343 <73513873+q434343@users.noreply.github.com> Co-authored-by: Junhan Chang <changjh@pku.edu.cn> * 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 <scienceol@outlook.com> * 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 <Q-Query@outlook.com> 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 <changjh@pku.edu.cn> * 更新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 <changjh@dp.tech> * 新增注册表补全功能,修复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 <changjh@pku.edu.cn> Co-authored-by: Guangxin Zhang <guangxin.zhang.bio@gmail.com> Co-authored-by: qxw138 <qxw@stu.pku.edu.cn> Co-authored-by: q434343 <73513873+q434343@users.noreply.github.com> Co-authored-by: Harvey Que <Q-Query@outlook.com> 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 <scienceol@outlook.com> Co-authored-by: Harvey Que <quehaohui@dp.tech> Co-authored-by: Junhan Chang <changjh@dp.tech>
This commit is contained in:
45
test/experiments/camera.json
Normal file
45
test/experiments/camera.json
Normal file
@@ -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": [
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -680,7 +680,7 @@
|
|||||||
"type": "fluid",
|
"type": "fluid",
|
||||||
"port": {
|
"port": {
|
||||||
"multiway_valve_1": "5",
|
"multiway_valve_1": "5",
|
||||||
"rotavap_1": "sample_in"
|
"rotavap_1": "samplein"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -770,7 +770,7 @@
|
|||||||
"type": "transport",
|
"type": "transport",
|
||||||
"port": {
|
"port": {
|
||||||
"multiway_valve_2": "4",
|
"multiway_valve_2": "4",
|
||||||
"filter_1": "filter_in"
|
"filter_1": "filterin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -800,7 +800,7 @@
|
|||||||
"type": "fluid",
|
"type": "fluid",
|
||||||
"port": {
|
"port": {
|
||||||
"multiway_valve_2": "6",
|
"multiway_valve_2": "6",
|
||||||
"separator_1": "separator_in"
|
"separator_1": "separatorin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -809,7 +809,7 @@
|
|||||||
"target": "collection_bottle_3",
|
"target": "collection_bottle_3",
|
||||||
"type": "fluid",
|
"type": "fluid",
|
||||||
"port": {
|
"port": {
|
||||||
"separator_1": "bottom_phase_out",
|
"separator_1": "bottomphaseout",
|
||||||
"collection_bottle_3": "top"
|
"collection_bottle_3": "top"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -859,7 +859,7 @@
|
|||||||
"target": "waste_bottle_2",
|
"target": "waste_bottle_2",
|
||||||
"type": "fluid",
|
"type": "fluid",
|
||||||
"port": {
|
"port": {
|
||||||
"separator_1": "top_phase_out",
|
"separator_1": "topphaseout",
|
||||||
"waste_bottle_2": "top"
|
"waste_bottle_2": "top"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -879,7 +879,7 @@
|
|||||||
"target": "collection_bottle_1",
|
"target": "collection_bottle_1",
|
||||||
"type": "transport",
|
"type": "transport",
|
||||||
"port": {
|
"port": {
|
||||||
"filter_1": "filtrate_out",
|
"filter_1": "filtrateout",
|
||||||
"collection_bottle_1": "top"
|
"collection_bottle_1": "top"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -889,7 +889,7 @@
|
|||||||
"target": "waste_bottle_1",
|
"target": "waste_bottle_1",
|
||||||
"type": "transport",
|
"type": "transport",
|
||||||
"port": {
|
"port": {
|
||||||
"filter_1": "retentate_out",
|
"filter_1": "retentateout",
|
||||||
"waste_bottle_1": "top"
|
"waste_bottle_1": "top"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,8 +48,9 @@ dependencies:
|
|||||||
- ros-humble-ros2-control
|
- ros-humble-ros2-control
|
||||||
- ros-humble-robot-state-publisher
|
- ros-humble-robot-state-publisher
|
||||||
- ros-humble-joint-state-publisher
|
- ros-humble-joint-state-publisher
|
||||||
# web
|
# web and visualization
|
||||||
- ros-humble-rosbridge-server
|
- ros-humble-rosbridge-server
|
||||||
|
- ros-humble-cv-bridge
|
||||||
# geometry & motion planning
|
# geometry & motion planning
|
||||||
- ros-humble-tf2
|
- ros-humble-tf2
|
||||||
- ros-humble-moveit
|
- ros-humble-moveit
|
||||||
|
|||||||
@@ -50,8 +50,9 @@ dependencies:
|
|||||||
- ros-humble-ros2-control
|
- ros-humble-ros2-control
|
||||||
- ros-humble-robot-state-publisher
|
- ros-humble-robot-state-publisher
|
||||||
- ros-humble-joint-state-publisher
|
- ros-humble-joint-state-publisher
|
||||||
# web
|
# web and visualization
|
||||||
- ros-humble-rosbridge-server
|
- ros-humble-rosbridge-server
|
||||||
|
- ros-humble-cv-bridge
|
||||||
# geometry & motion planning
|
# geometry & motion planning
|
||||||
- ros-humble-tf2
|
- ros-humble-tf2
|
||||||
- ros-humble-moveit
|
- ros-humble-moveit
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ channels:
|
|||||||
dependencies:
|
dependencies:
|
||||||
# Basics
|
# Basics
|
||||||
- python=3.11.11
|
- python=3.11.11
|
||||||
- compilers
|
# - compilers
|
||||||
- cmake
|
# - cmake
|
||||||
- make
|
# - make
|
||||||
- ninja
|
# - ninja
|
||||||
- sphinx
|
# - sphinx
|
||||||
- sphinx_rtd_theme
|
# - sphinx_rtd_theme
|
||||||
# Data Visualization
|
# Data Visualization
|
||||||
- numpy
|
- numpy
|
||||||
- scipy
|
- scipy
|
||||||
@@ -23,7 +23,7 @@ dependencies:
|
|||||||
- pyserial
|
- pyserial
|
||||||
- pyusb
|
- pyusb
|
||||||
- pylibftdi
|
- pylibftdi
|
||||||
- pymodbus
|
- pymodbus==3.6.9
|
||||||
- python-can
|
- python-can
|
||||||
- pyvisa
|
- pyvisa
|
||||||
- opencv
|
- opencv
|
||||||
@@ -48,8 +48,9 @@ dependencies:
|
|||||||
- ros-humble-ros2-control
|
- ros-humble-ros2-control
|
||||||
- ros-humble-robot-state-publisher
|
- ros-humble-robot-state-publisher
|
||||||
- ros-humble-joint-state-publisher
|
- ros-humble-joint-state-publisher
|
||||||
# web
|
# web and visualization
|
||||||
- ros-humble-rosbridge-server
|
- ros-humble-rosbridge-server
|
||||||
|
- ros-humble-cv-bridge
|
||||||
# geometry & motion planning
|
# geometry & motion planning
|
||||||
- ros-humble-tf2
|
- ros-humble-tf2
|
||||||
- ros-humble-moveit
|
- ros-humble-moveit
|
||||||
@@ -61,5 +62,12 @@ dependencies:
|
|||||||
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
|
||||||
# ilab equipments
|
# ilab equipments
|
||||||
# ros-humble-unilabos-msgs
|
# ros-humble-unilabos-msgs
|
||||||
|
# driver
|
||||||
|
#- crcmod
|
||||||
- pip:
|
- pip:
|
||||||
- paho-mqtt
|
- paho-mqtt
|
||||||
|
# driver
|
||||||
|
#- ur-rtde # set PYTHONUTF8=1
|
||||||
|
#- pyautogui
|
||||||
|
#- pywinauto
|
||||||
|
#- pywinauto_recorder
|
||||||
@@ -25,12 +25,13 @@ def job_add(req: JobAddReq) -> JobData:
|
|||||||
if req.job_id is None:
|
if req.job_id is None:
|
||||||
req.job_id = str(uuid.uuid4())
|
req.job_id = str(uuid.uuid4())
|
||||||
action_name = req.data["action"]
|
action_name = req.data["action"]
|
||||||
action_kwargs = req.data["action_kwargs"]
|
action_type = req.data.get("action_type", "LocalUnknown")
|
||||||
req.data['action'] = action_name
|
action_args = req.data.get("action_kwargs", None) # 兼容老版本,后续删除
|
||||||
if action_name == "execute_command_from_outer":
|
if action_args is None:
|
||||||
action_kwargs = {"command": json.dumps(action_kwargs)}
|
action_args = req.data.get("action_args")
|
||||||
elif "command" in action_kwargs:
|
else:
|
||||||
action_kwargs = action_kwargs["command"]
|
if "command" in action_args:
|
||||||
|
action_args = action_args["command"]
|
||||||
# print(f"job_add:{req.device_id} {action_name} {action_kwargs}")
|
# 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)
|
return JobData(jobId=req.job_id)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ def main():
|
|||||||
"""
|
"""
|
||||||
parser = argparse.ArgumentParser(description="注册设备和资源到 MQTT")
|
parser = argparse.ArgumentParser(description="注册设备和资源到 MQTT")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--registry_path",
|
"--registry",
|
||||||
type=str,
|
type=str,
|
||||||
default=None,
|
default=None,
|
||||||
action="append",
|
action="append",
|
||||||
@@ -46,10 +46,16 @@ def main():
|
|||||||
default=None,
|
default=None,
|
||||||
help="配置文件路径,支持.py格式的Python配置文件",
|
help="配置文件路径,支持.py格式的Python配置文件",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--complete_registry",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="是否补全注册表",
|
||||||
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# 构建注册表
|
# 构建注册表
|
||||||
build_registry(args.registry_path)
|
build_registry(args.registry, args.complete_registry)
|
||||||
load_config_from_file(args.config)
|
load_config_from_file(args.config)
|
||||||
|
|
||||||
from unilabos.app.mq import mqtt_client
|
from unilabos.app.mq import mqtt_client
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ Web页面模块
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import traceback
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
@@ -17,7 +18,7 @@ from jinja2 import Environment, FileSystemLoader
|
|||||||
from unilabos.config.config import BasicConfig
|
from unilabos.config.config import BasicConfig
|
||||||
from unilabos.registry.registry import lab_registry
|
from unilabos.registry.registry import lab_registry
|
||||||
from unilabos.ros.msgs.message_converter import msg_converter_manager
|
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.utils.type_check import TypeEncoder
|
||||||
from unilabos.app.web.utils.device_utils import get_registry_info
|
from unilabos.app.web.utils.device_utils import get_registry_info
|
||||||
from unilabos.app.web.utils.host_utils import get_host_node_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
|
return html
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
debug(traceback.format_exc())
|
||||||
error(f"生成状态页面时出错: {str(e)}")
|
error(f"生成状态页面时出错: {str(e)}")
|
||||||
raise HTTPException(status_code=500, detail=f"Error generating status page: {str(e)}")
|
raise HTTPException(status_code=500, detail=f"Error generating status page: {str(e)}")
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ def get_yaml_from_goal_type(goal_type) -> str:
|
|||||||
Returns:
|
Returns:
|
||||||
str: 默认Goal参数的YAML格式字符串
|
str: 默认Goal参数的YAML格式字符串
|
||||||
"""
|
"""
|
||||||
|
if isinstance(goal_type, str):
|
||||||
|
return "{}"
|
||||||
if not goal_type:
|
if not goal_type:
|
||||||
return "{}"
|
return "{}"
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
def find_gas_source(G: nx.DiGraph, gas: str) -> str:
|
||||||
"""根据气体名称查找对应的气源"""
|
"""
|
||||||
# 按照命名规则查找气源
|
根据气体名称查找对应的气源,支持多种匹配模式:
|
||||||
|
1. 容器名称匹配
|
||||||
|
2. 气体类型匹配(data.gas_type)
|
||||||
|
3. 默认气源
|
||||||
|
"""
|
||||||
|
print(f"EVACUATE_REFILL: 正在查找气体 '{gas}' 的气源...")
|
||||||
|
|
||||||
|
# 第一步:通过容器名称匹配
|
||||||
gas_source_patterns = [
|
gas_source_patterns = [
|
||||||
f"gas_source_{gas}",
|
f"gas_source_{gas}",
|
||||||
f"gas_{gas}",
|
f"gas_{gas}",
|
||||||
f"flask_{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:
|
for pattern in gas_source_patterns:
|
||||||
if pattern in G.nodes():
|
if pattern in G.nodes():
|
||||||
|
print(f"EVACUATE_REFILL: 通过名称匹配找到气源: {pattern}")
|
||||||
return pattern
|
return pattern
|
||||||
|
|
||||||
# 模糊匹配
|
# 第二步:通过气体类型匹配 (data.gas_type)
|
||||||
for node in G.nodes():
|
for node_id in G.nodes():
|
||||||
node_class = G.nodes[node].get('class', '') or ''
|
node_data = G.nodes[node_id]
|
||||||
if 'gas_source' in node_class and gas.lower() in node.lower():
|
node_class = node_data.get('class', '') or ''
|
||||||
return node
|
|
||||||
if node.startswith('flask_') and gas.lower() in node.lower():
|
# 检查是否是气源设备
|
||||||
return node
|
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()
|
node for node in G.nodes()
|
||||||
if ((G.nodes[node].get('class') or '').startswith('virtual_gas_source')
|
if ((G.nodes[node].get('class') or '').startswith('virtual_gas_source')
|
||||||
or ('gas' in node and 'source' in node)
|
or 'gas_source' in node)
|
||||||
or (node.startswith('flask_') and any(g in node.lower() for g in ['air', 'nitrogen', 'argon', 'vacuum'])))
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
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}")
|
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:
|
def find_vacuum_pump(G: nx.DiGraph) -> str:
|
||||||
"""查找真空泵设备"""
|
"""查找真空泵设备"""
|
||||||
vacuum_pumps = [
|
vacuum_pumps = [
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
import rtde_control
|
try:
|
||||||
import dashboard_client
|
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 time
|
||||||
import json
|
import json
|
||||||
from unilabos.devices.agv.robotiq_gripper import RobotiqGripper
|
from unilabos.devices.agv.robotiq_gripper import RobotiqGripper
|
||||||
import rtde_receive
|
|
||||||
from std_msgs.msg import Float64MultiArray
|
from std_msgs.msg import Float64MultiArray
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|||||||
@@ -234,71 +234,71 @@ class Laiyu:
|
|||||||
resp_reset = self.reset()
|
resp_reset = self.reset()
|
||||||
return actual_mass_mg
|
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"
|
# 关闭串口
|
||||||
# 定义输出文件路径,用于记录实际加样多少
|
modbus.ser.close()
|
||||||
output_file = r"C:\auto\laiyu\test_output.xlsx"
|
print("串口已关闭")
|
||||||
|
|
||||||
# 定义物料名称和料筒位置关系
|
|
||||||
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("串口已关闭")
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,11 @@ import sys
|
|||||||
import io
|
import io
|
||||||
# sys.path.insert(0, r'C:\kui\winprep_cli\winprep_c_Uni-lab\x64\Debug')
|
# 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
|
from queue import Queue
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ except Exception as e:
|
|||||||
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..")))
|
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.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.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}")
|
print(f"使用文件DEBUG运行: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
class RamanObj:
|
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_laser = port_laser
|
||||||
self.port_ccd = port_ccd
|
self.port_ccd = port_ccd
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import socket
|
|
||||||
import json
|
|
||||||
import base64
|
import base64
|
||||||
import argparse
|
import json
|
||||||
import sys
|
import socket
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
@@ -96,17 +94,20 @@ class ZhidaClient:
|
|||||||
def abort(self) -> dict:
|
def abort(self) -> dict:
|
||||||
return self._send_command({"command": "abort"})
|
return self._send_command({"command": "abort"})
|
||||||
|
|
||||||
"""
|
|
||||||
a,b,c
|
|
||||||
1,2,4
|
|
||||||
2,4,5
|
|
||||||
"""
|
|
||||||
|
|
||||||
client = ZhidaClient()
|
if __name__ == "__main__":
|
||||||
# 连接
|
|
||||||
client.connect()
|
"""
|
||||||
# 获取状态
|
a,b,c
|
||||||
print(client.status)
|
1,2,4
|
||||||
|
2,4,5
|
||||||
|
"""
|
||||||
|
|
||||||
|
client = ZhidaClient()
|
||||||
|
# 连接
|
||||||
|
client.connect()
|
||||||
|
# 获取状态
|
||||||
|
print(client.status)
|
||||||
|
|
||||||
|
|
||||||
# 命令格式:python zhida.py <subcommand> [options]
|
# 命令格式:python zhida.py <subcommand> [options]
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
io_snrd:
|
#io_snrd:
|
||||||
description: IO Board with 16 IOs
|
# description: IO Board with 16 IOs
|
||||||
class:
|
# class:
|
||||||
module: ilabos.device_comms.SRND_16_IO:SRND_16_IO
|
# module: unilabos.device_comms.SRND_16_IO:SRND_16_IO
|
||||||
type: python
|
# type: python
|
||||||
hardware_interface:
|
# hardware_interface:
|
||||||
name: modbus_client
|
# name: modbus_client
|
||||||
extra_info: []
|
# extra_info: []
|
||||||
read: read_io_coil
|
# read: read_io_coil
|
||||||
write: write_io_coil
|
# write: write_io_coil
|
||||||
@@ -1,7 +1,117 @@
|
|||||||
serial:
|
serial:
|
||||||
description: Serial communication interface, used when sharing same serial port for multiple devices
|
|
||||||
class:
|
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
|
module: unilabos.ros.nodes.presets.serial_node:ROS2SerialNode
|
||||||
|
status_types: {}
|
||||||
type: ros2
|
type: ros2
|
||||||
schema:
|
description: Serial communication interface, used when sharing same serial port
|
||||||
properties: {}
|
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
|
||||||
|
|||||||
10
unilabos/registry/devices/camera.yaml
Normal file
10
unilabos/registry/devices/camera.yaml
Normal file
@@ -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: {}
|
||||||
@@ -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:
|
hplc.agilent:
|
||||||
description: HPLC device
|
|
||||||
class:
|
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:
|
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:
|
execute_command_from_outer:
|
||||||
type: SendCmd
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
command: command
|
command: command
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
command: ''
|
||||||
|
handles: []
|
||||||
result:
|
result:
|
||||||
success: success
|
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:
|
properties:
|
||||||
device_status:
|
feedback: {}
|
||||||
type: string
|
goal:
|
||||||
could_run:
|
description: UniLabJsonCommand __init__ 的参数schema
|
||||||
type: boolean
|
properties:
|
||||||
driver_init_ok:
|
driver_debug:
|
||||||
type: boolean
|
default: false
|
||||||
is_running:
|
description: '参数: driver_debug'
|
||||||
type: boolean
|
type: boolean
|
||||||
finish_status:
|
required: []
|
||||||
type: string
|
type: object
|
||||||
status_text:
|
result: {}
|
||||||
type: string
|
|
||||||
required:
|
required:
|
||||||
- device_status
|
- goal
|
||||||
- could_run
|
title: __init__ 命令参数
|
||||||
- driver_init_ok
|
type: object
|
||||||
- is_running
|
raman_home_made:
|
||||||
- finish_status
|
class:
|
||||||
- status_text
|
action_value_mappings:
|
||||||
additionalProperties: false
|
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
|
type: object
|
||||||
|
|||||||
@@ -1,9 +1,35 @@
|
|||||||
hotel.thermo_orbitor_rs2_hotel:
|
hotel.thermo_orbitor_rs2_hotel:
|
||||||
description: Thermo Orbitor RS2 Hotel
|
class:
|
||||||
class:
|
action_value_mappings: {}
|
||||||
module: unilabos.devices.resource_container.container:HotelContainer
|
module: unilabos.devices.resource_container.container:HotelContainer
|
||||||
|
status_types:
|
||||||
|
rotation: String
|
||||||
type: python
|
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:
|
model:
|
||||||
type: device
|
|
||||||
mesh: thermo_orbitor_rs2_hotel
|
mesh: thermo_orbitor_rs2_hotel
|
||||||
|
type: device
|
||||||
|
|||||||
@@ -1,56 +1,608 @@
|
|||||||
laiyu_add_solid:
|
laiyu_add_solid:
|
||||||
description: Laiyu Add Solid
|
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.laiyu_add_solid.laiyu:Laiyu
|
|
||||||
type: python
|
|
||||||
status_types: {}
|
|
||||||
action_value_mappings:
|
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:
|
move_to_xyz:
|
||||||
type: Point3DSeparateInput
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
x: x
|
x: x
|
||||||
y: y
|
y: y
|
||||||
z: z
|
z: z
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
handles: []
|
||||||
result: {}
|
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:
|
pick_powder_tube:
|
||||||
type: IntSingleInput
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
int_input: int_input
|
int_input: int_input
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
int_input: 0
|
||||||
|
handles: []
|
||||||
result: {}
|
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:
|
put_powder_tube:
|
||||||
type: IntSingleInput
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
int_input: int_input
|
int_input: int_input
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
int_input: 0
|
||||||
|
handles: []
|
||||||
result: {}
|
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:
|
reset:
|
||||||
type: EmptyIn
|
feedback: {}
|
||||||
goal: {}
|
goal: {}
|
||||||
feedback: {}
|
goal_default: {}
|
||||||
|
handles: []
|
||||||
result: {}
|
result: {}
|
||||||
add_powder_tube:
|
schema:
|
||||||
type: SolidDispenseAddPowderTube
|
description: ROS Action EmptyIn 的 JSON Schema
|
||||||
goal:
|
properties:
|
||||||
powder_tube_number: powder_tube_number
|
feedback:
|
||||||
target_tube_position: target_tube_position
|
description: Action 反馈 - 执行过程中从服务器发送到客户端
|
||||||
compound_mass: compound_mass
|
properties: {}
|
||||||
feedback: {}
|
required: []
|
||||||
result:
|
title: EmptyIn_Feedback
|
||||||
actual_mass_mg: actual_mass_mg
|
type: object
|
||||||
move_to_plate:
|
goal:
|
||||||
type: StrSingleInput
|
description: Action 目标 - 从客户端发送到服务器
|
||||||
goal:
|
properties: {}
|
||||||
string: string
|
required: []
|
||||||
feedback: {}
|
title: EmptyIn_Goal
|
||||||
result: {}
|
type: object
|
||||||
discharge:
|
result:
|
||||||
type: FloatSingleInput
|
description: Action 结果 - 完成后从服务器发送到客户端
|
||||||
goal:
|
properties:
|
||||||
float_input: float_input
|
return_info:
|
||||||
feedback: {}
|
type: string
|
||||||
result: {}
|
required:
|
||||||
|
- return_info
|
||||||
schema:
|
title: EmptyIn_Result
|
||||||
properties: {}
|
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
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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:
|
moveit.arm_slider:
|
||||||
description: Arm with Slider
|
|
||||||
model:
|
|
||||||
type: device
|
|
||||||
mesh: arm_slider
|
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.ros_dev.moveit_interface:MoveitInterface
|
|
||||||
type: python
|
|
||||||
action_value_mappings:
|
action_value_mappings:
|
||||||
set_position:
|
auto-check_tf_update_actions:
|
||||||
type: SendCmd
|
|
||||||
goal:
|
|
||||||
command: command
|
|
||||||
feedback: {}
|
feedback: {}
|
||||||
|
goal: {}
|
||||||
|
goal_default: {}
|
||||||
|
handles: []
|
||||||
result: {}
|
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:
|
pick_and_place:
|
||||||
type: SendCmd
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
command: command
|
command: command
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
command: ''
|
||||||
|
handles: []
|
||||||
result: {}
|
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:
|
set_status:
|
||||||
type: SendCmd
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
command: command
|
command: command
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
command: ''
|
||||||
|
handles: []
|
||||||
result: {}
|
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
|
||||||
|
|||||||
@@ -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:
|
rotavap.one:
|
||||||
description: Rotavap device
|
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.rotavap.rotavap_one:RotavapOne
|
|
||||||
type: python
|
|
||||||
status_types:
|
|
||||||
pump_time: Float64
|
|
||||||
rotate_time: Float64
|
|
||||||
action_value_mappings:
|
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:
|
set_timer:
|
||||||
type: SendCmd
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
command: command
|
command: command
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
command: ''
|
||||||
|
handles: []
|
||||||
result:
|
result:
|
||||||
success: success
|
success: success
|
||||||
schema:
|
schema:
|
||||||
type: object
|
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:
|
properties:
|
||||||
temperature:
|
feedback: {}
|
||||||
type: number
|
goal:
|
||||||
description: 旋蒸水浴温度
|
description: UniLabJsonCommand __init__ 的参数schema
|
||||||
pump_time:
|
properties:
|
||||||
type: number
|
port:
|
||||||
description: The pump time of the device
|
description: '参数: port'
|
||||||
rotate_time:
|
type: string
|
||||||
type: number
|
rate:
|
||||||
description: The rotate time of the device
|
default: 9600
|
||||||
|
description: '参数: rate'
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- port
|
||||||
|
type: object
|
||||||
|
result: {}
|
||||||
required:
|
required:
|
||||||
- pump_time
|
- goal
|
||||||
- rotate_time
|
title: __init__ 命令参数
|
||||||
additionalProperties: false
|
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
|
||||||
|
|||||||
@@ -1,85 +1,900 @@
|
|||||||
syringe_pump_with_valve.runze:
|
solenoid_valve:
|
||||||
description: Runze Syringe pump with valve
|
|
||||||
class:
|
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
|
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:
|
hardware_interface:
|
||||||
name: hardware_interface
|
name: hardware_interface
|
||||||
read: send_command
|
read: send_command
|
||||||
write: send_command
|
write: send_command
|
||||||
schema:
|
module: unilabos.devices.pump_and_valve.runze_backbone:RunzeSyringePump
|
||||||
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
|
|
||||||
status_types:
|
status_types:
|
||||||
status: String
|
max_velocity: float
|
||||||
valve_position: String
|
mode: int
|
||||||
action_value_mappings:
|
plunger_position: String
|
||||||
open:
|
position: float
|
||||||
type: EmptyIn
|
status: str
|
||||||
goal: {}
|
valve_position: str
|
||||||
feedback: {}
|
velocity_end: String
|
||||||
result: {}
|
velocity_grade: String
|
||||||
close:
|
velocity_init: String
|
||||||
type: EmptyIn
|
type: python
|
||||||
goal: {}
|
description: Runze Syringe pump with valve
|
||||||
feedback: {}
|
handles: []
|
||||||
result: {}
|
icon: ''
|
||||||
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
|
|
||||||
init_param_schema:
|
init_param_schema:
|
||||||
type: object
|
description: UniLabJsonCommand __init__ 的参数schema
|
||||||
properties:
|
properties:
|
||||||
port:
|
feedback: {}
|
||||||
type: string
|
goal:
|
||||||
description: "通信端口"
|
description: UniLabJsonCommand __init__ 的参数schema
|
||||||
default: "COM6"
|
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:
|
required:
|
||||||
- port
|
- goal
|
||||||
|
title: __init__ 命令参数
|
||||||
solenoid_valve:
|
type: object
|
||||||
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: {}
|
|
||||||
|
|||||||
@@ -1,29 +1,138 @@
|
|||||||
# 仙工智能底盘(知行使用)
|
|
||||||
agv.SEER:
|
agv.SEER:
|
||||||
description: SEER AGV
|
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.agv.agv_navigator:AgvNavigator
|
|
||||||
type: python
|
|
||||||
status_types:
|
|
||||||
pose: Float64MultiArray
|
|
||||||
status: String
|
|
||||||
action_value_mappings:
|
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:
|
send_nav_task:
|
||||||
type: SendCmd
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
command: command
|
command: command
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
command: ''
|
||||||
|
handles: []
|
||||||
result:
|
result:
|
||||||
success: success
|
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:
|
properties:
|
||||||
pose:
|
feedback: {}
|
||||||
type: array
|
goal:
|
||||||
items:
|
description: UniLabJsonCommand __init__ 的参数schema
|
||||||
type: number
|
properties:
|
||||||
status:
|
host:
|
||||||
type: string
|
description: '参数: host'
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- host
|
||||||
|
type: object
|
||||||
|
result: {}
|
||||||
required:
|
required:
|
||||||
- status
|
- goal
|
||||||
additionalProperties: false
|
title: __init__ 命令参数
|
||||||
type: object
|
type: object
|
||||||
|
|||||||
@@ -1,37 +1,202 @@
|
|||||||
robotic_arm.UR:
|
robotic_arm.UR:
|
||||||
description: UR robotic arm
|
|
||||||
class:
|
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:
|
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:
|
move_pos_task:
|
||||||
type: SendCmd
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
command: command
|
command: command
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
command: ''
|
||||||
|
handles: []
|
||||||
result:
|
result:
|
||||||
success: success
|
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:
|
properties:
|
||||||
arm_pose:
|
feedback: {}
|
||||||
type: array
|
goal:
|
||||||
items:
|
description: UniLabJsonCommand __init__ 的参数schema
|
||||||
type: number
|
properties:
|
||||||
gripper_pose:
|
host:
|
||||||
type: number
|
description: '参数: host'
|
||||||
arm_status:
|
type: string
|
||||||
type: string
|
retry:
|
||||||
description: 机械臂设备状态
|
default: 30
|
||||||
gripper_status:
|
description: '参数: retry'
|
||||||
type: string
|
type: integer
|
||||||
description: 机械爪设备状态
|
required:
|
||||||
|
- host
|
||||||
|
type: object
|
||||||
|
result: {}
|
||||||
required:
|
required:
|
||||||
- arm_status
|
- goal
|
||||||
- gripper_status
|
title: __init__ 命令参数
|
||||||
additionalProperties: false
|
type: object
|
||||||
type: object
|
|
||||||
|
|||||||
@@ -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:
|
gripper.misumi_rz:
|
||||||
description: Misumi RZ gripper
|
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.motor:Grasp.EleGripper
|
|
||||||
type: python
|
|
||||||
status_types:
|
|
||||||
status: String
|
|
||||||
action_value_mappings:
|
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:
|
execute_command_from_outer:
|
||||||
type: SendCmd
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
command: command
|
command: command
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
command: ''
|
||||||
|
handles: []
|
||||||
result:
|
result:
|
||||||
success: success
|
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
|
||||||
|
|||||||
@@ -1,57 +1,709 @@
|
|||||||
linear_motion.grbl:
|
linear_motion.grbl:
|
||||||
description: Grbl CNC
|
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.cnc.grbl_sync:GrblCNC
|
|
||||||
type: python
|
|
||||||
action_value_mappings:
|
action_value_mappings:
|
||||||
move_through_points: &move_through_points
|
auto-initialize:
|
||||||
type: NavigateThroughPoses
|
feedback: {}
|
||||||
goal:
|
goal: {}
|
||||||
poses[].pose.position: positions[]
|
goal_default: {}
|
||||||
feedback:
|
handles: []
|
||||||
current_pose.pose.position: position
|
|
||||||
navigation_time.sec: time_spent
|
|
||||||
estimated_time_remaining.sec: time_remaining
|
|
||||||
number_of_poses_remaining: pose_number_remaining
|
|
||||||
result: {}
|
result: {}
|
||||||
set_spindle_speed:
|
schema:
|
||||||
type: SingleJointPosition
|
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:
|
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:
|
feedback:
|
||||||
position: spindle_speed
|
position: spindle_speed
|
||||||
|
goal:
|
||||||
|
position: spindle_speed
|
||||||
|
goal_default:
|
||||||
|
max_velocity: 0.0
|
||||||
|
min_duration:
|
||||||
|
nanosec: 0
|
||||||
|
sec: 0
|
||||||
|
position: 0.0
|
||||||
|
handles: []
|
||||||
result: {}
|
result: {}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
description: ROS Action SingleJointPosition 的 JSON Schema
|
||||||
properties:
|
properties:
|
||||||
position:
|
feedback:
|
||||||
type: array
|
description: Action 反馈 - 执行过程中从服务器发送到客户端
|
||||||
items:
|
properties:
|
||||||
type: number
|
error:
|
||||||
description: The position of the device
|
type: number
|
||||||
spindle_speed:
|
header:
|
||||||
type: number
|
properties:
|
||||||
description: The spindle speed of the device
|
frame_id:
|
||||||
required:
|
type: string
|
||||||
- position
|
stamp:
|
||||||
- spindle_speed
|
properties:
|
||||||
additionalProperties: false
|
nanosec:
|
||||||
|
maximum: 4294967295
|
||||||
|
minimum: 0
|
||||||
motor.iCL42:
|
type: integer
|
||||||
description: iCL42 motor
|
sec:
|
||||||
class:
|
maximum: 2147483647
|
||||||
module: unilabos.devices.motor.iCL42:iCL42Driver
|
minimum: -2147483648
|
||||||
type: python
|
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:
|
status_types:
|
||||||
motor_position: Int64
|
position: unilabos.messages:Point3D
|
||||||
is_executing_run: Bool
|
spindle_speed: float
|
||||||
success: Bool
|
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:
|
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:
|
execute_command_from_outer:
|
||||||
type: SendCmd
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
command: command
|
command: command
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
command: ''
|
||||||
|
handles: []
|
||||||
result:
|
result:
|
||||||
success: success
|
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
|
||||||
|
|||||||
@@ -1,5 +1,355 @@
|
|||||||
lh_joint_publisher:
|
lh_joint_publisher:
|
||||||
class:
|
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
|
module: unilabos.devices.ros_dev.liquid_handler_joint_publisher:LiquidHandlerJointPublisher
|
||||||
|
status_types: {}
|
||||||
type: ros2
|
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
|
||||||
|
|||||||
@@ -1,65 +1,841 @@
|
|||||||
heaterstirrer.dalong:
|
chiller:
|
||||||
description: DaLong heater stirrer
|
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.heaterstirrer.dalong:HeaterStirrer_DaLong
|
|
||||||
type: python
|
|
||||||
status_types:
|
|
||||||
temp: Float64
|
|
||||||
temp_warning: Float64
|
|
||||||
stir_speed: Float64
|
|
||||||
action_value_mappings:
|
action_value_mappings:
|
||||||
set_temp_warning:
|
auto-build_modbus_frame:
|
||||||
type: SendCmd
|
|
||||||
goal:
|
|
||||||
command: temp
|
|
||||||
feedback: {}
|
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:
|
result:
|
||||||
success: success
|
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
|
type: SendCmd
|
||||||
goal:
|
module: unilabos.devices.temperature.chiller:Chiller
|
||||||
command: temp
|
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: {}
|
feedback: {}
|
||||||
result:
|
goal: {}
|
||||||
success: success
|
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:
|
heatchill:
|
||||||
type: HeatChill
|
|
||||||
goal:
|
|
||||||
vessel: vessel
|
|
||||||
temp: temp
|
|
||||||
time: time
|
|
||||||
purpose: purpose
|
|
||||||
feedback:
|
feedback:
|
||||||
status: status
|
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:
|
goal:
|
||||||
command: command
|
purpose: purpose
|
||||||
feedback: {}
|
temp: temp
|
||||||
|
time: time
|
||||||
|
vessel: vessel
|
||||||
|
goal_default:
|
||||||
|
purpose: ''
|
||||||
|
stir: false
|
||||||
|
stir_speed: 0.0
|
||||||
|
temp: 0.0
|
||||||
|
time: 0.0
|
||||||
|
vessel: ''
|
||||||
|
handles: []
|
||||||
result:
|
result:
|
||||||
success: success
|
success: success
|
||||||
tempsensor:
|
schema:
|
||||||
description: Temperature sensor
|
description: ROS Action HeatChill 的 JSON Schema
|
||||||
class:
|
properties:
|
||||||
module: unilabos.devices.temperature.sensor_node:TempSensorNode
|
feedback:
|
||||||
type: python
|
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:
|
status_types:
|
||||||
value: Float64
|
status: str
|
||||||
warning: Float64
|
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:
|
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:
|
set_warning:
|
||||||
type: SendCmd
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
command: command
|
command: command
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
command: ''
|
||||||
|
handles: []
|
||||||
result:
|
result:
|
||||||
success: success
|
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
|
||||||
|
|||||||
@@ -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:
|
gas_source.mock:
|
||||||
description: Mock gas source
|
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock
|
|
||||||
type: python
|
|
||||||
status_types:
|
|
||||||
status: String
|
|
||||||
action_value_mappings:
|
action_value_mappings:
|
||||||
open:
|
auto-close:
|
||||||
type: EmptyIn
|
|
||||||
goal: {}
|
|
||||||
feedback: {}
|
feedback: {}
|
||||||
|
goal: {}
|
||||||
|
goal_default: {}
|
||||||
|
handles: []
|
||||||
result: {}
|
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:
|
close:
|
||||||
type: EmptyIn
|
|
||||||
goal: {}
|
|
||||||
feedback: {}
|
feedback: {}
|
||||||
|
goal: {}
|
||||||
|
goal_default: {}
|
||||||
|
handles: []
|
||||||
result: {}
|
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:
|
set_status:
|
||||||
type: StrSingleInput
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
string: string
|
string: string
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
string: ''
|
||||||
|
handles: []
|
||||||
result: {}
|
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:
|
handles:
|
||||||
- handler_key: out
|
- data_key: fluid_out
|
||||||
label: out
|
data_source: executor
|
||||||
data_type: fluid
|
data_type: fluid
|
||||||
io_type: source
|
handler_key: out
|
||||||
data_source: executor
|
io_type: source
|
||||||
data_key: fluid_out
|
label: out
|
||||||
|
icon: ''
|
||||||
init_param_schema:
|
init_param_schema:
|
||||||
type: object
|
description: UniLabJsonCommand __init__ 的参数schema
|
||||||
properties:
|
properties:
|
||||||
port:
|
feedback: {}
|
||||||
type: string
|
goal:
|
||||||
description: "通信端口"
|
description: UniLabJsonCommand __init__ 的参数schema
|
||||||
default: "COM6"
|
properties:
|
||||||
|
port:
|
||||||
|
default: COM6
|
||||||
|
description: '参数: port'
|
||||||
|
type: string
|
||||||
|
required: []
|
||||||
|
type: object
|
||||||
|
result: {}
|
||||||
required:
|
required:
|
||||||
- port
|
- 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
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,27 +1,239 @@
|
|||||||
zhida_hplc:
|
zhida_hplc:
|
||||||
description: Zhida HPLC
|
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.zhida_hplc.zhida:ZhidaClient
|
|
||||||
type: python
|
|
||||||
status_types:
|
|
||||||
status: String
|
|
||||||
action_value_mappings:
|
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:
|
start:
|
||||||
type: StrSingleInput
|
feedback: {}
|
||||||
goal:
|
goal:
|
||||||
string: string
|
string: string
|
||||||
feedback: {}
|
goal_default:
|
||||||
|
string: ''
|
||||||
|
handles: []
|
||||||
result: {}
|
result: {}
|
||||||
abort:
|
schema:
|
||||||
type: EmptyIn
|
description: ROS Action StrSingleInput 的 JSON Schema
|
||||||
goal: {}
|
properties:
|
||||||
feedback: {}
|
feedback:
|
||||||
result: {}
|
description: Action 反馈 - 执行过程中从服务器发送到客户端
|
||||||
get_methods:
|
properties: {}
|
||||||
type: EmptyIn
|
required: []
|
||||||
goal: {}
|
title: StrSingleInput_Feedback
|
||||||
feedback: {}
|
type: object
|
||||||
result: {}
|
goal:
|
||||||
|
description: Action 目标 - 从客户端发送到服务器
|
||||||
schema:
|
properties:
|
||||||
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
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
|
import copy
|
||||||
import io
|
import io
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
import yaml
|
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 import logger
|
||||||
from unilabos.utils.decorator import singleton
|
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]
|
DEFAULT_PATHS = [Path(__file__).absolute().parent]
|
||||||
|
|
||||||
@@ -32,7 +35,7 @@ class Registry:
|
|||||||
# 其他状态变量
|
# 其他状态变量
|
||||||
# self.is_host_mode = False # 移至BasicConfig中
|
# self.is_host_mode = False # 移至BasicConfig中
|
||||||
|
|
||||||
def setup(self):
|
def setup(self, complete_registry=False):
|
||||||
# 检查是否已调用过setup
|
# 检查是否已调用过setup
|
||||||
if self._setup_called:
|
if self._setup_called:
|
||||||
logger.critical("[UniLab Registry] setup方法已被调用过,不允许多次调用")
|
logger.critical("[UniLab Registry] setup方法已被调用过,不允许多次调用")
|
||||||
@@ -86,13 +89,15 @@ class Registry:
|
|||||||
io.StringIO(get_yaml_from_goal_type(self.ResourceCreateFromOuterEasy.Goal))
|
io.StringIO(get_yaml_from_goal_type(self.ResourceCreateFromOuterEasy.Goal))
|
||||||
),
|
),
|
||||||
"handles": {
|
"handles": {
|
||||||
"output": [{
|
"output": [
|
||||||
"handler_key": "labware",
|
{
|
||||||
"label": "Labware",
|
"handler_key": "labware",
|
||||||
"data_type": "resource",
|
"label": "Labware",
|
||||||
"data_source": "handle",
|
"data_type": "resource",
|
||||||
"data_key": "liquid"
|
"data_source": "handle",
|
||||||
}]
|
"data_key": "liquid",
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"test_latency": {
|
"test_latency": {
|
||||||
@@ -110,7 +115,6 @@ class Registry:
|
|||||||
"registry_type": "device",
|
"registry_type": "device",
|
||||||
"handles": [],
|
"handles": [],
|
||||||
"init_param_schema": {},
|
"init_param_schema": {},
|
||||||
"schema": {"properties": {}, "additionalProperties": False, "type": "object"},
|
|
||||||
"file_path": "/",
|
"file_path": "/",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,13 +125,13 @@ class Registry:
|
|||||||
sys_path = path.parent
|
sys_path = path.parent
|
||||||
logger.debug(f"[UniLab Registry] Path {i+1}/{len(self.registry_paths)}: {sys_path}")
|
logger.debug(f"[UniLab Registry] Path {i+1}/{len(self.registry_paths)}: {sys_path}")
|
||||||
sys.path.append(str(sys_path))
|
sys.path.append(str(sys_path))
|
||||||
self.load_device_types(path)
|
self.load_device_types(path, complete_registry)
|
||||||
self.load_resource_types(path)
|
self.load_resource_types(path, complete_registry)
|
||||||
logger.info("[UniLab Registry] 注册表设置完成")
|
logger.info("[UniLab Registry] 注册表设置完成")
|
||||||
# 标记setup已被调用
|
# 标记setup已被调用
|
||||||
self._setup_called = True
|
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()
|
abs_path = Path(path).absolute()
|
||||||
resource_path = abs_path / "resources"
|
resource_path = abs_path / "resources"
|
||||||
files = list(resource_path.glob("*/*.yaml"))
|
files = list(resource_path.glob("*/*.yaml"))
|
||||||
@@ -176,7 +180,14 @@ class Registry:
|
|||||||
if not type_name or type_name == "":
|
if not type_name or type_name == "":
|
||||||
logger.warning(f"[UniLab Registry] 设备 {device_id} 的 {field_name} 类型为空,跳过替换")
|
logger.warning(f"[UniLab Registry] 设备 {device_id} 的 {field_name} 类型为空,跳过替换")
|
||||||
return type_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)
|
type_class = msg_converter_manager.get_class(type_name)
|
||||||
else:
|
else:
|
||||||
type_class = msg_converter_manager.search_class(type_name)
|
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}")
|
logger.error(f"[UniLab Registry] 无法找到类型 '{type_name}' 用于设备 {device_id} 的 {field_name}")
|
||||||
sys.exit(1)
|
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()
|
abs_path = Path(path).absolute()
|
||||||
devices_path = abs_path / "devices"
|
devices_path = abs_path / "devices"
|
||||||
device_comms_path = abs_path / "device_comms"
|
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
|
from unilabos.app.web.utils.action_utils import get_yaml_from_goal_type
|
||||||
|
|
||||||
for i, file in enumerate(files):
|
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:
|
if data:
|
||||||
# 在添加到注册表前处理类型替换
|
# 在添加到注册表前处理类型替换
|
||||||
for device_id, device_config in data.items():
|
for device_id, device_config in data.items():
|
||||||
# 添加文件路径信息 - 使用规范化的完整文件路径
|
# 添加文件路径信息 - 使用规范化的完整文件路径
|
||||||
device_config["file_path"] = str(file.absolute()).replace("\\", "/")
|
|
||||||
if "description" not in device_config:
|
if "description" not in device_config:
|
||||||
device_config["description"] = ""
|
device_config["description"] = ""
|
||||||
if "icon" not in device_config:
|
if "icon" not in device_config:
|
||||||
@@ -213,42 +297,116 @@ class Registry:
|
|||||||
device_config["handles"] = []
|
device_config["handles"] = []
|
||||||
if "init_param_schema" not in device_config:
|
if "init_param_schema" not in device_config:
|
||||||
device_config["init_param_schema"] = {}
|
device_config["init_param_schema"] = {}
|
||||||
device_config["registry_type"] = "device"
|
|
||||||
if "class" in device_config:
|
if "class" in device_config:
|
||||||
# 处理状态类型
|
if "status_types" not in device_config["class"]:
|
||||||
if "status_types" in device_config["class"]:
|
device_config["class"]["status_types"] = {}
|
||||||
for status_name, status_type in device_config["class"]["status_types"].items():
|
if "action_value_mappings" not in device_config["class"]:
|
||||||
device_config["class"]["status_types"][status_name] = self._replace_type_with_class(
|
device_config["class"]["action_value_mappings"] = {}
|
||||||
status_type, device_id, f"状态 {status_name}"
|
enhanced_info = {}
|
||||||
)
|
if complete_registry:
|
||||||
|
device_config["class"]["status_types"].clear()
|
||||||
# 处理动作值映射
|
enhanced_info = get_enhanced_class_info(device_config["class"]["module"], use_dynamic=True)
|
||||||
if "action_value_mappings" in device_config["class"]:
|
device_config["class"]["status_types"].update(
|
||||||
for action_name, action_config in device_config["class"]["action_value_mappings"].items():
|
{k: v["return_type"] for k, v in enhanced_info["status_methods"].items()}
|
||||||
if "handles" not in action_config:
|
)
|
||||||
action_config["handles"] = []
|
for status_name, status_type in device_config["class"]["status_types"].items():
|
||||||
if "type" in action_config:
|
if status_type in ["Any", "None", "Unknown"]:
|
||||||
action_config["type"] = self._replace_type_with_class(
|
status_type = "String" # 替换成ROS的String,便于显示
|
||||||
action_config["type"], device_id, f"动作 {action_name}"
|
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(
|
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:
|
else:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"[UniLab Registry] 设备 {device_id} 的动作 {action_name} 类型为空,跳过替换"
|
f"[UniLab Registry] 设备 {device_id} 的动作 {action_name} 类型为空,跳过替换"
|
||||||
)
|
)
|
||||||
|
complete_data[device_id] = copy.deepcopy(dict(sorted(device_config.items()))) # 稍后dump到文件
|
||||||
self.device_type_registry.update(data)
|
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 device_id in data.keys():
|
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(
|
logger.debug(
|
||||||
f"[UniLab Registry] Device-{current_device_number} File-{i+1}/{len(files)} Add {device_id} "
|
f"[UniLab Registry] Device-{current_device_number} File-{i+1}/{len(files)} Add {device_id} "
|
||||||
+ f"[{data[device_id].get('name', '未命名设备')}]"
|
+ f"[{data[device_id].get('name', '未命名设备')}]"
|
||||||
)
|
)
|
||||||
current_device_number += 1
|
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:
|
else:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"[UniLab Registry] Device File-{i+1}/{len(files)} Not Valid YAML File: {file.absolute()}"
|
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):
|
def obtain_registry_device_info(self):
|
||||||
devices = []
|
devices = []
|
||||||
for device_id, device_info in self.device_type_registry.items():
|
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)
|
devices.append(msg)
|
||||||
return devices
|
return devices
|
||||||
|
|
||||||
@@ -273,7 +452,7 @@ class Registry:
|
|||||||
lab_registry = Registry()
|
lab_registry = Registry()
|
||||||
|
|
||||||
|
|
||||||
def build_registry(registry_paths=None):
|
def build_registry(registry_paths=None, complete_registry=False):
|
||||||
"""
|
"""
|
||||||
构建或获取Registry单例实例
|
构建或获取Registry单例实例
|
||||||
|
|
||||||
@@ -297,6 +476,6 @@ def build_registry(registry_paths=None):
|
|||||||
lab_registry.registry_paths.append(path)
|
lab_registry.registry_paths.append(path)
|
||||||
|
|
||||||
# 初始化注册表
|
# 初始化注册表
|
||||||
lab_registry.setup()
|
lab_registry.setup(complete_registry)
|
||||||
|
|
||||||
return lab_registry
|
return lab_registry
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ def ros2_device_node(
|
|||||||
"read": "read_data",
|
"read": "read_data",
|
||||||
"extra_info": [],
|
"extra_info": [],
|
||||||
}
|
}
|
||||||
|
# FIXME 后面要删除
|
||||||
for k, v in cls.__dict__.items():
|
for k, v in cls.__dict__.items():
|
||||||
if not k.startswith("_") and isinstance(v, property):
|
if not k.startswith("_") and isinstance(v, property):
|
||||||
# noinspection PyUnresolvedReferences
|
# noinspection PyUnresolvedReferences
|
||||||
|
|||||||
@@ -727,7 +727,6 @@ def ros_action_to_json_schema(action_class: Any) -> Dict[str, Any]:
|
|||||||
|
|
||||||
# 创建基础 schema
|
# 创建基础 schema
|
||||||
schema = {
|
schema = {
|
||||||
'$schema': 'http://json-schema.org/draft-07/schema#',
|
|
||||||
'title': action_class.__name__,
|
'title': action_class.__name__,
|
||||||
'description': f"ROS Action {action_class.__name__} 的 JSON Schema",
|
'description': f"ROS Action {action_class.__name__} 的 JSON Schema",
|
||||||
'type': 'object',
|
'type': 'object',
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import copy
|
import copy
|
||||||
|
import io
|
||||||
import json
|
import json
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
@@ -10,6 +11,7 @@ from concurrent.futures import ThreadPoolExecutor
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
import rclpy
|
import rclpy
|
||||||
|
import yaml
|
||||||
from rclpy.node import Node
|
from rclpy.node import Node
|
||||||
from rclpy.action import ActionServer, ActionClient
|
from rclpy.action import ActionServer, ActionClient
|
||||||
from rclpy.action.server import ServerGoalHandle
|
from rclpy.action.server import ServerGoalHandle
|
||||||
@@ -166,7 +168,10 @@ class PropertyPublisher:
|
|||||||
self.print_publish = print_publish
|
self.print_publish = print_publish
|
||||||
|
|
||||||
self._value = None
|
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.timer = node.create_timer(self.timer_period, self.publish_property)
|
||||||
self.__loop = get_event_loop()
|
self.__loop = get_event_loop()
|
||||||
str_msg_type = str(msg_type)[8:-2]
|
str_msg_type = str(msg_type)[8:-2]
|
||||||
@@ -302,6 +307,8 @@ class BaseROS2DeviceNode(Node, Generic[T]):
|
|||||||
# 创建动作服务
|
# 创建动作服务
|
||||||
if self.create_action_server:
|
if self.create_action_server:
|
||||||
for action_name, action_value_mapping in self._action_value_mappings.items():
|
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)
|
self.create_ros_action_server(action_name, action_value_mapping)
|
||||||
|
|
||||||
# 创建线程池执行器
|
# 创建线程池执行器
|
||||||
@@ -838,6 +845,8 @@ class BaseROS2DeviceNode(Node, Generic[T]):
|
|||||||
class DeviceInitError(Exception):
|
class DeviceInitError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class JsonCommandInitError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
class ROS2DeviceNode:
|
class ROS2DeviceNode:
|
||||||
"""
|
"""
|
||||||
@@ -954,12 +963,51 @@ class ROS2DeviceNode:
|
|||||||
self._ros_node: BaseROS2DeviceNode
|
self._ros_node: BaseROS2DeviceNode
|
||||||
self._ros_node.lab_logger().info(f"初始化完成 {self._ros_node.uuid} {self.driver_is_ros}")
|
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._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"):
|
if hasattr(self.driver_instance, "post_init"):
|
||||||
try:
|
try:
|
||||||
self.driver_instance.post_init(self._ros_node) # type: ignore
|
self.driver_instance.post_init(self._ros_node) # type: ignore
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._ros_node.lab_logger().error(f"设备后初始化失败: {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 _start_loop(self):
|
||||||
def run_event_loop():
|
def run_event_loop():
|
||||||
loop = asyncio.new_event_loop()
|
loop = asyncio.new_event_loop()
|
||||||
|
|||||||
61
unilabos/ros/nodes/presets/camera.py
Normal file
61
unilabos/ros/nodes/presets/camera.py
Normal file
@@ -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()
|
||||||
@@ -459,6 +459,8 @@ class HostNode(BaseROS2DeviceNode):
|
|||||||
self.devices_instances[device_id] = d
|
self.devices_instances[device_id] = d
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
for action_name, action_value_mapping in d._ros_node._action_value_mappings.items():
|
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}"
|
action_id = f"/devices/{device_id}/{action_name}"
|
||||||
if action_id not in self._action_clients:
|
if action_id not in self._action_clients:
|
||||||
action_type = action_value_mapping["type"]
|
action_type = action_value_mapping["type"]
|
||||||
@@ -567,6 +569,7 @@ class HostNode(BaseROS2DeviceNode):
|
|||||||
def send_goal(
|
def send_goal(
|
||||||
self,
|
self,
|
||||||
device_id: str,
|
device_id: str,
|
||||||
|
action_type: str,
|
||||||
action_name: str,
|
action_name: str,
|
||||||
action_kwargs: Dict[str, Any],
|
action_kwargs: Dict[str, Any],
|
||||||
goal_uuid: Optional[str] = None,
|
goal_uuid: Optional[str] = None,
|
||||||
@@ -577,11 +580,26 @@ class HostNode(BaseROS2DeviceNode):
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
device_id: 设备ID
|
device_id: 设备ID
|
||||||
|
action_type: 动作类型
|
||||||
action_name: 动作名称
|
action_name: 动作名称
|
||||||
action_kwargs: 动作参数
|
action_kwargs: 动作参数
|
||||||
goal_uuid: 目标UUID,如果为None则自动生成
|
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:
|
if action_name == "test_latency" and server_info is not None:
|
||||||
self.server_latest_timestamp = server_info.get("send_timestamp", 0.0)
|
self.server_latest_timestamp = server_info.get("send_timestamp", 0.0)
|
||||||
if action_id not in self._action_clients:
|
if action_id not in self._action_clients:
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import time
|
import time
|
||||||
import asyncio
|
|
||||||
import traceback
|
import traceback
|
||||||
from types import MethodType
|
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
import rclpy
|
import rclpy
|
||||||
@@ -19,9 +17,11 @@ from unilabos.ros.msgs.message_converter import (
|
|||||||
get_action_type,
|
get_action_type,
|
||||||
convert_to_ros_msg,
|
convert_to_ros_msg,
|
||||||
convert_from_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.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):
|
class ROS2ProtocolNode(BaseROS2DeviceNode):
|
||||||
@@ -33,7 +33,15 @@ class ROS2ProtocolNode(BaseROS2DeviceNode):
|
|||||||
|
|
||||||
# create_action_server = False # Action Server要自己创建
|
# 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)
|
self._setup_protocol_names(protocol_type)
|
||||||
|
|
||||||
# 初始化其它属性
|
# 初始化其它属性
|
||||||
@@ -60,12 +68,14 @@ class ROS2ProtocolNode(BaseROS2DeviceNode):
|
|||||||
|
|
||||||
for device_id, device_config in self.children.items():
|
for device_id, device_config in self.children.items():
|
||||||
if device_config.get("type", "device") != "device":
|
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
|
continue
|
||||||
try:
|
try:
|
||||||
d = self.initialize_device(device_id, device_config)
|
d = self.initialize_device(device_id, device_config)
|
||||||
except Exception as ex:
|
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
|
d = None
|
||||||
if d is None:
|
if d is None:
|
||||||
continue
|
continue
|
||||||
@@ -76,22 +86,27 @@ class ROS2ProtocolNode(BaseROS2DeviceNode):
|
|||||||
|
|
||||||
# 设置硬件接口代理
|
# 设置硬件接口代理
|
||||||
if d:
|
if d:
|
||||||
|
hardware_interface = d.ros_node_instance._hardware_interface
|
||||||
if (
|
if (
|
||||||
hasattr(d.driver_instance, d.ros_node_instance._hardware_interface["name"])
|
hasattr(d.driver_instance, hardware_interface["name"])
|
||||||
and hasattr(d.driver_instance, d.ros_node_instance._hardware_interface["write"])
|
and hasattr(d.driver_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"]))
|
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"])
|
name = getattr(d.driver_instance, hardware_interface["name"])
|
||||||
read = d.ros_node_instance._hardware_interface.get("read", None)
|
read = hardware_interface.get("read", None)
|
||||||
write = d.ros_node_instance._hardware_interface.get("write", None)
|
write = hardware_interface.get("write", None)
|
||||||
|
|
||||||
# 如果硬件接口是字符串,通过通信设备提供
|
# 如果硬件接口是字符串,通过通信设备提供
|
||||||
if isinstance(name, str) and name in self.sub_devices:
|
if isinstance(name, str) and name in self.sub_devices:
|
||||||
communicate_device = self.sub_devices[name]
|
communicate_device = self.sub_devices[name]
|
||||||
communicate_hardware_info = communicate_device.ros_node_instance._hardware_interface
|
communicate_hardware_info = communicate_device.ros_node_instance._hardware_interface
|
||||||
self._setup_hardware_proxy(d, self.sub_devices[name], read, write)
|
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):
|
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"):
|
if d is not None and hasattr(d, "ros_node_instance"):
|
||||||
node = d.ros_node_instance
|
node = d.ros_node_instance
|
||||||
for action_name, action_mapping in node._action_value_mappings.items():
|
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}"
|
action_id = f"/devices/{device_id_abs}/{action_name}"
|
||||||
if action_id not in self._action_clients:
|
if action_id not in self._action_clients:
|
||||||
self._action_clients[action_id] = ActionClient(
|
try:
|
||||||
self, action_mapping["type"], action_id, callback_group=self.callback_group
|
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}")
|
self.lab_logger().debug(f"为子设备 {device_id} 创建动作客户端: {action_name}")
|
||||||
return d
|
return d
|
||||||
|
|
||||||
@@ -149,63 +170,126 @@ class ROS2ProtocolNode(BaseROS2DeviceNode):
|
|||||||
def _create_protocol_execute_callback(self, protocol_name, protocol_steps_generator):
|
def _create_protocol_execute_callback(self, protocol_name, protocol_steps_generator):
|
||||||
async def execute_protocol(goal_handle: ServerGoalHandle):
|
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]
|
action_value_mapping = self._action_value_mappings[protocol_name]
|
||||||
print('+'*30)
|
try:
|
||||||
print(protocol_steps_generator)
|
print("+" * 30)
|
||||||
# 从目标消息中提取参数, 并调用Protocol生成器(根据设备连接图)生成action步骤
|
print(protocol_steps_generator)
|
||||||
goal = goal_handle.request
|
# 从目标消息中提取参数, 并调用Protocol生成器(根据设备连接图)生成action步骤
|
||||||
protocol_kwargs = convert_from_ros_msg_with_mapping(goal, action_value_mapping["goal"])
|
goal = goal_handle.request
|
||||||
|
protocol_kwargs = convert_from_ros_msg_with_mapping(goal, action_value_mapping["goal"])
|
||||||
|
|
||||||
# 向Host查询物料当前状态
|
# 向Host查询物料当前状态
|
||||||
for k, v in goal.get_fields_and_field_types().items():
|
for k, v in goal.get_fields_and_field_types().items():
|
||||||
if v in ["unilabos_msgs/Resource", "sequence<unilabos_msgs/Resource>"]:
|
if v in ["unilabos_msgs/Resource", "sequence<unilabos_msgs/Resource>"]:
|
||||||
r = ResourceGet.Request()
|
r = ResourceGet.Request()
|
||||||
r.id = protocol_kwargs[k]["id"] if v == "unilabos_msgs/Resource" else protocol_kwargs[k][0]["id"]
|
resource_id = (
|
||||||
r.with_children = True
|
protocol_kwargs[k]["id"] if v == "unilabos_msgs/Resource" else protocol_kwargs[k][0]["id"]
|
||||||
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])
|
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
|
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)
|
|
||||||
|
|
||||||
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()
|
self.lab_logger().info(f"Goal received: {protocol_kwargs}, running steps: \n{protocol_steps}")
|
||||||
time_overall = 100
|
|
||||||
self._busy = True
|
|
||||||
|
|
||||||
# 逐步执行工作流
|
time_start = time.time()
|
||||||
for i, action in enumerate(protocol_steps):
|
time_overall = 100
|
||||||
self.get_logger().info(f'Running step {i+1}: {action}')
|
self._busy = True
|
||||||
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]
|
|
||||||
|
|
||||||
# 向Host更新物料当前状态
|
# 逐步执行工作流
|
||||||
for k, v in goal.get_fields_and_field_types().items():
|
step_results = []
|
||||||
if v in ["unilabos_msgs/Resource", "sequence<unilabos_msgs/Resource>"]:
|
for i, action in enumerate(protocol_steps):
|
||||||
r = ResourceUpdate.Request()
|
self.get_logger().info(f"Running step {i + 1}: {action}")
|
||||||
r.resources = [
|
if isinstance(action, dict):
|
||||||
convert_to_ros_msg(Resource, rs) for rs in nested_dict_to_list(protocol_kwargs[k])
|
# 如果是单个动作,直接执行
|
||||||
]
|
if action["action_name"] == "wait":
|
||||||
response = await self._resource_clients["resource_update"].call_async(r)
|
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<unilabos_msgs/Resource>"]:
|
||||||
|
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 = 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 result
|
||||||
|
|
||||||
return execute_protocol
|
return execute_protocol
|
||||||
|
|
||||||
async def execute_single_action(self, device_id, action_name, action_kwargs):
|
async def execute_single_action(self, device_id, action_name, action_kwargs):
|
||||||
@@ -241,14 +325,19 @@ class ROS2ProtocolNode(BaseROS2DeviceNode):
|
|||||||
|
|
||||||
return result_future.result
|
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", [])]
|
# 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"])
|
write_func = getattr(
|
||||||
read_func = getattr(communication_device.driver_instance, communication_device.ros_node_instance._hardware_interface["read"])
|
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):
|
def _read(*args, **kwargs):
|
||||||
return read_func(*args, **kwargs)
|
return read_func(*args, **kwargs)
|
||||||
@@ -264,7 +353,6 @@ class ROS2ProtocolNode(BaseROS2DeviceNode):
|
|||||||
# bound_write = MethodType(_write, device.driver_instance)
|
# bound_write = MethodType(_write, device.driver_instance)
|
||||||
setattr(device.driver_instance, write_method, _write)
|
setattr(device.driver_instance, write_method, _write)
|
||||||
|
|
||||||
|
|
||||||
async def _update_resources(self, goal, protocol_kwargs):
|
async def _update_resources(self, goal, protocol_kwargs):
|
||||||
"""更新资源状态"""
|
"""更新资源状态"""
|
||||||
for k, v in goal.get_fields_and_field_types().items():
|
for k, v in goal.get_fields_and_field_types().items():
|
||||||
|
|||||||
@@ -7,7 +7,11 @@
|
|||||||
import builtins
|
import builtins
|
||||||
import importlib
|
import importlib
|
||||||
import inspect
|
import inspect
|
||||||
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
import ast
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
from typing import Dict, List, Any, Optional, Callable, Type
|
from typing import Dict, List, Any, Optional, Callable, Type
|
||||||
|
|
||||||
|
|
||||||
@@ -18,8 +22,12 @@ __all__ = [
|
|||||||
"get_class",
|
"get_class",
|
||||||
"get_module",
|
"get_module",
|
||||||
"init_from_list",
|
"init_from_list",
|
||||||
|
"get_class_info_static",
|
||||||
|
"get_registry_class_info",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
from ast import Constant
|
||||||
|
|
||||||
from unilabos.utils import logger
|
from unilabos.utils import logger
|
||||||
|
|
||||||
|
|
||||||
@@ -114,15 +122,16 @@ class ImportManager:
|
|||||||
# 尝试动态导入
|
# 尝试动态导入
|
||||||
if ":" in class_name:
|
if ":" in class_name:
|
||||||
module_path, cls_name = class_name.rsplit(":", 1)
|
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)
|
module = self.load_module(module_path)
|
||||||
if hasattr(module, cls_name):
|
if hasattr(module, cls_name):
|
||||||
cls = getattr(module, cls_name)
|
cls = getattr(module, cls_name)
|
||||||
self._classes[class_name] = cls
|
self._classes[class_name] = cls
|
||||||
self._classes[cls_name] = cls
|
self._classes[cls_name] = cls
|
||||||
return cls
|
return cls
|
||||||
|
else:
|
||||||
|
# 如果cls_name是builtins中的关键字,则返回对应类
|
||||||
|
if class_name in builtins.__dict__:
|
||||||
|
return builtins.__dict__[class_name]
|
||||||
|
|
||||||
raise KeyError(f"找不到类: {class_name}")
|
raise KeyError(f"找不到类: {class_name}")
|
||||||
|
|
||||||
@@ -149,6 +158,9 @@ class ImportManager:
|
|||||||
Returns:
|
Returns:
|
||||||
找到的类对象,如果未找到则返回None
|
找到的类对象,如果未找到则返回None
|
||||||
"""
|
"""
|
||||||
|
# 如果cls_name是builtins中的关键字,则返回对应类
|
||||||
|
if class_name in builtins.__dict__:
|
||||||
|
return builtins.__dict__[class_name]
|
||||||
# 首先在已索引的类中查找
|
# 首先在已索引的类中查找
|
||||||
if class_name in self._classes:
|
if class_name in self._classes:
|
||||||
return self._classes[class_name]
|
return self._classes[class_name]
|
||||||
@@ -161,7 +173,9 @@ class ImportManager:
|
|||||||
# 遍历所有已加载的模块进行搜索
|
# 遍历所有已加载的模块进行搜索
|
||||||
for module_path, module in self._modules.items():
|
for module_path, module in self._modules.items():
|
||||||
for name, obj in inspect.getmembers(module):
|
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[name] = obj
|
||||||
self._classes[f"{module_path}:{name}"] = obj
|
self._classes[f"{module_path}:{name}"] = obj
|
||||||
@@ -169,6 +183,590 @@ class ImportManager:
|
|||||||
|
|
||||||
return None
|
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()
|
default_manager = ImportManager()
|
||||||
@@ -193,3 +791,18 @@ def init_from_list(module_list: List[str]) -> None:
|
|||||||
"""从模块列表初始化默认管理器"""
|
"""从模块列表初始化默认管理器"""
|
||||||
global default_manager
|
global default_manager
|
||||||
default_manager = ImportManager(module_list)
|
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)
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import collections.abc
|
|||||||
import json
|
import json
|
||||||
from typing import get_origin, get_args
|
from typing import get_origin, get_args
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
def get_type_class(type_hint):
|
def get_type_class(type_hint):
|
||||||
origin = get_origin(type_hint)
|
origin = get_origin(type_hint)
|
||||||
@@ -22,6 +24,12 @@ class TypeEncoder(json.JSONEncoder):
|
|||||||
return super().default(obj)
|
return super().default(obj)
|
||||||
|
|
||||||
|
|
||||||
|
class NoAliasDumper(yaml.SafeDumper):
|
||||||
|
def ignore_aliases(self, data):
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ResultInfoEncoder(json.JSONEncoder):
|
class ResultInfoEncoder(json.JSONEncoder):
|
||||||
"""专门用于处理任务执行结果信息的JSON编码器"""
|
"""专门用于处理任务执行结果信息的JSON编码器"""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user