智能车制作
标题:
电磁组舵机控制的进来看一下
[打印本页]
作者:
1074347664
时间:
2014-7-8 02:57
标题:
电磁组舵机控制的进来看一下
不知道有人参考国防科技大学铁军二师的技术报告,小弟略有点不懂 想请教一下,主要是这个位置解算算法有几个值不知道是什么意思
void Getanticipateposition1(void) //获取小车运行期望位置(用双排X Y进行决策,X用多项式插值)
{
uint8 i,num;
for(i=99;i>0;i--)
{
position1[i]=position1[i-1];
}
a=-0.0007*ADx1[0]+0.0013*ADx1[1]-0.0013*ADx1[2]+0.0007*ADx1[3];
b=0.0067*ADx1[0]-0.0067*ADx1[1]-0.0067*ADx1[2]+0.0067*ADx1[3];
c=0.0167*ADx1[0]-0.1333*2.0*ADx1[1]+0.1333*2.0*ADx1[2]-0.0167*ADx1[3];
//a=a*100.00;
lmax=ADx1[0]; //取最大值
num=0;
for(i=1;i<4;i++)
{
if(ADx1[i]>lmax)
{
lmax=ADx1[i];
num=i;
}
}
switch(num)
{
case 0: //if(ADx1[0]-ADx1[1]>4)
if(ADx1[0]-ADx1[1]>4)
{
gp=(ADx1[1]-132.7)/5.975;
position1[0]=gp;
if(position1[0]<-15)
position1[0]=-15;
}
else
{
p1=(-2.0*b+sqrt(4.0*b*b-12.0*a*c))/(6.0*a);
p2=(-2.0*b-sqrt(4.0*b*b-12.0*a*c))/(6.0*a);
p3=6.0*p1*a+2.0*b;
if(p3<0)
position1[0]=p1;
else
position1[0]=p2;
}
break;
case 1: p1=(-2.0*b+sqrt(4.0*b*b-12.0*a*c))/(6.0*a);
p2=(-2.0*b-sqrt(4.0*b*b-12.0*a*c))/(6.0*a);
p3=6.0*p1*a+2.0*b;
if(p3<0)
position1[0]=p1;
else
position1[0]=p2;
break;
case 2: p1=(-2.0*b+sqrt(4.0*b*b-12.0*a*c))/(6.0*a);
p2=(-2.0*b-sqrt(4.0*b*b-12.0*a*c))/(6.0*a);
p3=6.0*p1*a+2.0*b;
if(p3<0)
position1[0]=p1;
else
position1[0]=p2;
break;
case 3: //if(ADx1[3]-ADx1[2]>4)
if(ADx1[3]-ADx1[2]>4)
{
gp=(132.7-ADx1[2])/5.975; //同上
position1[0]=gp;
if(position1[0]>15)
position1[0]=15;
}
else
{
p1=(-2.0*b+sqrt(4.0*b*b-12.0*a*c))/(6.0*a);
p2=(-2.0*b-sqrt(4.0*b*b-12.0*a*c))/(6.0*a);
p3=6.0*p1*a+2.0*b;
if(p3<0)
position1[0]=p1;
else
position1[0]=p2;
}
break;
}
psum=ADx1[0]+ADx1[1]+ADx1[2]+ADx1[3];
if(psum<65) //这个量也需要重新测定
{
if(position1[1]<-5)
position1[0]=-15;
else if(position1[1]>5)
position1[0]=15;
paopianflag=1;
}
else
{
paopianflag=0;
}
if(position1[0]>15)
position1[0]=15;
if(position1[0]<-15)
position1[0]=-15;
}
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2