AGV任务运行逻辑
跳到导航
跳到搜索
概括
Medulla为硬件控制平台程序,用于交互硬件各项信息并抽象为“上下位信号”。Clumsy为车载程序,由用户通过插件定义车辆的能力集并实现。一般实现的功能诸如行走、取放货等,也可以定义其它复杂的功能,如自动识别托盘并取放货等。这些能力集由Clumsy统一通过“脚本”提供。Simple为调度程序,在派发AGV任务时,根据路径信息,编译得到AGV的运行脚本,并通过Clumsy的接口下发脚本。
可以理解为调度程序一次性计算好AGV当前任务的运行路线、以及在各个位置需要做什么事情;并将一切规划好后,将全部信息告诉车载。
交管原理
Clumsy在执行的脚本时,会涉及和调度的同步工作,也即“交通管理”。该同步使用TryLock和Leave实现。一般需要同步的时机为点位的占用,如用户插件一般会提供Go方法,调用此方法会让AGV走到指定位置:实现Go函数时,首先调用TryLock方法询问Simple(调度)是否允许走到目标点位,直到Simple允许;随后小车前进到目标点位,然后调用Leave方法解锁起始点位。
第三方调度适配交管原理:
第三方调度进行交管时,只需要实现TryLock和Leave接口。具体实现方法如下:
TryLock:
- 可使用WebAPI开放/trylock路径:
- Clumsy使用Post方法提交一个json:{"carid"://小车的ID,"siteid"://欲获取的点位ID}
- 如果允许,返回一个json:{"success":true}
- 如果不允许,返回:{"success":false}
- 如果出现了内部错误等要,可返回:{"error"://错误信息}。如果返回错误,则也会让Clumsy的脚本抛出错误并终止执行。
- 或可在Clumsy插件中赋值SimpleAGVInterface.lockActions的函数委托。
Leave:
- 可使用WebAPI开放/leave路径:
- Clumsy使用Get方法提交数据。参数为carid和siteid。分别为小车的ID和欲解锁的点位。
- 如果允许,返回一个json:{"success":true}
- 如果不允许,返回:{"success":false}
- 如果出现了内部错误等要,可返回:{"error"://错误信息}。如果返回错误,则也会让Clumsy的脚本抛出错误并终止执行。
- 或可在Clumsy插件中赋值SimpleAGVInterface.leaveActions的函数委托。