首页>书剑共铸>工单中心>混合调度系统算法,Decision决策中的重要信息

需要支持?

如果通过文档没办法解决您的问题,请提交工单获取我们的支持!

混合调度系统算法,Decision决策中的重要信息

Decision决策中的重要信息

1.什么是Decision决策?

Decision决策是ProfControl对于每一段路径应该如何执行运动控制的决策,它是一个复杂的信息结构,我们必须先了解ProfControl对于导航路径IRoute的数据结构:

混合调度系统算法,Decision决策中的重要信息

可以看到,一条导航路径IRoute是由N个IRouteItem导航路径单元组成,而每个导航路径单元内,都具有一个Decision对象。

2.Decision的数据结构

混合调度系统算法,Decision决策中的重要信息

我们可以看到Decision由两个主要部分构成,一个是Info对象,他代表了这条路径进入时刻的情况,可以理解为进入路径的初始信息;另一部分是路径上的需要执行的相关动作。这两部分共同构成了在一条子路径上的运动控制需求。

各种角度解释

我们可以看到在Decision中存在很多角度的概念,下面我们将依靠视图来解释这些角度的含义,为了方便解释,我们先确认一下系统的坐标轴,如果对接车体的坐标轴与系统坐标轴不同,需要在通讯脚本中进行转换。

第二个需要注意的是,在属性命名中,XXXAngle的代表角度[0-360],XXXRadian的代表弧度[0-2Π]。

混合调度系统算法,Decision决策中的重要信息

接下来我们要约定两个概念:

  1. 相对角度相对角度是指对应于某一个角度的角度
  2. 绝对角度绝对角度是指在系统坐标轴中的角度
1.CurAgvAngle[当前Agv角度]
混合调度系统算法,Decision决策中的重要信息
2.WorkAngle[工作角度] ★
混合调度系统算法,Decision决策中的重要信息
3.TargetAgvAngle[目标Agv角度]
混合调度系统算法,Decision决策中的重要信息
4.RotateAngle[旋转角度]
混合调度系统算法,Decision决策中的重要信息
5.CurPalletAngle[当前托盘角度]

当前托盘角度,是绝对角度!托盘角度是ProfControl给出的概念,即车体货物区域的角度,如果没有配置货物区域则该角度直接忽略。货物区域的旋转控制主要针对Kiva车型,一般车型我们默认货物区域随车体旋转而旋转,当打开车体属性的随动检测功能,则系统将根据需要可以独立控制货物区域的旋转。

一般车体货物区域都是随动旋转的,因为货物区域(滚筒、牵引销、顶升板等)都是和车体刚性连接,车体旋转的同时带动着载货区域一起旋转,但是Kiva车体比较特殊,它的顶升板可以独立旋转,所以产生了一种优势,就是车体正方向旋转90°的时候,顶升板如果反方向旋转90°,则整体看来顶升板是静止的,在一些小空间窄路径下这种应用有优势,产生的旋转投影面积较小,所需空间较小。

托盘角图示如下:

混合调度系统算法,Decision决策中的重要信息

随动旋转下,当前托盘角度与目标托盘角度如下图所示:

混合调度系统算法,Decision决策中的重要信息

不随动旋转下,当前托盘角度与目标托盘角度如下图所示:

混合调度系统算法,Decision决策中的重要信息

kiva车型托盘单独旋转下,当前托盘角度与目标托盘角度如下图所示:

混合调度系统算法,Decision决策中的重要信息
6.PalletRotateRadian[托盘旋转弧度]

如果托盘需要旋转,该弧度表示托盘应该旋转的弧度,是一个相对角度

7.TargetPalletAngle[目标托盘角度]

如果托盘需要旋转,该弧度表示托盘最终的角度,是一个绝对角度

如下的视频可以直观的看出ProfControl自动计算不同路径驶入时,随动和不随动算法的作用

