查看完整版本: 【转载】吐血奉献:刹车函数(让小车迅速停止在一点)

胡泊 2007-8-12 08:33 AM

【转载】吐血奉献:刹车函数(让小车迅速停止在一点)

void Stop(Robot *robot,double x,double y)
{
double d_e,dx,dy;
dx = x - robot->pos.x;
dy = y - robot->pos.y;
d_e = sqrt(dx * dx + dy * dy);
if(robot->velocityLeft>=100)
{
  if(d_e>1)
  {
   if(d_e>9)Position(robot,x,y);
   else
   {
    robot->velocityLeft=-125;//这里应该改成-125*dir,dir初始值为1,当小车反向运动时值为-1
    robot->velocityRight=-125;
   }
  }
  else
  {
   robot->velocityLeft=0;
   robot->velocityRight=0;
  }
}
else if(robot->velocityLeft>=80)
。。。。。。
(下面还有很多种情况,恕不写出,自己写出来测试一下。上面的具体数据不适用于所有人,根据自己的position的速度确定)


注:该函数为本人自己所写,经无数次测试,效果相当好,能让小车以最大的反向加速度精确地停在一点,但如果小车刚开始运动时距目标点很近的话(比如1或者几个单位),以上的设置(即让小车在距离目标为1时轮速为0)则无效,这时需要把1改得更小,不过要通过很多次测试确定具体数据.
    这是早期所写,还可以写得更简略更好,但大体思想如此,即通过距离和轮速判断。

jones 2007-8-16 08:19 AM

:) :) :)

胡泊 2007-9-2 05:35 PM

忘了说了,FIRA仿真的

hym523 2008-6-11 10:11 AM

:victory:

yunkangliu 2008-10-16 08:30 AM

极有创意,学习一下。

jones 2008-10-17 09:58 PM

推荐的好,吐血就不用了啊。
页: [1]
查看完整版本: 【转载】吐血奉献:刹车函数(让小车迅速停止在一点)