我不明白为什么这段代码不会运行。我正在为我的零机器人团队编写运动代码,我当前的系统是将速度目标设置为距离目标位置的每个初始距离的距离因子。我不是在寻找对代码的批评,但我很想了解为什么当我运行此代码时绝对没有发生任何事情——至少我希望会发生一些事情。球体只是坐在那里,什么都不做。
float tarPos[3];
float currDist[3];
float currPos[3];
float initPos[3];
float initDist[3];
float tarVelo[3];
float myZRState[12];
float powfResult[3];
void init()
{
api.getMyZRState(myZRState);
tarPos[0]=0.5f;
tarPos[1]=0.0f;
tarPos[2]=0.5f;
}
void moveTo(float target[3])
{
api.getMyZRState(myZRState);
currPos[0]=myZRState[0];
currPos[1]=myZRState[1];
currPos[2]=myZRState[2];
currDist[0]=tarPos[0]-currPos[0];
currDist[1]=tarPos[1]-currPos[1];
currDist[2]=tarPos[2]-currPos[2];
//tarVelo[0]=(100)*(currDist[0]);
//tarVelo[1]=(100)*(currDist[1]);
//tarVelo[2]=(100)*(currDist[2]);
tarVelo[0]=powfResult[0]*currDist[0];
tarVelo[1]=powfResult[1]*currDist[1];
tarVelo[2]=powfResult[2]*currDist[2];
api.setVelocityTarget(tarVelo);
//DEBUG (( "powf result 1, powf result 2, powf result 3, init dist 1, init dist 2, init dist 3 \t %f %f %f %f %f %f" , powfResult[0] , powfResult[1] , powfResult[2] , initDist[0] , initDist[1] , initDist[2] ));
}
void loop()
{
if (api.getTime()==0)
{
api.getMyZRState(myZRState);
initPos[0]=myZRState[0];
initPos[1]=myZRState[1];
initPos[2]=myZRState[2];
initDist[0]=tarPos[0]-initPos[0];
initDist[1]=tarPos[1]-initPos[1];
initDist[2]=tarPos[2]-initPos[2];
if (initDist[0]==0)
powfResult[0]=0;
else
powfResult[0]=(0.1508*(powf( initDist[0] , -0.56 )));
if (initDist[1]==0)
powfResult[1]=0;
else
powfResult[1]=(0.1508*(powf( initDist[1] , -0.56 )));
if (initDist[2]==0)
powfResult[2]=0;
else
powfResult[2]=(0.1508*(powf( initDist[2] , -0.56 )));
}
moveTo(tarPos);
}
编辑:找到解决方案!我把这个交给了我学校的编程高手(他的名字叫 Bryce,你以后可能要留意他。完全的天才),还有我的计算机科学老师,他们发现需要一个[code] powfResult [/code] 初始化中 [code] initDist [/code] 周围的绝对值。谢谢你的帮助!