我最近买了一个4自由度(自由度)机器人手臂套件。我成功地组装了它,现在我想编程arduino来控制它。我知道如何使伺服工作使用arduino,但不知道如何将手移动到特定的位置。
我尝试手工创建一个两个酒窝阵列,每个电机的旋转值都是以度为单位的。这是可行的,但很难得到值和创建数组。目前,我通过尝试和错误调整了值。
我手动创建的数组:
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 },
};是我编写的完整代码,:
/*
* 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的产品页面:
发布于 2019-08-04 09:54:51
我终于解决了问题!我试着找出手臂的逆运动学,但我发现它很难,而且由于硬件的不确定性,它也不能很好地工作。实际的解决办法是使用传感器。我把距离传感器(超音波)放在手臂上,这样我就可以实时测量手臂各部分之间的距离。因为我知道手臂每个部分的长度(我不需要担心这里的不确定性)。还有他们之间的距离,我可以做简单的三角学来计算手臂尖端的坐标。这意味着,我可以简单地使用一个反馈回路,以无法消除的精确定位手臂,并克服硬件的局限性。
我明白这并不是问题的确切答案,但我从经验中发现,这种方法最适合于这种情况(与根据问题所作的尝试相比)。
https://stackoverflow.com/questions/55429137
复制相似问题