设备抽象、指令集与通信中间件
Uni-Lab 操作系统的目的是将不同类型和厂家的实验仪器进行抽象统一,对应用层提供服务。因此,理清实验室设备之间的业务逻辑至关重要。
设备间通信模式
话题(一对多发送,一对多订阅)
典型的话题通信有:
传感器连续发送设备状态和数据;
连续时间控制器发送控制指令,如控温、连续称量、机械臂轨迹跟随、视觉识别操作等
服务(短时请求与响应)
典型的服务通信有:
查/改全局参数如物料、设备
使用其他通信接口发送/接收数据
动作(长时任务启动,随后连续收到反馈值,直到达到目标)
动作机制主要用于处理运行时长较长的单点任务或任务组合,如:
执行工作流
执行工作流的子动作
通信指令集
Uni-Lab 目前使用 ROS2 作为通信中间件,因此大量使用其标准消息作为话题、服务、动作。新增指令位于仓库中的 unilabos_msgs
,各类实验动作指令集分类整理于 Uni-Lab 动作指令集
通信中间件层
通信中间件层的一个重要设计思想是:将业务逻辑开发,与实际部署中的通信和运行解耦。开发者在实现具体业务逻辑时,可以不用关心最终运行时的 部署方式 、 通信方式 。当用户开发完成后,再根据实际情况决定部署、通信方案。
对于 “流动化学实验室”和“桌面机器人” 来说,一台电脑通过串口控制所有设备足够。此时在这台电脑启动 Uni-Lab 作为 Server 即可。
对于 “移动机器人”大型实验室 ,典型场景是,一个实验室由多台不同位置的工作站组成,每台大型设备有一台工控机,通过串口再控制子设备。同时有 AGV/机械臂 负责转运。此时,在每台工控机启动 Uni-Lab,完成通信中间件层的包装之后,只要处于同一局域网下,他们将能自动互相发现并组成分布式的“Uni-Lab-Edge Server”。
通信中间件层的分布式机制,使得 Node 之间做好了隔离,一台设备故障时只需重启单个 Node。很像微服务、微内核的设计理念。