ct

AGV

AGV 通常用于表示自动导引车辆(Automated Guided Vehicle)

继承: AGV → Agent

local agv = AGV(config)

属性

对象基本属性

AGV 对象中继续添加的属性(创建 AGV 时可通过 config 修改)

运行时设置的属性

位置管理

与位置有关的任务,位置管理流程如下:

graph
init(任务开始)
set_lastpos("设置agv.lastpos = agv.pos")
execute(agv:execute)
arrive(到达目标位置)

init-->set_lastpos-->execute-->arrive-->set_lastpos

交互流程

主要指 AGV 如何与 Crane 分别通过 waitoperator 和 waitagent 任务进行交互

graph
agv_setoperator("agv.operator = operator")

agv_detect("检测agv.operator")
agv_occupying(agv正在被占用)
agv_released(agv已结束占用)

agv_setoperator-->agv_detect
agv_detect-->|"agv.operator!=nil"|agv_occupying-->agv_detect
agv_detect--->|"agv.operator==nil"|agv_released

任务

任务列表

move2

根据 AGV 的移动速度,将 AGV 移动到指定坐标位置(x,y,z)。

{"move2", {x, y, z, ...}}

不同于 Agent 类设置了三个维度的速度,AGV 的速度是标量,因此在移动的时候计算了每个方向的分速度。

waitoperator

根据输入的 operator 参数,AGV 等待 operator 对其进行操作。

{"waitoperator", {operator=}}

当 AGV 进入 waitoperator 任务时,首先在 init 部分设置 agv.operator = operator,表示 AGV 已经到达并进入等待状态。紧接着立刻通过协程(coroutine.queue(0, …))唤醒 operator.execute,起到立刻通知作用。如果此时 operator 已经在 waitagent 任务内,则能够在本时刻立刻收到通知,作出反应;如果还在执行其他任务,那么也不会造成其他影响。

当 execute 部分检测到 agv.operator=nil 时,表示 operator 已经完成对 AGV 的占用/操作,此时通过协程(coroutine.queue(0, …))唤醒 AGV,结束等待状态,结束 waitoperator 任务,继续执行其他任务。

moveon

沿着给定的道路 road 行驶,distance 为行驶距离。

{"moveon",{road=,distance=,targetDistance=}}

可选参数

onnode

{"onnode", node, fromRoad, toRoad}

任务过程参数列表

可选参数

register

在执行这个任务时令 AGV 向指定的 operator 进行注册(执行operator:registerAgv()函数)。

{"register", {operator=, f=}}

register 只有 init 部分,没有 execute 部分

可选参数