OpenTCS核心架构与基本概念详解
OpenTCS的基本结构与核心概念
本文介绍OpenTCS的核心架构和基本概念。
核心架构概览
OpenTCS采用模块化设计,主要包含以下核心组件:

核心组件(Kernel)
kernel作用
- 小车外设控制,通过(Vehicile driver等驱动程序,直接通过http或者tcp自定义报文的方式控制其他设备)。
- 对外提供http接口和rmi接口(java的一种远程rpc调用),方便外部程序调用Kernel的一些方法或者数据数据。
- 订单分派管理(Dispatching):客户要求把某个东西,从A移动到B,如何分配小车。
- 路由计算(Routing):如何根据最短路径算法进行小车的移动路由,例如:基于距离的,基于边权重的,采用迪杰斯特拉算法或者A星算法等处理。
- 调度控制(Scheduling):小车真正执行任务时,相关资源调度控制。可以锁定独占某些资源,例如:路径、点位。
哪些研究会涉及到Kernel
- 想要扩展一种小车或者外设,并和它们建立控制通信,实现新设备的兼容。
- 开发一种外部自动化程序,通过http或者rmi主动控制Kernel,实现小车调度的解耦,避免直接硬编码的方式去操作小车。
- 自定义一种更高效的订单分配策略,比默认的策略更优。
- 自定义一种路由计算方法,更好地让小车更低成本地寻路。
- 自定义一种调度控制算法,更好地锁定和释放资源,可以让单位时间的订单运输量提升。
Kernel无法实现的
- 无法对于现实场景的精确仿真。Kernel中只识别特定的点位(Point)、路径(Path)、特定的目的地(Location)。所以,只能基于现场情况,设计好具体的抽象定义。
- 无法具体控制小车的运动轨迹。Kernel只会告诉小车,应该从A地点移动到B地点,至于小车如何规划从A移动到B的运功轨迹,则属于小车硬件自身的调度建模控制。
地图编辑器(Model Editor)
自带一种java的swing实现的地图编辑器,可以opentcs的默认地图编辑;这里不详细展开说明。主要的功能:
- 编辑地图,把地图保存到本地的xml文件中,或者从本地的xml文件加载地图。
- 上传地图到kernel中,让kernel可以识别到最新的地图配置。
核心控制器(Kernel Control Center)
自带一种java的swing实现的核心控制台,可以控制小车和外设的最基本状态。主要的功能:
- 启用或者关闭某个小车或者外设。
- 切换小车或者外设的驱动程序。
- 修改小车或者外设的驱动程序的参数。
操作台(Operations Desk)
自带一种java的swing实现的操作台,可以新建订单,设置小车的位置等。主要的功能:
- 给小车分配管理订单任务。
- 给外设分配任务。
- 实时观测当前的运行状态。
核心技术栈
后台技术栈
- 编程语言:java
- 依赖管理容器:guice
- 插件扩展:spi机制
可视化技术栈
- 编程语言:java
- GUI层:swing
- GUI绘制框架:jhotdraw
- 可视化编辑IDE:Netbeans【可以用Eclipse或者IDEA去编辑开发,但是不能编辑swing组件的form文件,因为官方的源代码中,配置的swing组件都是netbeans组件,所以Netbeans可以顺利打开】
Java实现细节基础
需要预先了解guice的基本概念,如何管理和注入依赖。
需要了解SPI机制,了解如何自动发现其他的jar包,自动生效。
需要了解几个核心的Inject扩展机制:
- KernelInjectionModule:核心的Kernel的扩展机制,后续主要围绕此扩展进行。
- ControlCenterInjectionModule:核心控制器扩展机制,如果后续要增加 核心控制器的GUI功能,则需要针对gui需求进行扩展。如果改用接口调用,则一般不需要开发扩展此模块。
- PlantOverviewInjectionModule:地图扩展机制,一般用来地图编辑器和操作台的扩展,很少涉及到扩展。