使用Arduino控制机械臂

使用Arduino控制机械臂

一. 硬件设备

  1. 1x DFRdunio UNO Rev3
  2. 1x Prototyping Shield For Arduino
  3. 1x USB线 AtoB方口
  4. 1x DFLG6DOF 6自由度机械臂

二. 控制机械臂

机械臂的实现实质上就是舵机+支架,那么对机械臂的控制本质上就是对舵机的控制,对于6自由度机械臂有六台舵机,每个都是180°范围旋转的。

快速实现(使用Arduino的Servo库)

函数说明
attach()参数为接口引脚号,联系Servo对象与引脚输入
write()参数为角度,范围在0°~180°,用于控制舵机旋转到一定的角度
read()读取舵机的角度,输出在串口
detach()使舵机与接口分离

通过如下代码即可快速实现对某一舵机的往返运动

#include <Servo.h>

Servo myservo;
int pos;
void setup()
{
  myservo.attach(0);
}
void loop()
{
//舵机运动
  for(pos = 0; pos < 180; pos += 1)
  {
    myservo.write(pos0);
    delay(10);
  }  
  delay(1000);
  //舵机归位
  for(pos = 180; pos > 0; pos -= 1)
  {
  	myservo.write(pos);
  	delay(10);
  }
  delay(1000);
}

几个注意点:

  1. 在运行机械臂之前应该对舵机进行逐个校准,了解每个舵机指定的每个角度大概在什么地方,每个舵机所对应的同一角度很可能不指向同一方向,这个问题由很多原因导致,可能是舵机的机械原因,也可能是在安装机械臂过程中造成的安装角度不一致的原因。
  2. 不能过分运用write()函数,如下代码:
    write(180);
    delay(1000);
    write(0);
    delay(1000);
    
    按道理舵机应该先运动到180°位置,再运动到0°位置,实现往复运动,但根据我的验证,write()函数的触发似乎还要判断步长对于我的舵机,如果步长过大,它就不会运行到指定位置,所以这里我的代码上是通过步长1°逐次实现的。
  3. 当受到外界阻力作用时,舵机可能会停止响应,这点很坑。。。也是制约机械臂性能很大的一部分因素。几个场景:
    ①由于采取1步长,导致机械臂启停频率较高,每次启停都意味着对阻力的震动会产生,由于机械臂结构单薄,造成震动的传导异常迅速,机械臂支撑不起,经常会受到其他舵机震动的联动导致角度过载,导致舵机停止响应;
    ②舵机初始角度距离期望运行角度差距过大则不会去响应运行,这其实就是注意点2
    ③舵机经常会在一开始不响应。。。需要人为手推一下。

机械臂三自由度抓取运动示例:

#include <Servo.h>

Servo myservo0;
Servo myservo1;
Servo myservo2;  // create servo object to control a servo
Servo myservo3;
int pos0,pos1,pos2,pos3 = 0;
void setup()
{

  myservo0.attach(0);
  myservo1.attach(1);
  myservo2.attach(2);  // attaches the servo on pin 9 to the servo object
  myservo3.attach(3);
}

void loop() 
{ 

// myservo4.writeMicroseconds(0); 

// delay(10000); 
//取物流程
//底座运动
  for(pos0 = 0; pos0 < 90; pos0+= 1)
  {
    myservo0.write(pos0);
    delay(10);
  }  
  delay(1000);
//第一舵机运动 
for(pos1 = 0; pos1 < 10; pos1+= 1)
  {
    myservo1.write(pos1);
    delay(10);
  }
   delay(1000);
//第二舵机运动
for(pos2 = 30; pos2 < 150; pos2 += 1)
  {
    myservo2.write(pos2);
    delay(10);
  }
  delay(1000);

//爪夹运动
for(pos3 = 180;pos3 > 0; pos3 -=1)
{
  myservo3.write(pos3);
  delay(10);
}
delay(1000);

//爪夹夹紧
for(pos3 = 0; pos3 < 180; pos3 += 1)
{
  myservo3.write(pos3);
  delay(10);
}
delay(1000);

//第二舵机归位
for(pos2 = 150; pos2 > 30; pos2 -= 1)
  {
    myservo2.write(pos2);
    delay(10);
  }
  delay(1000);
//第一舵机归位
  for(pos1 = 10; pos1 > 0; pos1-= 1)
  {
    myservo1.write(pos1);
    delay(10);
  }
  delay(1000);
   
//底座归位
  for(pos0 = 90; pos0 > 0; pos0-= 1)
  {
    myservo0.write(pos0);
    delay(10);
  }
  delay(1000);   
}         

