设为首页收藏本站

[应用教程] 基于Arduino的同步机械臂

kdk945ck 发表于 2015-10-20 15:01:29 | 显示全部楼层 [复制链接]
11 12428
基于Arduino的同步机械臂
机械臂应用背景
机械臂是机器人技术中最广泛运用到的自动化机械装置,在多种领域中均有其丰富的应用。机械臂的优点众多,其中最为显著的是其精确性和高效性。然而因自动化机械臂非常依赖于控制指令,不同的操作环境也需要不同的控制指令,对于非专业使用者来说操作过于繁琐复杂,因此机械臂在民用领域并不常见。
为了使得机械臂的控制变得简单直观,有人提出了同步操纵者动作的机械臂控制概念,但因其机械结构和算法的复杂性,这种结构的机械装置目前多存在于影视作品中。

                     1.jpg          
图1-1 电影《阿凡达》中的同步机器人 图片摘自新浪网

在这篇教程中,我们会使用电位器来监控一个普通台灯悬臂的运动姿态,通过一些基于Arduino的编程将这些动作复制至一个舵机控制的机械臂,从而达到同步的效果。
2.jpg
图1-2基于Arduino的自制同步机械臂


控制思路
   同步悬臂系统由操控臂和受控臂组成。安装在操控臂上的电位器能够感测到悬臂的姿态并远程同步至由舵机控制的受控臂,使之复制控制臂动作。通过人体工程学的按钮和形态设计,操控臂能够简单直观地由手控制,从而实现复杂精确的远程操作功能。


制作材料
3D打印件零件:
3.jpg
图2-1 夹持器导轨底座
4.jpg
图2-2 夹持器连动杆
5.jpg
图2-3夹持器电位器舵盘
6.jpg
图2-4 夹持器滑动块
7.jpg
图2-5 机械臂底部转轴连杆
8.jpg
图2-6 底部电位器舵盘
9.jpg
图2-7 舵盘连轴杆
其他材料:
10.jpg
图2-8 四自由度机械臂
11.jpg
图2-9 万向悬臂
12.jpg
图2-10 0-50Kohm电位器*4
13.jpg
图2-11 固定阻值电阻若干
14.jpg
图2-12 220V-5V 2A电源适配器
导线,热塑管,魔术贴捆绑带,USB数据线,1MM粗硬铁丝
需要工具:
热熔胶枪,万用表,螺丝刀,热风枪,电烙铁


装配步骤
控制臂电位器安装
控制臂由四个关节组成,分别是基座关节(控制整臂左右旋转),下关节(控制下半臂前后摇摆),上关节(控制上半臂前后摇摆),夹持器关节(有连杆)
安装上下关节电位器及其连动杆相对简单。
以上关节为例,为了能够让连杆与电位器同步转动,要在连杆孔中安装一根固定杆。利用3D打印件的可塑性,可以用电烙铁加热一根1cm长,1mm宽的硬铁丝再将其缓慢按入材料中。注意连杆应该按图3-1所示从凸起的一面按入约2-3mm。
15.jpg
图3-1 铁丝固定位置
随后把悬臂一侧的弹簧从固定轴上卸下,将连杆套入并确保其能在固定轴上正常滑动。
16.jpg
图3-2将连杆套入机械臂的固定轴
之后将电位器用热熔胶固定在关节旁。
17.jpg
图3-3上关节电位器固定位置
最后按图3-4将连杆末端的套筒套入电位器转动轴,注意将铁丝卡入电位器轴的卡槽以确保其能随之转动。
  
18.jpg 19.jpg
图3-4 将连杆套入电位器转动轴
重复以上步骤来安装下关节定位器,同样用热熔胶将电位器固定在下关节转轴旁,套上连接干即可。
20.jpg
图3-5下关节电位器固定位置
接下来安装夹持器的电位器和传动装置,首先用同样的方法安装电位器舵盘上的固定杆并将其套在电位器转轴上。
  
21.jpg 22.jpg
图3-6 将连接杆套入夹持器上电位器的转动轴
参考图3-7组装夹持器部件,先将滑动块插入导轨再用连杆将其连接至电位器舵盘即可。
23.jpg
图3-7 夹持器组装参考图
安装好传动部分后,可以在夹持器中间插入一根带弹簧的圆珠笔芯使得滑动块在按压之后能够回弹。
24.jpg 25.jpg
图3-8 回弹装置安装
最后安装底座电位器,同样用热熔胶将电位器固定至图3-9所示位置。
26.jpg
图3-9 底部电位器安装位置
之后将两块3D打印的零件分别固定在机械臂和电位器上。因3D打印件会有一定的公差,安装时若有困难可以适当用热风枪加热材料使其软化。完成安装后用两根铁丝分别连接舵盘两头的小孔,使两者能够平行连动。
  
