【问题标题】:Zero Robotics movement code isn't working零机器人运动代码不起作用
【发布时间】:2013-09-27 16:53:14
【问题描述】:

我不明白为什么这段代码不能运行。我正在为我的零机器人团队编写运动代码,我当前的系统是将速度目标设置为距离目标位置的每个初始距离的距离因子。我不是在寻找对代码的批评,但我很想了解为什么当我运行此代码时绝对没有发生任何事情——我希望至少会发生一些事情。球体只是坐在那里,什么都不做。

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] 周围的绝对值。感谢您的帮助!

【问题讨论】:

  • 什么都没有发生!好吧,这段代码没有main()。我的意思是你应该展示你期望的结果并展示完整的相关代码。
  • 我不认为你打开了机器人on
  • 零机器人网站上的某个人可能会给您带来更好的帮助吗?我刚刚下载了教程,它也没有main()。了解外部挂钩会很有帮助,并且可能需要他们的这个神秘的“IDE”。您所拥有的是源代码片段,而不是程序。

标签: c++ robotics


【解决方案1】:

我的第一个程序可能如下所示:

void init()
{
   DEBUG(("init entered\n"));
   DEBUG(("init leaving\n"));
}
void moveTo(float target[3])
{
   DEBUG (( "moveTo entered" ));
   DEBUG (( "moveTo leaving" ));
}
void loop()
{
   DEBUG (( "loop for David Bluhm entered\n" ));
   DEBUG (( "loop leaving\n" ));
}

如果我能在运行后找到输出,我可能会对某些 API 产生一点信心。 (我肯定会在前几次要移动的东西时输出调试状态)

PS - 你为什么打电话给:setVelocityTarget()

而不是:setPositionTarget()? (这显然是最基本的位置控制)

【讨论】:

  • 只是让你们知道,这是一种非常特殊的风格——“main”方法被“loop”方法取代,它每秒调用一次。
  • @DavidBluhm 我阅读了教程。当您说“什么都没有发生”时,我立即想到可能导致“发生”的最简单的“事情”是调试/文本输出。那么……你有没有成功写出一个可以输出“Hello World”的机器人?如果没有,你怎么能指望更复杂的工作?
  • 哦!我忘了提一些非常重要的事情。当我用 moveTo 方法中的常量替换 powfResult 时,我能够让机器人移动。这就是我得到用于推导powfResult 的非常复杂、具体的方程的地方:我收集了数据点并为它们推断了一个函数。
  • 另外,我没有使用setPositionTarget(),因为setPositionTarget() 是一种糟糕的方法。它将 SPHERE 移动到目标,但速度非常慢。我的目标是为我们的团队编写运动代码,并大幅改进 setPositionTarget() 方法。
  • @大卫布鲁姆而不是:“没有任何作用”。建议 #1:取消对调试语句的注释!!! PS - 我们大多数人都不是这个网站上的高中生。因此,我们无法玩弄您所处的 IDE 和工作环境。尽情享受吧,希望您的比赛顺利进行。祝你好运。 PPS - 方程式可能会倒退。 (幅度越大,幅度越小,幅度越小)特别是对于 0
猜你喜欢
  • 2021-06-01
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 2021-04-20
  • 2021-06-06
  • 1970-01-01
  • 2018-10-07
  • 2011-10-24
相关资源
最近更新 更多