基于C++的AGV机器人无线控制
创始人
2024-04-19 05:02:44
0

1 AGV系统概述

1.1AGV原理

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上可以安装机器人或机器手,在特殊工作环境下代替人工作业。例如在核电站中代替人在具有放射线的工作环境下进行遥控作业。

2、AGV上位机部分

以C++代码编写,通过RS232与AGV网关通讯,内置AGV调度控制逻辑以及算法,通过以太网连接至MES系统,达到对AGV定点控制,路径规划监控。

AGV的系统拓扑图大致如下:

3、AGV控制代码的编写和分析

串口通讯代码编写设置串口号,并选择波特率为115200

void CMainDlg::OnBtnSerialPort() // 左上角icon按钮

{

    if (simpleCom->IsOpen())

    {

       simpleCom->Close();

    }

    else

    {

       SComboBox* pComboBox = FindChildByName2(L"cbx_test");

       int nItem = pComboBox->GetCurSel();

       if (nItem == -1)

           return;

       int data = pComboBox->GetItemData(nItem);

       simpleCom->Open(data, 115200);

    }

    bool bOpen = simpleCom->IsOpen();

    SWindow *pButton = FindChildByName(L"btn_serialport");

    if (bOpen)

    {

       pButton->SetWindowTextW(L"已连接");

    }

    else

    {

       pButton->SetWindowTextW(L"连接");

    }

}

     /**************************/

     //判断串口是否连接

     bool bOpen = simpleCom->IsOpen();

     SWindow *pButton = FindChildByName(L"btn_serialport");

     if (bOpen)

     {

            pButton->SetWindowTextW(L"已连接");

     }

     else

     {

            pButton->SetWindowTextW(L"连接");

     }

     m_bLayoutInited = TRUE;

     return 0;

}

 按键相应控制

/**************************/

//AGV前进响应函数

void CMainDlg::OnBtnMoveFront()

{

     //判断串口是否已连接

     bool bOpen = simpleCom->IsOpen();

     if (bOpen == false)

     {

            ShowMessageBox(L"请连接串口");

            return;

     }

     int flag = 1;

     SEdit* pComboBox = FindChildByName2(L"edt_agvinfo");//找到控件

     int agvid = _ttoi(pComboBox->GetWindowTextW());//转换为ID号

     SSliderBar* pSliderBar = FindChildByName2(L"slider_test");//找到控件

     int value = pSliderBar->GetValue();

     int left = 0;

     int right = 0;

     switch (flag)

     {

     case 1:

            left = right = value;

            break;

     case 2:

            left = value;

            break;

     case 3:

            right = value;

            break;

     case 4:

            left = right = (value*-1);

            break;

     default:

            break;

     }

     simpleRobot->cmdRemoteMode(agvid, left, right);

}

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...