首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ardunio控制四自由度机器人手臂?

如何使用Ardunio控制四自由度机器人手臂?
EN

Stack Overflow用户
提问于 2019-03-30 07:17:48
回答 1查看 2.7K关注 0票数 0

我最近买了一个4自由度(自由度)机器人手臂套件。我成功地组装了它,现在我想编程arduino来控制它。我知道如何使伺服工作使用arduino,但不知道如何将手移动到特定的位置。

我尝试手工创建一个两个酒窝阵列,每个电机的旋转值都是以度为单位的。这是可行的,但很难得到值和创建数组。目前,我通过尝试和错误调整了值。

我手动创建的数组:

代码语言:javascript
复制
short first[] = { 180 , 80 , 0 , 90 };
short pos[][4] = 
{
  { 180 , 80 , 00 , 85 },
  { 180 , 85 , 00 , 80 },
  { 180 , 90 , 00 , 75 },
  { 180 , 95 , 00 , 75 },
  { 180 , 100 , 0 , 70 },
  { 180 , 110 , 0 , 70 },
  { 180 , 115 , 0 , 70 },
  { 180 , 120 , 0 , 65 },
  { 180 , 125 , 0 , 65 },
  { 180 , 130 , 0 , 65 },
  { 180 , 135 , 0 , 65 },
  { 180 , 140 , 0 , 65 },
  { 180 , 145 , 0 , 65 },
  { 180 , 150 , 0 , 65 },
  { 180 , 150 , 0 , 70 },
  { 180 , 150 , 0 , 75 },
  { 180 , 150 , 0 , 80 },  
  { 180 , 150 , 0 , 90 },
  { 180 , 145 , 0 , 90 },
  { 180 , 140 , 0 , 90 },
  { 180 , 135 , 0 , 90 },
  { 180 , 130 , 0 , 90 },
  { 180 , 125 , 0 , 90 },
  { 180 , 120 , 0 , 90 },
  { 180 , 115 , 0 , 90 },
  { 180 , 110 , 0 , 90 },
  { 170 , 110 , 0 , 90 },
  { 160 , 110 , 0 , 90 },
  { 150 , 110 , 0 , 90 }, 
  { 140 , 110 , 0 , 90 }, 
  { 130 , 110 , 0 , 90 },
  { 130 , 115 , 0 , 90 }, 
  { 120 , 120 , 0 , 90 },
  { 120 , 125 , 0 , 90 },
  { 120 , 130 , 0 , 90 },
  { 120 , 135 , 0 , 90 },
  { 120 , 137 , 0 , 90 },
  { 120 , 139 , 0 , 90 },
  { 120 , 140 , 0 , 85 },
  { 120 , 140 , 0 , 80 },
  { 120 , 140 , 0 , 75 },
  { 120 , 140 , 0 , 70 },   

};

是我编写的完整代码,

代码语言:javascript
复制
/*
 * claws - 90 close 75 open
 * elbow - 0 to 100
 * sholder - 30 to 180
*/

Servo Servos[4];

void setup()
{
  Servos[0].attach(3);
  Servos[1].attach(5);
  Servos[2].attach(9);
  Servos[3].attach(11);

  reset();
  run();
  Servos[0].detach();
  Servos[1].detach();
  Servos[2].detach();
  Servos[3].detach();
}

void run()
{
  for(int i=0; i<sizeof(pos) / sizeof(short) /4 ; i++)
  {
    for(int j=3; j>=0; j--)
    {
      Servos[j].write(pos[i][j]);
      delay(15);
    }
    delay(15);
  }
  for(int i=-1+ sizeof(pos) / sizeof(short) /4;i>=0 ; i--)
  {
    for(int j=3; j>=0; j--)
    {
      Servos[j].write(pos[i][j]);
      delay(15);
    }
    delay(15);
  }
  delay(3000);
}

void reset()
{
  for(int i=3; i>=0; i--)Servos[i].write(first[i]);
}


void loop(){}

我想要一些函数来计算任何给定坐标的数组的值,或者类似的东西。(也就是说,每个伺服系统在那个点上定位手臂末端的移动)

Arm照片:

这里是实际arm的产品页面:

s00?ie=UTF8&psc=1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-04 09:54:51

我终于解决了问题!我试着找出手臂的逆运动学,但我发现它很难,而且由于硬件的不确定性,它也不能很好地工作。实际的解决办法是使用传感器。我把距离传感器(超音波)放在手臂上,这样我就可以实时测量手臂各部分之间的距离。因为我知道手臂每个部分的长度(我不需要担心这里的不确定性)。还有他们之间的距离,我可以做简单的三角学来计算手臂尖端的坐标。这意味着,我可以简单地使用一个反馈回路,以无法消除的精确定位手臂,并克服硬件的局限性。

我明白这并不是问题的确切答案,但我从经验中发现,这种方法最适合于这种情况(与根据问题所作的尝试相比)。

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

https://stackoverflow.com/questions/55429137

复制
相关文章

相似问题

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