首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >乐高积木NXT-G可视化编程与NXC类C编程的差异

乐高积木NXT-G可视化编程与NXC类C编程的差异
EN

Stack Overflow用户
提问于 2012-08-27 17:34:48
回答 1查看 1.5K关注 0票数 0

我正在学习乐高NXT编程,我从一个非常好的网站http://nxtprograms.com开始。特别是,我遵循了简单的赛格威与光传感器作为平衡传感器(http://nxtprograms.com/NXT2/segway/index.html)的说明。我研究了他(Dave Parker)的NXT-G程序,并成功地在他的机器人和一个更简单的定制版本(没有“驱动程序”)上复制。无论是他的程序还是我的程序,一切都能正常工作。我很快就转向了NXC编程,因为我已经了解了C语言,并且想要挖掘更大的潜力。我用完全相同的PID常量和计算很好地复制了平衡算法。结果是C程序不工作:机器人平衡1到2秒,摆动比使用NXT-G的要大,然后它就倒下了。

我比较了NXT-G和C的基本逻辑,没有发现任何差异。所以我想知道在我的程序中,运动控制是不是出了什么问题。我认为控制电机的NXT-G图形框只是简单地调用OnFwdSync(...)/OnRevSync(...)。这就解释了为什么我的程序会产生很大的初始振荡。

谁有一个NXC程序的例子来驱动这个简单的segway-lego,或者可以解释为什么我的程序中的电机控制失败了?在底部,我附上了我的程序的源代码。

谢谢。

代码语言:javascript
复制
#define KP 25
#define KI 1
#define KD 10
#define KO 0.5
#define LSAMPLE 100
//#include "MotorActions.nbc"

int balance(const int RIF)
{
  int output = 0;
  int previous_error = 0;
  int error = 0;
  int I = 0;
  int D = 0;
  int counter = 0;
  int actual;

  while (true)
  {
    actual = SENSOR_3;
    error = actual - RIF;
    counter++;
    I += error;
    D = (error - previous_error);
    previous_error = error;
    /**
     *  Compute de PID compensation
     */
    output = KO * (KP * error + KI * I + KD * D);
    if ((output > 1000) || (output < -1000)) 
      break;
    if (output < 0)
      OnFwdSync(OUT_BC, -output, 0);
    else
      OnRevSync(OUT_BC, output, 0);
  }
  return (counter);
}

int read_light()
{
  int L = 0;
  int ctr = 0;

  while (ctr < LSAMPLE)
  {
    L += SENSOR_3;
    ctr++;
    Wait(10);
  }
  return (L / LSAMPLE);
}

task main()
{
  int i = 0;
  int RIF;
  int count;

  while (i++ < 3)
  {
    //PlaySound(SOUND_LOW_BEEP);
    Wait(800);
  }
  Wait(400);
  //PlaySound( SOUND_DOUBLE_BEEP );
  SetSensorColorRed(IN_3);
  ClearSensor(SENSOR_3);
  RIF = SENSOR_3;
  count = balance(RIF);
  Off(OUT_BC);
}
EN

回答 1

Stack Overflow用户

发布于 2012-10-07 06:33:04

尝试更改您的常量。尝试将KP提高到一个更大的值,也许是32?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12139466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档