效果还行,但是机械臂时常需要手动防倒。。。可能还是机械臂太便宜了。。。。

手动实现,不通过库函数

待学习…

三. 树莓派移植

  • 37
    点赞
  • 293
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 编写六自由度机械臂控制程序可以遵循以下步骤: 1. 定义机械臂的运动学模型,包括DH参数、正运动学、逆运动学等。 2. 设计机械臂控制器,可以采用位置控制或力控制等方式,根据具体需求进行选择。 3. 编写matlab程序,将机械臂控制器与运动学模型相结合,实现机械臂控制。 4. 在程序中设置输入输出接口,实现与外部设备的数据交互。 5. 进行仿真测试,检验程序的正确性和稳定性,可使用matlab自带的仿真工具箱或第三方仿真软件等。 6. 最后,将程序上传至机械臂控制器中,实现真实物理机械臂控制。 ### 回答2: 六自由度机械臂控制程序是为了实现对机械臂的运动控制和轨迹规划,下面是一个简单示例: 1. 确定机械臂的动力学参数,包括质量、长度、惯性等参数。 2. 编写正运动学函数,根据机械臂各个关节的角度计算末端执行器的位置和姿态。 3. 编写逆运动学函数,根据末端执行器的位置和姿态计算各个关节的角度,实现末端执行器的精确控制。 4. 设计运动规划算法,如基于关节空间的规划算法或基于任务空间的规划算法,实现机械臂的轨迹规划。 5. 编写运动控制函数,通过控制机械臂各个关节的角度,使机械臂按照规划好的轨迹进行运动。 6. 实现外部控制接口,如通过串口或网络接口接收来自外部设备的控制指令,通过控制程序控制机械臂。 7. 进行仿真和实验验证,通过在Matlab环境下进行仿真,或者连接实际机械臂进行实验,验证控制程序的正确性和实用性。 编写六自由度机械臂控制程序需要理解机械臂的运动学和动力学知识,掌握Matlab语言编程技巧,并进行充分的测试和验证,确保程序的正确性和可靠性。 ### 回答3: 使用MATLAB编写六自由度机械臂控制程序,首先需要定义机械臂的关节角度和末端执行器的期望位置姿态。然后,可以使用逆运动学解算方法将期望位置姿态转化为关节角度。 在MATLAB中,可以使用机械臂动力学模型和控制算法来实现机械臂控制。例如,可以使用空间向量法或雅可比矩阵法求解机械臂的正运动学和逆运动学问题。在确定关节角度后,可以使用前向运动学模型计算机械臂的末端执行器的实际位置姿态。 控制机械臂的方法包括位置控制、速度控制和力控制等。其中,位置控制是最常见的控制方法。可以使用PID控制器或模型预测控制器来实现机械臂的位置控制。通过不断调整关节角度,实现末端执行器的位置和姿态与期望值的一致性。 此外,还可以使用反馈线性化控制或非线性控制方法来实现机械臂控制。这些方法可以更好地处理机械臂的非线性动力学特性和不确定性。 编写六自由度机械臂控制程序时,需要编写计算机械臂运动学和动力学的函数,以及控制器的函数。可以使用MATLAB提供的工具箱,例如Robotics System Toolbox和Simulink,来简化机械臂控制程序的编写和仿真。 最后,为了验证程序的正确性,可以使用MATLAB提供的3D可视化工具来显示机械臂的运动轨迹和姿态,并通过与实际机械臂的比对验证程序的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值