27.jpg 28.jpg
图3-10 底部连动舵盘安装
安装完电位器后,在每个电位器上连接两根用于检测电压的信号线。一根信号线连接至电位器中间的针脚,另一根连接至两边任意针脚。为了焊接方便,可将线头插入电位器针脚前端的小孔中。焊接完成后用适当热熔胶塑封防止短路。为了方便区分,可以使用不同颜色的信号线分别连接至对应电位器。
29.jpg 30.jpg   
图3-11导线焊接示意图
最后将信号线沿着臂身固定,可使用热熔胶黏贴或魔术贴捆绑,以防止导线与支架互相缠绕。注意导线安装位置不能影响到悬臂运动功能。导线在底座部分整理汇合,用热塑管合流,引出8个线脚。
31.jpg
图3-12 用捆绑带整理导线
至此,悬臂的电位器已全部安装完毕。
32.jpg
图3-13控制臂电位器安装参考图
舵机控制的机械臂安装部分可参考DFrobot 6自由度机械臂DFLG6DOF安装教程,这里因只用到四个自由度,可以将控制夹持器转向的舵机和支撑杆部位的一个舵机卸下。

DFrobot 6自由度机械臂链接:http://www.dfrobot.com.cn/goods-459.html


电路原理
为了测量电位器的阻值变化,我们使用了分压电路。 在串联的电位器和固定电阻两端加上固定的信号电压之后,电位器的阻值变化会引固定电阻的电压变化。
33.jpg
图4-1 电路示意图
为了使得电位器阻值-电压的关系趋近与线性,可以用以下方式求出固定电阻的合适阻值。

参数名称:
R:固定电阻的阻值
r:电位器的阻值
V:固定信号电压
v:固定电阻两端电压

把分压电路的电压公式v=V*(r/(r+R)),带入到曲率公式
34.jpg
并对以固定阻值电阻大小为变量对其求导变可得出曲率变化和阻值的关系。公式中的x为r,y为V*(r/(r+R))。

使得上述方程等于0,所得出的R能让电位器阻值-电压的关系最接近于线性。


程序及调试
程序部分
完整程序如下:

#include <Servo.h>
Servo Base;
Servo Joint1;
Servo Joint2;
Servo Grabber;
const int analogInPin1 =A1;  // Analog input pin that thepotentiometer is attached to
const int analogInPin2 =A2;  // Analog input pin that thepotentiometer is attached to
const int analogInPin3 =A3;  // Analog input pin that thepotentiometer is attached to
const int analogInPin4 =A4;  // Analog input pin that thepotentiometer is attached to
int sensorValue1 = 0;        // value read from the pot
int sensorValue2 = 0;        // value read from the pot
int sensorValue3 = 0;        // value read from the pot
int sensorValue4 = 0;        // value read from the pot
void setup() {
  // initialize serial communications at 9600bps:
  Serial.begin(9600);
  Base.attach(3);
  Joint1.attach(4);
  Joint2.attach(5);
  Grabber.attach(6);
}
void loop() {
  // read the analog in value:
  sensorValue1 = analogRead(analogInPin1);
  sensorValue2 = analogRead(analogInPin2);
  sensorValue3 = analogRead(analogInPin3);
  sensorValue4 = analogRead(analogInPin4);
  // print the results to the serial monitor:
  Serial.print("\nBase Joint:" );
  Serial.print(sensorValue1);
  Serial.print("  Bottom Joint =" );
  Serial.print(sensorValue2);
  Serial.print("  Upper Joint =" );
  Serial.print(sensorValue3);
  Serial.print("  Grabber =" );
  Serial.print(sensorValue4);
  // map the results to servo control parameter
  Base.write(map(sensorValue1, 200, 500, 45,150));
  Joint1.write(map(sensorValue2, 680, 300, 130,50));
  Joint2.write(map(sensorValue3, 800, 400, 30,140));
  Grabber.write(map(sensorValue4, 250, 320,180, 80));
}
代码部分仅用到Arduino自带示例中舵机驱动的库,Servo.h。 代码仅涉及到赋值和映射,所以关于C语言原理部分不多赘述。
映射机制
映射机制主要涉及到3个步骤:
1.  通过芯片版的模拟信号输入口读取固定电阻两端的电压。反馈读数应介于是0-1023之间的整数,分别对应0-5V的信号电压。
对应代码:

     sensorValue1 = analogRead(analogInPin1);
     sensorValue2 = analogRead(analogInPin2);
     sensorValue3 = analogRead(analogInPin3);
     sensorValue4 = analogRead(analogInPin4);
