机器人避障问题研究

2013-04-29 15:43高晓妹
教育教学论坛 2013年6期
关键词:最短路径

高晓妹

摘要:根据建模提出的问题,本文建立了机器人在可行区域范围内从某一点出发绕过一个避障点到达目标点的最短路径,编写lingo程序在lingo11软件中经过多次调试,找到了从O出发绕过第五个障碍物左上角顶点到达A的最短路径和最短路径长度。

关键词:linggo程序;避障点;圆弧长;切线长;最短路径

中图分类号:G642.3 文献标志码:B 文章编号:1674-9324(2013)06-0075-02

一、问题的提出

在一个310×310的平面场景内,在原点O(0,0)点处有一个机器人,它只能在该平面场景范围内活动。在平面场景中有3个形状分别为正方形、长方形、三角形的不同区域,是机器人不能与之发生碰撞的障碍物,这些障碍物的顶点坐标分别为:正方形E(80,60)、F(80,210)、G(230,210)、H(230,60),长方形B(60,300)、I(60,310)、J(235,310)、C(235,300),三角形K(280,100)、M(310,100)、N(310,200)。障碍物外指定一点为机器人要到达的目标点(要求目标点与障碍物的距离至少超过10个单位)。机器人的行走路径满足如下假设:(1)行走路径由直线段和圆弧组成,其中圆弧是机器人转弯路径。(2)机器人不能折线转弯,转弯路径由与直线路径相切的一段圆弧组成,也可以由两个或多个相切的圆弧路径组成,但每个圆弧的半径最小为10个单位。(3)为了不与障碍物发生碰撞,同时要求机器人行走线路与障碍物间的最近距离为10个单位,否则将发生碰撞,若碰撞发生,则机器人无法完成行走。请建立机器人从区域中一点绕过一个障碍物顶点到达另一点的避障最短路径的数学模型。对于平面场景图中2个点,具体计算机器人从O(0,0)出发,到达A(300,300)的最短路径。注:要给出路径中每段直线段或圆弧的起点和终点坐标以及机器人行走的总距离。数据结果精确到小数点后两位。

二、模型分析

根据假设3,机器人的行走路径在必须在以各障碍物周围10个单位以外区域内进行,要使行走路径最短,若不绕过避障点(障碍物的顶点),则以直线路径行走,若要绕过避障点,则行走的直线必须与以避障点为圆心的圆相切,再在以避障点为圆心的圆上行走一段圆弧,最后再以切线方向走向另一段直线或圆弧,且转弯时的圆弧半径要最小,即转弯圆弧半径为10个单位。根据机器人行走的路径情况,我们建立如下模型。

三、模型建立

1.根据以上分析,机器人的行走路径为从一个点出发直线到达以避障点为圆心的圆的圆周上的某一点,或从以避障点为圆心的圆的圆周上一点出发直线达到另一点,简化为从一点出发向一个以避障点为圆心的圆做切线。设圆外两点坐标为(a,b),(e,f),避障点的坐标为(c,d),以避障点为圆心的圆的半径为r,则圆的方程为(x-c)2+(y-d)2=r2,过点(a,b)作此圆的切线,切点坐四、模型求解

计算机器人从O(0,0)出发,绕过避障点到达A(300,300)的最短路径。可选路径有两条,分别是:第一条路径为从O出发绕过避障点F(80,210)到达A。第二条路径为从O出发绕过避障点H(230,60)到达A。

1.由于直线OA的斜率为1,直线EG的斜率也为1,由此可知OA与EG平行,直线EG在直线OA的下方,作点H关于直线OA的对称点H1,其坐标为(60,230),点H1、F、H在一条直线上且与直线OA垂直,点H1到直线OA的距离大于点H到直线OA的距离,故最短路径为第一条路径。

2.路径长度的计算。①第一条路径总长度L的计算。前面已经说明,拐弯半径越小,路径越短,最小半径为10。故以F为圆心作半径为10的圆,过点O作圆F的切线,切点1的坐标(x1,y1),切点1有两种可能,所以切点1的坐标必须满足x1<80,y1>210;过点A作圆F的切线,切点2的坐标为(x2,y2),切点2同样有两种可能,故它的坐标必须满足x2<80,y2>210。将有关数据O(0,0),A(300,300),避障点F(80,210),半径r=10代入方程①②③④⑤⑥⑦,编写lingo程序,在lingo11中运行程序得到如下结果:各切点坐标为x1=70.51,y1=213.14,x2=76.61,y2=219.41。各段路径长度依次为L1=224.50,L2=9.05,L3=237.49。第一条路径总长度(最短路径长度)为L=471.04。所用的lingo程序如a=80;b=210;c=300;d=300;x1b;x2b;x1*(x1-a)+y1*(y1-b)=0;(x1-a)^2+(y1-b)^2=100;(x2-a)^2+(y2-b)^2=100;(x2-c)*(x2-a)+(y2-d)*(y2-b)=0;l1=((x1^2+y1^2))^0.5;l2=20*@asin(((x1-x2)^2+(y1-y2)^2)^0.5/20);l3=((x2-300)^2+(y2-300)^2)^0.5;l=l1+l2+l3;②第一条路径总长度L的计算。对于第二条路径,将有关数据O(0,0)、A(300,300)、避障点坐标H(230,60)、半径r=10代入①②③④⑤⑥⑦,并将上面程序中的“a=80;b=210;”改成“a=230;b=60;”把坐标满足的条件加以修改,即把“x1b;”改成“x1>a;y1

五、模型评价

本文主要使用lingo程序进行数值计算,对于其他过圆外一点作圆的切线,求切点,本文所编写的程序大多可以运行。由于lingo版本的不同,有些程序不能正确运行得出所需结果。如果能够使用matlab程序,可能会好一些。

猜你喜欢
最短路径
“互联网+”时代下滴滴快车补贴方案对打车难问题的影响
Dijkstra算法设计与实现
基于Dijkstra算法的优化研究
图论最短路径算法的图形化演示及系统设计
不确定条件下物流车最优路径选择研究
最佳游览路线生成方案的设计与实现
基于NFC的博物馆智能导航系统设计
XML数据公交信息查询优化算法及实现
基于洪泛查询的最短路径算法在智能交通系统中的应用
求所有最小点成本最短路径算法