基于C++的AGV机器人无线控制实现

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所包含的状态信息

  1. 将AGV的基本信息作为一个包,成为基本信息包,这个包在多条通信协议中都涉及。以下是基本信息包的内容(20bytes)

AGV通讯协议内容

 

  1. 获取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

  1. 设置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

  1. 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

  1. 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

  1. 开始巡航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

  1. 远程急停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

  1. 读取参数

询问包

     内容:

参数号

(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

  1. 设置参数

询问包

     内容:

参数号(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

  1. 网关支持的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

  1. 网关网络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

备注:异常处理+网关主动回复

  1. AGV掉线,网关使用固定命令码0x8F上传信息

  例:3号AGV处于掉线状态

 FF AA [03]1 [8F]2 [01]3 [01]4 [XX]5 FF 55

  1. 上位机必须先配置好AGV的网络ID才能去配置网关网络ID
  2. 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. 设置1号AGV传送带左装货

FF AA [01]1 [09]2 [01]3 [01]4 [0C]5 FF 55

  1. 设置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

 

### 回答1: AGV代表自动导引车,是一种能够自主运行,无人操控的物流运输工具。而STM32则是一种嵌入式微控制器,常用于实现AGV的硬件控制和控制算法。 在AGV的STM32代码中,首先需要实现底层硬件的驱动。这包括与电机、传感器、激光导航等硬件设备的通信和控制。STM32提供了丰富的外围接口和内部模块,方便与各种硬件设备进行连接,例如GPIO口、PWM输出、USART串口等。 其次,AGV的STM32代码需要实现控制算法。这包括路径规划、避障、速度控制等功能。路径规划算法可以根据AGV的起始点和目标点,计算出最优路径,并生成相应的轨迹。避障算法可以对传感器获取的障碍物信息进行处理,避免AGV与障碍物的碰撞。速度控制算法可以根据目标速度和当前速度,调整电机的转速,以实现平滑的加速和减速。 此外,AGV的STM32代码还需要实现上位机的通信。上位机可以通过串口或者以太网等方式与AGV进行数据交互,例如下发任务指令、接收AGV的状态反馈等。STM32提供了多种通信接口和协议支持,例如UART、CAN、Ethernet等,可以根据实际需求选择最适合的通信方式。 最后,AGV的STM32代码需要考虑系统的稳定性和安全性。代码中需要进行各种异常处理和错误检测,以保证AGV的安全运行。例如,如果传感器异常或者控制算法出错,需要及时报警或者采取相应的措施,确保AGV的运行不会对人员和设备造成伤害。 总之,AGV的STM32代码在实现底层硬件驱动、控制算法、与上位机通信等方面起到至关重要的作用,通过合理的编码和优化算法,可以实现高效、安全、稳定的AGV运行。 ### 回答2: STM32 是意法半导体推出的一系列32位单片机。AGV(自动导引车辆)是一种能够自主运行并执行物料搬运任务的智能机器人。在设计和开发AGV时,可以使用STM32芯片来编写AGV的控制代码。 STM32芯片具有强大的处理能力和丰富的外设资源,非常适合用于开发控制系统。编写AGV的控制代码时,可以使用STM32的相关开发工具和软件库。 在AGV的代码中,需要实现各种传感器的数据采集和处理,比如激光雷达、红外传感器、编码器等。可以使用STM32的GPIO接口来读取传感器信号,并使用相应的库函数处理和解析数据。 除了传感器数据的处理外,还需要实现AGV的运动控制。可以使用STM32的定时器和PWM输出来控制电机的驱动器,实现AGV的移动、转向等动作。同时,还可以使用STM32的串口接口与外部设备进行通信,比如PC、PLC等,实现AGV与其他系统之间的数据交互和控制。 在代码编写过程中,需要熟悉STM32平台的开发环境,比如Keil、CubeMX等,以及相关的编程语言,比如C语言。同时还需要学习STM32的相关文档和资料,了解芯片的特性和技术细节,以便更好地进行代码编写和调试。 总之,使用STM32芯片编写AGV的控制代码需要一定的硬件和软件开发经验,以及对STM32平台的熟悉。通过合理的设计和编写,可以实现一个高性能、稳定可靠的AGV系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

!chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值