此段代码作用为读取各个模拟口数值并赋值给对应整形参数。

2.  基于舵机初始的安装朝向,将悬臂处于不同位置所对应电位器的电压值映射至想要的舵机角度参数值。

3.  最后将参数值以PWM的形式从数字输出口输出,以控制舵机运动。
对应代码:

     Base.write(map(sensorValue1, 200, 500, 45, 150));
Joint1.write(map(sensorValue2, 680, 300, 130, 50));
      Joint2.write(map(sensorValue3, 800, 400, 30,140));
      Grabber.write(map(sensorValue4, 250, 320,180, 80));
代码中的map() 函数用于将模拟接口读数映射至舵机角度参数,XXX.write() 函数将控制参数输出值对应数字信号口舵机。

参数设定及调试方法
机械臂的控制参数仅涉及到程序中映射函数部分。

根据映射机制,参数设定可按如下步骤进行:
连接好电路后,将主控板通过USB数据线连接至电脑,打开arduino IDE程序,复制完整程序至窗口中,选择对应主控板型和COM端口号并上传代码。

程序正常运行之后打开串口监视器,注意监视器频率应与代码  Serial.begin(9600); 中的频率一致。监视器滚动的数据即是和电位器串联固定电阻的电压读数,从左至右分别对应于底座关节,下关节,上关节和夹持器。
35.jpg
图5-1 串口监视器
因读数与悬臂转轴角度的关系可以近似为线性,我们可以简单的取一些悬臂运动角度的关键点来确定映射函数中的参数。这里关键点可以选择中点或是端点。举个例子,将机械臂沿底座关节旋转至最左端并记录下数值,再旋转至最右端并记录下数值,这两个数值就可以作为映射函数中的映射端的两个极点参数。

接下来将悬臂分别拉伸至这些关键点,根据舵机的安装的初始位置在映射函数中输入对应舵机角度参数使得舵机达到这些角度即可。若出现舵机因工作角度限制无法到达要求的角度,可将舵机轴从舵盘中取出,重新调整方向插入后再作尝试。

因关系非完全线性,如果要求更高的映射精度,可以使用分段映射的方法作拟合。


发表于 2015-10-20 17:21:35 来自手机 | 显示全部楼层
然后呢?没有了,我想看它动起来
回复 支持 反对

使用道具 举报

发表于 2015-10-20 17:26:29 | 显示全部楼层
dsweiliang 发表于 2015-10-20 17:21
然后呢?没有了,我想看它动起来

在传视频
回复 支持 反对

使用道具 举报

发表于 2015-10-20 18:39:42 | 显示全部楼层
这个必须是精华  继续更新精华
回复 支持 反对

使用道具 举报

发表于 2015-10-20 21:12:58 | 显示全部楼层
这个好玩
回复 支持 反对

使用道具 举报

发表于 2015-10-21 07:02:50 | 显示全部楼层
好想法
回复 支持 反对

使用道具 举报

发表于 2015-10-22 22:24:57 | 显示全部楼层
看起来很高端啊。
回复 支持 反对

使用道具 举报

发表于 2015-10-22 23:56:05 | 显示全部楼层
有没有做影视的朋友?
回复 支持 反对

使用道具 举报

发表于 2015-10-28 19:12:41 | 显示全部楼层
原来电位器还能这样用, 涨姿势了
回复 支持 反对

使用道具 举报

发表于 2015-11-22 16:04:56 | 显示全部楼层
太棒了,我正好要做一个类似的东西;刚好左位参考~~~
回复 支持 反对

使用道具 举报

发表于 2016-7-10 16:56:42 | 显示全部楼层
学习学习,学习
回复 支持 反对

使用道具 举报

发表于 2017-3-27 11:02:13 | 显示全部楼层
问一下  六脚的电位器怎么接线
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则 允许回帖同步到新浪微博  

  • 初级技师
  • 242
  • 1

楼主的其它帖子

推荐阅读

精华导读




公司简介| 联系我们| 小黑屋| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网| OneNET|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表