机器人路径规划问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

原理 设:U(X)为总引力场,()att U x 为目的地引力场,()rep U x 为障碍物排斥场;F(X)为总引力,()att F x 为引力,()rep F x 为斥力;,k η是正比例位置增益系数,0,,g X X X 分别代表机器人,目标和障碍物在空间中的位置。(,)||g g X X X X ρ=-表示机器人与目标之间的距离。00(,)||X X X X ρ=-为机器人在空间的位置与障碍物之间的距离。常数0ρ代表障碍物的影响距离,应根据障碍物和目标点的具体情况而定。

引力势场函数为: 21()(,)2

att g U X k X X ρ= 斥力势场函数为:

2000000111(,)()2(,)0

rep X X U X X X X X ηρρρρρρ⎧⎡⎤⎪-≤⎢⎥=⎨⎣⎦⎪>⎩ 总势场函数为:

()()()att rep U X U X U X =+

力函数F(X)是势场函数U(X)的负梯度。

机器人所受的引力为:

()()att g F X k X X =-

斥力为:

00200000111 (,)()(,)(,)0 (,) rep X X F X X X X X X X ηρρρρρρρ⎧⎡⎤-≤⎪⎢⎥=⎨⎣⎦⎪>⎩

合力为:

()()()att rep F X F X F X =+

实验步骤 根据上述原理进行做实验,力求确定主要参数影响距离0ρ,引力参数k ,斥力系数η,以及机器人运动的步长l 。步骤:

(1) 简历地图,确定机器人目标和障碍的位置,并确定矢量势场模型的矢量初始参数;

(2) 计算机器人到球的距离,计算吸引力矢量;

(3) 计算球场上障碍物对机器人的位置斥力,判断是否需要避障,计算斥力矢量;

(4) 计算引力矢量和斥力矢量的和,并将该和矢量分解到x 和y 轴上,继而确定机器人下一步的位置点;

(5)然后回到步骤(2),直到该位置点为终点。

核心代码:

void find_Attract(double *Yatx,double *Yaty,int h0,int w0)//求引力

{

double angle,r;

r=sqrt((100-h0)*(100-h0)+(1100-w0)*(1100-w0));

angle=acos((1100-w0)/r);

*Yatx=k*r*cos(angle);

*Yaty=k*r*sin(angle);

return;

}

void find_repulsion(BYTE *pImg,int width,int height,double *Yrerx,double *Yrery,int h0,int w0)//求斥力{

BYTE *pCur=pImg;

int h,w;

double Yrer=0.0,sumx=0.0,sumy=0.0,angle,d;

for(h=0;h

for(w=0;w

{

if(*(pCur+h*width+w)==100)

{

d=sqrt((h-h0)*(h-h0)+(w-w0)*(w-w0));

if(d

{

if(w>w0)

angle=acos((w-w0)/d);

else

angle=pi-acos((w0-w)/d);

Yrer=-m*(1/d-1/p)/d/d;

sumx+=Yrer*cos(angle);

sumy+=Yrer*sin(angle);

}

}

}

*Yrerx=sumx;

*Yrery=sumy;

return;

}

void main()

{

BYTE *pImg,*pCur;

int width,height;

pImg=Read8BitBmpFileImg("map.bmp",&width,&height);

pCur=pImg;

int h0=1100,w0=100;

double Yatx=0.0,Yaty=0.0,Yrerx=0.0,Yrery=0.0,Fsumx=0.0,Fsumy=0.0;

double theta;

do{

find_Attract(&Yatx,&Yaty,h0,w0);

find_repulsion(pImg,width,height,&Yrerx,&Yrery,h0,w0);

Fsumx=Yatx+Yrerx;

Fsumy=Yaty+Yrery;

theta=atan(Fsumy/Fsumx);

w0+=l*cos(theta);

h0-=l*sin(theta);

*(pImg+width*h0+w0)=255;

}while(h0!=100 && w0!=1100);

Write8BitImgBmpFile(pImg,width,height,"route.bmp");

}

运动路线

相关文档
最新文档