AGV系统概述
AGV原理
AGV行走控制系统由控制面板、导向传感器、方向电位器、状态指示灯、避障传感器、光电控制信号传感器、驱动单元、导引磁条、电源组成。
AGV的导引(Guidance)是指根据AGV导向传感器(Navigation)所得到的位置信息,按AGV的路径所提供的目标值计算出AGV的实际控制命令值,即给出AGV的设定速度和转向角,这是AGV 控制技术的关键。简而言之,AGV的导引控制就是AGV轨迹跟踪。
AGV导引有多种方法,比如说利用导向传感器的中心点作为参考点,追踪引导磁条上的虚拟点就是其中的一种。AGV的控制目标就是通过检测参考点与虚拟点的相对位置,修正驱动轮的转速以改变AGV的行进方向,尽力让参考点位于虚拟点的上方。这样AGV就能始终跟踪引导线运行。
AGV大体上用于以下三个方面:
1.物料搬运
在工业现场AGV常用于工位间或自动仓库与工位间的物料搬运作业。例如在组装线上,AGV从自动仓库取出机器零件并送到相应的组装工位。又如在柔性加工系统中,AGV依照加工工序顺次将被加工工件送到相应自动机床进行加工,加工好的零件由AGV送到质检站测,最后合格品送到半成品库。
2.移动工作台
在组装或柔性加工系统中AGV常作为移动工作台使用。以欧美一些汽车厂为例,在轿车组装过程中从汽车底盘焊装组立、安装悬挂系统、车轮和制动系统、安装发动机、变速箱、离合器、安装转向系统、安装汽车外壳、安装风档玻璃和座椅到整车配电等一系列组装过程都是在一台AGV上进行的。又如在欧美一些柴油机厂中,柴油机一系列的组装过程也都是在一台AGV上完成的。
3.与机器人或机器手配合在特殊工作环境下代替人工作业
在AGV上可以安装机器人或机器手,在特殊工作环境下代替人工作业。例如在核电站中代替人在具有放射线的工作环境下进行遥控作业。
AGV系统架构
AGV本体控制
采用STM32F103作为主控组合,两组闭环电机控制,12组光电循迹导航、RFID定位,通过IO模块作为机器人控制部分,通过闭环马达控制其背负传输带,采用无线射频通讯。
AGV网关控制
采用STM32作为主控,内置无线射频模块,通过RS232连接AGV上位机,内置通讯协议冗余算法,保证AGV控制通讯实时性以及稳定性;
AGV上位机部分
以C++代码编写,通过RS232与AGV网关通讯,内置AGV调度控制逻辑以及算法,通过以太网连接至MES系统,达到对AGV定点控制,路径规划监控。
AGV通信协议和控制方法
通讯机制
协议 | AGV接收协议 | AGV应答协议 |
格式 | ||
举例 | FF AA [01]1 [01]2 [01]3 [00]4 [03]5 FF 55 说明 [01]1 发送给ID为01的AGV [01]2 命令码为01(说明该条命令为:获取基本信息) [01]3 数据内容长度为01 [00]4 数据内容为00 [03]5 01 + 01 + 01 + 00 = 03 | FF AA [03]1 [82]2 [01]3[01]4 [87]5 FF 55 说明 [03]1 ID为03的AGV发出的 [82]2 命令码为82(说明该应答命令为:设置RFID动作,最高位置位说明该条命令由AGV应答产生) [01]3 数据内容长度为01 [01]4 数据内容为01 [87]5 82 + 03 + 01 + 01 = 87 |
AGV所包含的状态信息
- 将AGV的基本信息作为一个包,成为基本信息包,这个包在多条通信协议中都涉及。以下是基本信息包的内容(20bytes)
AGV通讯协议内容
- 获取AGV状态信息
询问:
FF AA [01]1 [01]2 [01]3[00]4 [03]5 FF 55
应答:
FF AA [01]1 [81]2[14]3 [… 基本信息包 …]4 [XX]5 FF 55
- 设置AGV路径RFID
询问:
内容:更改动作时使用虚拟索引号0
索引(1字节) | 卡所对应的索引号,从1开始(1-100) |
卡号(4字节) | 卡号 |
卡动作(1字节) | 0:停靠 1:直行 2:左转 3:右转 4:掉头 |
例1:将卡号为“F6 1F 62 71”的卡,对应动作设置为停靠,并设置索引为3
FF AA [01]1 [02]2 [06]3 [ 03 F6 1F 62 71 00 ]4 [XX]5 FF 55
应答:
内容
应答标志位(1字节,int8_t) | 0:设置成功 1:设置成功,并覆盖掉了之前的动作 2:设置成功,动作未发生变化 -1:设置未成功,发送的卡号不符合要求 -2:设置未成功,发送的动作不符合要求 -3:设置未成功,卡信息存储空间已满 |
基本信息包 | 当基本信息包使能时,含有基本信息包,否则没有此内容 |
例1:设置成功
FF AA [01]1 [82]2 [15]3 [00 … 基本信息包 …]4 [XX]5 FF 55
例2:设置成功,动作未发生变化
FF AA [01]1 [82]2 [01]3[02]4 [86]5 FF 55
- AGV自动巡航
询问包 内容:
功能标志 (uint8_t) | 0:停止自动导航 1:开始自动导航 2:以左转为起始动作开始自动导航 3:以右转为起始动作开始自动导航 4:以掉头为起始动作开始自动导航 |
例1:开始自动导航
FF AA [01]1 [03]2 [01]3 [01]4[06]5 FF 55
应答包: 内容
应答标志位(1字节,int8_t) | 0:开始/停止成功 -1:开始/停止失败,命令不合法 -2:停止失败,当前模式并不处于自动模式 -3:开始失败,设备并非空闲: -4:开始失败,脱离轨道 -5:开始失败,急停开关按下 -6:开始失败,远程急停 -7:硬件故障,具体故障信息,查看基本信息中的状态标志 |
基本信息包 | 当基本信息包使能时,含有基本信息包,否则没有此内容 |
例1:开始/停止成功
FF AA [01]1 [83]2 [14]3 [00 … 基本信息包 …]4 [XX]5 FF 55
例2:停止失败,当前模式并不处于自动模式
FF AA [01]1 [83]2 [01]3 [FE]4 [XX]5 FF 55
- AGV手动控制
询问包
内容:
轮速(2字节,int8_t) | 左轮速度:-100~-1,1~100(cm/s) 右轮速度:-100~-1,1~100(cm/s) 当两轮速度都为0时,表示停止手动控制 |
行驶距离(2字节,uint16_t) | 设备中心点移动轨迹长,单位cm,范围1~1000。 当该值为0时,表示无限远。 |
例1:
FF AA [01]1 [04]2 [04]3 [30 50 C8 00 ]4 [XX]5 FF 55
应答包:
内容
应答标志位(1字节,int8_t) | 0:开始/停止成功 -1:开始/停止失败,命令不合法 -2:停止失败,当前模式并不处于手动模式 -3:开始失败,设备并非空闲或手动 -4:开始失败,急停开关按下 -5:开始失败,远程急停 -6:硬件故障,具体故障信息,查看基本信息中的状态标志 |
基本信息包 | 当基本信息包使能时,含有基本信息包,否则没有此内容 |
例1:开始/停止成功
FF AA [01]1 [84]2 [15]3 [00 … 基本信息包 …]4 [XX]5 FF 55
例2:停止失败,当前模式并不处于手动模式
FF AA [01]1 [84]2 [01]3 [FE]4 [XX]5 FF 55
- 开始巡航AGV
询问包
内容:
功能标志(uint8_t) | 设备沿轨道行驶,遇到RFID标签时停止,当设备收到巡航指令时,根据功能标志,先执行左转,右转,掉头或直接前进,再通过判断是否读取到RFID标签,执行停靠。 0:停止 1:直行 2:左转 3:右转 4:掉头 |
例1:遇到RFID左转
FF AA [01]1 [05]2 [01]3 [02]4 [09]5 FF 55
应答包:
内容
应答标志位(1字节,int8_t) | 0:开始/停止成功 -1:开始/停止失败,命令不合法 -2:停止失败,当前模式并不处于巡航模式 -3:开始失败,设备并非空闲: -4:开始失败,脱离轨道 -5:开始失败,急停开关按下 -6:开始失败,远程急停 -7:硬件故障,具体故障信息,查看基本信息中的状态标志 |
基本信息包 | 当基本信息包使能时,含有基本信息包,否则没有此内容 |
例1:开始/停止成功
FF AA [01]1 [85]2 [15]3 [00 … 基本信息包 …]4 [XX]5 FF 55
例2:停止失败,当前模式并不处于自动模式
FF AA [01]1 [85]2 [01]3 [FE]4 [XX]5 FF 55
- 远程急停AGV
询问包
内容:
功能标志 (uint8_t) | 1:设置成急停状态 0:解除急停状态 |
例1:设置成急停状态
FF AA [01]1 [06]2 [01]3 [01]4 [09]5 FF 55
应答包
内容
应答标志位(1字节,int8_t) | 0:设置/解除成功 -1:不合法 -2:远程急停已设置 -3:远程急停已解除 |
基本信息包 | 当基本信息包使能时,含有基本信息包,否则没有此内容 |
例1:设置/解除成功
FF AA [01]1 [86]2 [15]3 [00 … 基本信息包 …]4 [XX]5 FF 55
例2:远程急停已设置
FF AA [01]1 [86]2 [01]3 [FE]4 [XX]5 FF 55
- 读取参数
询问包
内容:
参数号 (uint8_t) | 需要读取的参数号 |
例1:读取网络ID
FF AA [01]1 [07]2 [01]3 [01]4 [0A]5 FF 55
应答包:
内容
状态标志(1字节,int8_t) | 0:成功 -1:不存在的参数号 |
参数号(uint8_t) | 读取的参数号 |
参数内容 | 参数的具体内容 |
例1:读取网络ID成功,并且为01
FF AA [01]1 [87]2 [03]3 [00 01 01]4 [8E]5 FF 55
- 设置参数
询问包
内容:
参数号(uint8_t) | 需要设置的参数号 |
参数内容 | 设置的参数内容 |
例1: 设置设备ID为01
FF AA [01]1 [08]2 [02]3[01 01]4 [0D]5 FF 55
应答包:
内容
状态标志(1字节,int8_t) | 0:成功 -1:不存在的参数号 -2:设置的内容不合法 |
参数号(uint8_t) | 设置的参数号 |
例1:设备ID设置成功
FF AA [01]1 [88]2 [02]3 [00 01]4 [8B]5 FF 55
5.2.4 网关配置
说明:配置网关时,网关设备ID为0x00
- 网关支持的AGV数量及ID号 配置
命令码:0x02
参数内容 | AGV数量(1 byte)+ AGV设备ID号(n bytes) 支持1-9 |
例:配置网关支持3台AGV,并且ID号依次为01 、02 、03
FF AA [00]1 [02]2 [04]3 [03 01 02 03]4 [XX]5 FF 55
网关应答:
内容
状态标志(1字节,int8_t) | 0:成功 -1:配置失败 |
设备ID(1字节)uint8_t | 上位机通信的目标设备 |
指令类型(1字节)uint8_t | 上位机操控的目标指令 |
例: 配置成功
FF AA [00]1 [82]2 [03]3 [00 00 00 ]4 [XX] FF 55
- 网关网络ID配置
命令码:0x01
参数内容 | 网络ID(1 bytes)支持0-99 |
例:配置网关网络ID为0x01
FF AA [00]1 [01]2 [01]3 [01]4 [03]5 FF 55
网关应答:
内容
状态标志(1字节,int8_t) | 0:成功 -1:配置失败 |
设备ID(1字节)uint8_t | 上位机通信的目标设备 |
指令类型(1字节)uint8_t | 上位机操控的目标指令 |
例: 配置失败
FF AA [00]1 [81]2 [01]3 [FF]4 [XX]5 FF 55
备注:异常处理+网关主动回复
- AGV掉线,网关使用固定命令码0x8F上传信息
例:3号AGV处于掉线状态
FF AA [03]1 [8F]2 [01]3 [01]4 [XX]5 FF 55
- 上位机必须先配置好AGV的网络ID才能去配置网关网络ID
- AGV传送带完成动作后,网关主动上传一次完成信息
例:1号AGV传送带动作完成
FF AA [01]1 [8F]2 [01]3 [02]4 [XX]5 FF 55
传输带控制
命令码:0x09
参数内容 | 动作类型(1 byte)1.左装货 2.左卸货 3.右装货 4.右卸货 |
- 设置1号AGV传送带左装货
FF AA [01]1 [09]2 [01]3 [01]4 [0C]5 FF 55
- 设置1号AGV传送带左卸货
FF AA [01]1 [09]2 [01]3 [02]4 [0D]5 FF 55
应答包:
内容
状态标志(1字节,int8_t) | 0 : 成功 -1: 设置的内容不合法 -2: 传送带当前状态非空闲 |
例1:动作设置成功
FF AA [01]1 [89]2 [01]3 [00]4 [8B]5 FF 55