往期浏览

您的位置:首页 往期浏览 权威论坛内容页面

P157 自动导引车系统运行路径规划软件的开发

来源:2017年第10期(总第210期) 作者:新松机器人自动化股份有限公司 浏览:

摘要:自动导引车系统(AGVS)是现今工业自动化系统内一种比较典型的应用,与其相关的研究与开发方向很多。本文阐述了在Visual C++可视化编程环境下如何规划AGV运行路径,并探讨了地图的开发步骤和方法。本文介绍的地图生成软件按照AGVS的客观要求,实现了自动导引车运行环境中路径、建筑物及地面设备的可视化绘制、编辑、保存,并最终形成特定格式的地图数据文件用以控制AGV的现场运行。
 
关键词:自动导引车系统、地图、路径规划、软件开发
 
        自动导引车系统(Automated Guided Vehicle System)通常被称为AGVS,是广泛应用于柔性生产线、自动化仓库、无人车间等领域的一种无人驾驶输送系统。一个AGVS由多台AGV及中央监控系统、通信系统、导引系统、充电系统、地面辅助系统等组成。目前的AGV大多是以固定路线运行的。固定路线在AGVS中通常被称为地图,其作用是导引AGV小车进行往复循环运行。
 
       本文详细描述了在Visual C++(微软公司的C++开发工具,具有集成开发环境,可提供C++等编程语言)可视化编程环境下如何规划AGV运行路径,研究地图的开发步骤和方法。本文介绍的地图生成软件按照AGVS的客观要求,实现了自动导引车运行环境中路径、建筑物及地面设备的可视化绘制、编辑、保存,并最终形成特定格式的地图数据文件用以控制AGV的现场运行;软件实现了各种路径连接点的相关特性,实现了路径自动编号、查找,可以随时更改地图坐标原点,进行无极缩放和滚动,能根据实际需要对地图进行编辑修改。能进行地图有效性验证,保证AGV运行的安全可靠;在地图绘制过程中,软件还具有自动跟踪、智能判断以及提示功能,保证用户十分轻松地完成各种复杂的操作。
 
一、路径规划软件的图形基础
         由于本软件基于图形界面,所以首先需要确立必要的图形基础。
 
1.定义图形对象
         根据Visual C++面向对象的特性,把地图中各种构成要素抽象为不同的类别,如建筑物类、地面设备类及路径类。建筑物基类又可分为圆形建筑物、方形建筑物等不同类型的建筑物;设备基类可分为方形设备、多边形设备等不同类型的设备;路径基类可分为直线路径、圆弧路径、侧移路径等不同类型的路径。对地图中各图形元素的操作,实际上就是对以上定义的各个类型对象的操作。
 
2.确定屏幕的映射方式
        一般情况下,屏幕绘图都以像素作为绘图单位,称之为设备坐标。在进行绘图操作的时候,不可避免要用到设备坐标系。WINDOWS提供了几种映射方式(或称坐标系),可以通过它们来和设备上下文相联系。一般来说,最常用的就是WM_TEXT方式,在此软件设计中也采用WM_TEXT方式。在WM_TEXT坐标方式下,坐标被映射到像素,X值向右方递增,Y值向下方递增。当确定了设备上下文的映射方式之后,就可以利用CDC类的LptoDP函数及DPtoLP函数,在逻辑坐标和设备坐标之间进行转换,为图形在屏幕上的显示做好准备。
 
3. 系统坐标的变换
         由于本软件是有关地图操作的,所以其呈现在用户面前的坐标系应该是符合人们日常习惯的以米为单位的笛卡尔坐标系,即X值向右方递增,Y值向上方递增,这与上面采用的WM_TEXT屏幕映射方式有概念上的差异,因此需要推导一套坐标变换公式实现两套坐标系之间的转换。
 
        程序中最终存储的各图形元素的坐标为实际坐标,使用DPtoVP函数把实际坐标转换为逻辑坐标,即可实现屏幕显示。相反,使用VPtoDP函数把屏幕图形的逻辑坐标转换为实际坐标,即可实现坐标的存储。
 
