关于运动控制中圆弧过渡的简单演示(C++实现)(速度前瞻二)
程序员文章站
2022-04-10 23:46:09
...
参考前文的插补轨迹,可以发现在两条直线的交点处,是以圆弧来进行过渡的。
那么这种过渡的位置与速度的关系是什么样的呢,在过渡处,实际上是走的圆弧插补的,所以,在过渡的过程中,从直线插补到原话插补,速度的大小并没有很大的变化,甚至是不变化,也不需要变化,实际变化的是X,Y方向上的速度大小的变化。
在整个插补过程中,速度与位置的关系实现过程如下:
void Speed()
{
ofstream out(".\\speed.txt",ios_base::ate);
double startv=0;
double endv=100;
double aa=1000;
double tempv;
double times=0;
double tinterval=0.01;
double temp_time=0;
double tem_pos;
while(TRUE)
{
if(times<=0.1)
{
tempv=aa*times; //速度
tem_pos=aa*times*times/2;
}
else if((times>0.1)&×<=(((106.5*sqrt(float(2))+PI*sqrt(float(2))/8-5)/100)+0.1))
{
tempv=endv;
tem_pos=5+endv*(times-0.1);
temp_time=times;
}
else if(times>(((106.5*sqrt(float(2))+PI*sqrt(float(2))/8-5)/100)+0.1))
{
tempv=endv-(times-temp_time)*aa;
tem_pos=(106.5*sqrt(float(2))+PI*sqrt(float(2))/8)+endv*(times-temp_time)-aa*(times-temp_time)*(times-temp_time)/2; //实际位置
if(times>=(((106.5*sqrt(float(2))+PI*sqrt(float(2))/8-5)/100)+0.2))
{
cout<<tempv<<" "<<tem_pos<<"\n";
out<<tempv<<" "<<tem_pos<<"\n";
break;
}
}
times=times+tinterval;
cout<<tempv<<" "<<tem_pos<<"\n";
out<<tempv<<" "<<tem_pos<<"\n";
}
}
可以得到速度与位置的数据,使用matlab进行绘图,可得如下两图。
图一:速度
图二:位置
可见在整个过程中速度并没有明显的波动,所以这就是速度前瞻的作用—使得过渡处的速度平滑,减少冲击。
如有问题,欢迎联系作者。感谢。