胡泊 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改得更小,不过要通过很多次测试确定具体数据.
这是早期所写,还可以写得更简略更好,但大体思想如此,即通过距离和轮速判断。
hym523 2008-6-11 10:11 AM
:victory:
yunkangliu 2008-10-16 08:30 AM
极有创意,学习一下。
jones 2008-10-17 09:58 PM
推荐的好,吐血就不用了啊。