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

news2024/11/25 9:22:18

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Blender如何打开IFC数据?

Blender如何打开IFC数据安装blenderbimIFC介绍下载和安装BlenderBIM插件Blender打开IFC数据对于一个外行人,当我想查看IFC数据的呈现形式时,但是我又没有Revit软件,那么我想到了Blender,网上查了只需要安装BlenderBIM插件&#xf…

表单验证[用户名、邮箱、密码、重复密码]

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>表单验证</title> <link rel"stylesheet" href"form.css"> <!-- 引入样式 --> &l…

C++语法3——if switch break continue的定义及用法

接上节 循环语句 这一节写的是判断语句 if else语句 基本语法&#xff1a; 第一种&#xff1a; if(bool(布尔变量)) {如果bool值为真执行的语句; } else {如果bool值为假执行的语句; }如果布尔表达式为 true&#xff0c;则执行 if 块内的代码。如果布尔表达式为 false&#x…

2023北京/上海/广州/深圳物联网产品经理班招生简章

NPDP产品经理国际资格认证是国际公认的唯一的新产品开发专业认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 我们针对互联网时代的个人、互联网企业、与传统企业推出一系列学习。 课程从…

第四十五讲:神州防火墙P2P流量控制配置

实验拓扑图如下所示 配置要求&#xff1a;出口带宽 100Mbps&#xff0c;外网为 eth0/1 接口&#xff0c; 内网连接两个网段172.16.1.0/24 和 192.168.1.0/24&#xff0c;需限制 P2P 应用其下行带宽为 10M&#xff0c;上传最大 5M。 配置步骤&#xff1a; 一、指定接口带宽 …

Struts2框架之result配置

Struts2框架之result配置result配置1、常用的结果类型1.1、dispather类型1.2、redirect类型1.3、redirectAction类型2、全局结果配置result配置 result配置一般与页面相关&#xff0c;请求经由对应Action处理后&#xff0c;返回一个字符串&#xff0c;根据返回的字符串找到对应…

为了让5G更省电,这家设备商秀出黑科技

近日&#xff0c;工信部发布了我国最新的《通信业经济运行情况》数据。根据数据显示&#xff0c;截止到11月末&#xff0c;我国5G基站总数已经达到228.7万个&#xff0c;比2021年底增加了86.2万个。这些数量庞大的基站&#xff0c;共同构建了一张规模庞大的5G网络。而这张网络&…

YOLOv5 CPU实时的实例分割教程-它来了!

一个不知名大学生&#xff0c;江湖人称菜狗original author: jacky LiEmail : 3435673055qq.comTime of completion&#xff1a;2023.1.6Last edited: 2023.1.6YOLOv5 CPU实时的实例分割教程-它来了&#xff01;简介前不久&#xff0c;ultralytics发布了一个yolov5 7.0版本&…

yolov8s网络模型结构图

yolov8&#xff01;&#xff01;&#xff01;&#xff01; yolov8&#xff01;&#xff01;&#xff01;&#xff01; yolov8&#xff01;&#xff01;&#xff01;&#xff01; yolov8&#xff01;&#xff01;&#xff01;&#xff01; yolov8真的来了&#xff01;&#…

2023,本命年向阳而生

2023&#xff0c;本命年向阳而生 ——Maynor的2022复盘及2023目标 幸运且努力 先说结论&#xff1a;2022年是极不平凡的一年。 有很多重大事件发生&#xff0c;且与我们的生活息息相关。最令人高兴的是疫情的缓解&#xff0c;2023年也将有更多的机会。 我在这一年经历的事…

FFMPEG入门资料---001---介绍和参数说明

文档介绍 1.1 文档目的 整理出开源代码 ffmpeg 的资料&#xff0c; 方便公司同事后续使用。 1.2 文档范围 较为详细的介绍 ffmpeg 的功能、使用以及二次开发。 1.3 读者对象 希望了解 ffmpeg 知识&#xff0c; 从事 USM 及 IPTV 的同事。 1.4 参考文献 无 1.5 术语与缩…

AcWing 4655. 重新排序(差分+前缀和+贪心)

一、题目信息 二、思路分析 这道题的话&#xff0c;其实只看前一句话&#xff0c;我们应该用的是前缀和算法。但是这道题在此基础上做了改变&#xff0c;我们根据前缀和可以算出排序之前各个区间和的和。 根据题意&#xff0c;我们需要对数组重新排序&#xff0c;使得排序之后…

VMware Workstation安装ESXI8.0

&#x1f388; 作者&#xff1a;互联网-小啊宇 &#x1f388; 简介&#xff1a; CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作&#xff0c;擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

反射看这一篇文章就够了

第一章 反射的概述 第1节 反射的概念 Java的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法,并且对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象方法的功能称为Java的反射机制. 第2节 反射理解 1如果存在反射,那…

实现 SpringBoot 项目中的隐私数据脱敏

实现 SpringBoot 项目中的隐私数据脱敏什么是数据脱敏如何实现数据脱敏注解使用demo什么是数据脱敏 为了避免“用户信息泄露”的风险项&#xff08;就是后台系统里用户的一些隐私数据直接明文显示了&#xff09;&#xff0c;其实指的就是要做数据脱敏。数据脱敏&#xff1a;把…

谷歌浏览器自带的翻译功能无法使用的解决办法

谷歌浏览器自带的翻译功能无法使用的解决办法 到 C:\Windows\System32\drivers\etc 目录找到hosts文件用记事本或者notepad打开在文件末尾添加&#xff1a;142.250.4.90 translate.googleapis.com要有管理员的身份才可以对hosts文件进行修改修改完毕以后&#xff0c;打开cmd命令…

MySQL 如何查找删除重复行

如何查找重复行 第一步是定义什么样的行才是重复行。多数情况下很简单&#xff1a;它们某一列具有相同的值。本文采用这一定义&#xff0c;或许你对“重复”的定义比这复杂&#xff0c;你需要对sql做些修改。本文要用到的数据样本&#xff1a; create table test(id int not …

解决Vue使用UEditor百度编辑器,上传图片服务配置问题

前言 查看文档前先查看http://fex.baidu.com/ueditor/#server-jsp 理解手册基本配置 此文档只针对TomcatWeb服务 vue版本为2.0版本和 vue-cli2.0 环境配置 需求配置实际项目配置JDK 1.6java version “19.0.1” 2022-10-18Apache Tomcat 6.0Server version: Apache Tomcat…

狂神说笔记——Nginx快速入门28

Nginx快速入门 在低并发的情况下&#xff0c;一个jar包启动应用就够了&#xff0c;然后内部tomcat返回内容给用户。 随着用户越来越多了&#xff0c;并发量慢慢增大了&#xff0c;此时一台服务器满足不了需求了。 于是进行横向扩展&#xff0c;又增加了服务器。这个时候几个项目…

VTK-路径规划

前言&#xff1a;本博文主要研究VTK中路径规划相关的内容&#xff0c;后期会持续更新路径规划相关的拓展应用&#xff0c;希望能给各位小伙伴一些帮助&#xff0c;也希望小伙伴们多多关注支持。 vtkGraphGeodesicPath 位置&#xff1a;..\Filter\Modeling 描述&#xff1a;路…