欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于运动控制中圆弧过渡的简单演示(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)&&times<=(((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进行绘图,可得如下两图。
关于运动控制中圆弧过渡的简单演示(C++实现)(速度前瞻二)
图一:速度
关于运动控制中圆弧过渡的简单演示(C++实现)(速度前瞻二)
图二:位置

可见在整个过程中速度并没有明显的波动,所以这就是速度前瞻的作用—使得过渡处的速度平滑,减少冲击。

如有问题,欢迎联系作者。感谢。

相关标签: 算法实现