二、软件设计的指导思想和实现方法
以下详细描述该软件的设计思想及实现方法,具体划分为几个不同方面:
1. 图形的画法实现
         地图中包括路径类、建筑物类、设备类等三大类图形,每一类中又包括十几种不同的图形元素,面对如此种类繁多的图形对象,软件应该提供十分丰富的画法,如直线路径的画法有给定起点画法、给定起点及终点画法、给定倾角及长度画法、鼠标任意拖拽画法等;圆弧也可以根据其旋转方向的不同而选择不同的画法。由于图形元素太多,画法也各异,不便一一介绍,在此选择比较有代表性的圆弧画法进行介绍。
 
         假设通过工具栏选择顺时针鼠标拖拽画弧,首先在程序中构建一个圆弧类对象,在视图类的鼠标移动事件响应函数OnMouseMove中将光标的形状设置为十字形,等待按下鼠标选取圆弧起点。一旦按下鼠标左键,在视图类的鼠标单击事件响应函数OnLButtonDown中便可得到圆弧对象的起点m_pntStart,此后移动鼠标进入选取圆心阶段,同样在OnMouseMove函数中进行处理,在屏幕上画出以鼠标当前点为圆心且经过m_pntStart点的一个圆,并画出圆的半径。随着鼠标的移动,圆和半径也不断更新,提示操作者将要得到的圆弧便在此圆周上。当再次按下鼠标左键,便选中了鼠标的按下点作为圆弧的圆心。此后便进入圆弧选取阶段,当再次按下鼠标左键并拖动时,屏幕上出现一段以m_pntStart为起点并随鼠标移动不断改变弧长的圆弧,此时抬起鼠标左键,便可得到圆弧的终点。其值为经过两点(鼠标按下点及圆心点)的直线与圆周的交点。至此一段圆弧绘制完毕,同时在程序中保存此圆弧类对象到程序的图形对象数组中。同理,可以完成各种图形元素的绘制及保存工作。图1可简要说明圆弧动态画法。
 
 2.图形的选中
         对于地图软件视图窗口中的所有图形元素,都可以用鼠标来进行选中操作,被选中的图形以不同于平时的方式进行显示,并且可以进行属性的修改操作。由于操作鼠标准确度的差异,对于封闭图形还好办,只要鼠标落点在封闭的面积范围内就可以将其认为是要选中的图形,而对于像直线圆弧之类的线条形的图形元素来说,鼠标按下点往往很难恰好落在图形上。解决这个问题当然不能强求操作者,而要在软件上实现一定程度的模糊控制。
 
        具体做法在此举两个例子:第一个例子是直线路径。从数学上来讲,直线路径实质上就是一条直线段,软件在这条直线段的两侧及两端点附近开放一定范围,具体的范围值依据操作的灵活程度来确定。本软件的开放范围定为4个像素,只要在此范围内按下鼠标键,便选中图形。第二个例子是圆弧路径。对于圆周上的一段圆弧,要判断一点是否在其上,首先要判断此点到圆心的距离是否等于圆的半径,然后要判断此点相对于圆心的角度是否在圆弧两个端点相对于圆心的角度范围内,如果鼠标按下点满足以上两个条件,便选中图形。然而如果按照上面的做法要用鼠标选中一个圆弧是相当困难的,解决的方法是放宽点到圆心距离的判断条件,实现了在一定的区域范围内进行选中操作。对于其它图形,软件也都做了不同的处理。上页代码举例说明圆弧路径的选中操作,如图3:
 
3.软件中某些智能画法的实现
        在进行路段绘制时,大多数情况要求与某条已存在的路段相连。要实现路段相连,可以用给定起点的方法画路段。但这种方法的不足之处是需要手工输入起点坐标,为此软件提供了两种比较智能的方法实现路段的相连画法:第一种方法称为自动跟踪法,即当移动鼠标到路段的端点(设为PointA点)附近时(几个像素范围内),按下鼠标左键,程序将自动取PointA点作为将要绘制的路段的起点。第二种方法称为参考路段法。当操作者需要在路段端点比较集中的区域内选择一条路段端点作为绘图起点时,利用自动跟踪法往往很难选中预期的起点,此时便可以利用参考路段法。首先选中一条路段,该路段将以选中状态显示;一旦选中了参考路段并指定了参考点,接下来的路段绘制将无条件地以参考路段的参考点作为绘制的起点。    
 
        一般来说,AGV系统的运行路线至少有一段是闭合曲线。绘制由首尾相连的路段组成的封闭图形,最大的难点往往不是路段绘制的本身,而是如何最后实现地图的闭合;因为最后一条路段的终点往往不能恰好与将要相连路段的起点重合,即使对其中某一点的坐标进行修正,也很难满足连接点的相切特性。基于以上原因,软件提供了一种非常智能的方法,一步即可实现地图的闭合,且满足相切性的要求,这就是圆弧连接法。此项功能的实现主要是根据两条直线的直线方程、端点坐标及两直线夹角平分线的直线方程,计算出满足相切条件的圆方程,进而得到所需的圆弧。
 
三、结论
        本文所介绍的AGV系统运行路径的规划与开发方法,是以Visual C++6.0为编译环境所开发的WINDOWS图形应用程序,并且已经在实际工程中得到广泛应用,特别是在美国通用全球多个汽车制造厂的应用,AGV系统的稳定性及易用性得到了一致好评。由于C++语言本身面向对象的特性及代码的可重用性,使得本软件的后期完善和维护工作变得相对简单,即使进行功能上大的改动也不会浪费太多的人力、财力。
 
作者单位为新松机器人自动化股份有限公司



版权声明:

未经特别书面授权禁止所有媒体及网站转载本站所有文章内容。如有违反者构成犯罪的,依法追究刑事责任。 所有媒体及网站要转载本站的任何内容请来信申请,请E-Mail:bjb@edit56.com 或者致电:(010)82387518 联系。