8.PathInAngle/PathOutAngle[路径驶入角度/路径驶离角度]
混合调度系统算法,Decision决策中的重要信息

从不同端点驶入,一共构成了两种不同的子路径驶入角度及驶出角度:

A点 -> B点:

混合调度系统算法,Decision决策中的重要信息

B点 -> A点:

混合调度系统算法,Decision决策中的重要信息

其实无论是此处的PathInAngle/PathOutAngle还是IRouteItem中的InAngle/OutAngle,都是取自类型为IPathDir,名称为CurPath属性中的InAngle/OutAngle属性。下一节将介绍IPathDir。

IPathDir 路径向量

路径向量是轻量化的IRouteItem导航路径单元,所以我们先弄清楚什么是导航路径和导航路径单元。

我们知道路径是四种不同线形的地图元素,绘制在地图上可以理解为现实世界的公路。导航路径则是规划出了如何从一个点行驶到另一个点的行驶链路。一个导航路径具有N条导航路径单元,这些导航路径单元最核心的信息便是,车体经过哪一段路径,然后从哪里驶入,从哪里驶离。有了这些连续的导航路径单元,便可以构成导航路径。可参考路径规划。

IRouteItem具有复杂的数据结构,其中还携带了Decision这种和运动控制相关的信息。IPathDir则是一种超轻量化的数据结构,他们都具有以下四个基本信息:

  1. 属于哪一条具体路径(IPath)
  2. 从路径的哪一个端点输入(InFrom枚举)
  3. 驶入站点 InStation
  4. 驶离站点 OutStation

那么既然有了IRouteItem为什么还要设计IPathDir?原因在于IRouteItem数据结构过于复杂,在高速的算法计算中性能较低,但是在最终导航路径输出中,我们又需要非常全面的数据,所以ProfControl将IRouteItem和IPathDir分开设计。IRouteItem作为计算结果,用于最终输出,IPathDir作为计算过程中的组件,可以快速构建和销毁。

1.InFrom[驶入方向]

这是一个类型为枚举的属性,枚举如下:

/// <summary>
/// 路径进入点枚举
/// </summary>
publicenumInFromEnum
{
/// <summary>
/// 起点进入
/// </summary>
    Start,
/// <summary>
/// 终点进入
/// </summary>
    End,
}

C#

我们可以看到,枚举具有两个字段,分别是Start和End。它是用来描述从哪一个端点进入路径的标识。那么Start和End是怎么定义的呢?

我们知道绘制一条路径我们一般是先确定第一个点,然后移动到另一个点的位置再次点击鼠标确定第二个点,没错!第一个创建的点则为Start,第二个创建的点则为End。所以同样长度和线形的一条路径,可能存在两种不同的绘制起点和终点。

有人可能会问那么我导入的路径呢?不要担心,任何一条路径在ProfControl中都是先确定一个点再确定另一个端点的。如果是导入的情况,系统将自动将第一个提供的坐标作为起点,另一个为终点。

所以相邻两条路径,他们的起点终点关系可能就有4种:

混合调度系统算法,Decision决策中的重要信息

不要为此担忧,系统不要求绘制路径的时候有方向性,正因为如此,在IPathDir路径向量中,系统才有必要自动计算出该属性,该属性一般无需在脚本中使用,因为后续的InStation和OutStation都是系统自动计算给到用户的。

2.Path[所属路径]

上文提到了,导航路径和路径的关系,其中路径可以理解为现实世界的公路,就是我们绘制/导入到地图中的四种线形。

3.InStation/OutStation[驶入站点/驶离站点]

如果您看懂了上述内容,应该很快想到由于系统自动推算InFrom属性,同时我们又已经知道了Path,那么驶入站点和驶离站点当然很轻松便可获取。

4.InAngle/OutAngle[驶入角度/驶离角度]

同样的,由于ProfControl地图分析工具会获取到每一条路径的切线角度,那么根据InFrom,驶入角度和驶离角度也可以轻松获取。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
❯
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索