Arduino设计记录位置的自动机械臂
想直接下载代码或者查看详细文字/图片描述的请划到最底直接下载哦!
一、摘要
本设计通过arduino单片机和网上购买的机械臂零件设计一个手柄操控自学习机械臂模型,通过记录机械臂移动的位置进行重复的指定位置抓取放置操作,以简化更新机械臂数据或调试机械臂的过程。
报告通过对机械臂运动分析,和程序设计思路的叙述来对设计过程进行描述,比较详细展现构思过程和思考逻辑。
二、前言
本次设计实验使用arduino单片机进行设计,Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。本次设计使用的具体型号为uno r3 国产版本,Arduino Uno是一款基于ATmega328P的微控制器板。它有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入,16MHz晶振时钟,USB连接,电源插孔,ICSP接头和复位按钮。只需要通过USB数据线连接电脑就能供电、程序下载和数据通讯。
通过机器人基础的课程学习,我了解到关于机械臂一些跨学科的基础,因此想通过机械臂与单片机的结合进行一次实验设计,以加深对机械臂的理解,并且运用机械臂。因此,自学习机械臂的想法油然而生,自学习主要是针对机器的记录与学习提出的说法。成熟的自学习系统(self-learningsystem)能模仿生物学习功能,它能在系统运行过程中通过评估已有行为的正确性或优良度,自动修改系统结构或参数以改进自身品质的系统。
本次设计打算利用代码的记录功能简单的模拟机械臂的自学习功能,因此设计比较简单,用途不具备广泛性。但由于arduino的优势和开源,这也会是一个比较容易发展的系统。最主要的是,这次设计能够让我初步理解机械臂的运动,走出课堂学习,进行实践。
三、硬件系统搭建与组装
机械臂的套件购买于淘宝网站,材料是亚克力塑料,使用了四个舵机,所以是一个四自由度的机械臂。以下展示组装过程:
(1)舵机复位
购买回来的舵机轮轴角度不一样,需要手动进行调节。首先向左旋转到尽头,然后横向安装如图扇翼,旋转到90°既垂直位置,调节完毕。
(2)底盘舵机的安装
底盘负责带动机械臂上半部分的转向,舵机跟地面方向平行,如图所示。
底盘的拼接零件 大,复杂度小,因此过程很快。
(3)后臂的安装
后臂驱动舵机和前臂驱动舵机如图所示在机械臂的两侧,方向垂直于水平面,用于带动机械臂垂直方向的运动。
(4)连接前臂舵机
前臂左边的杆跟左边的舵机进行连接,旋转点落在后臂顶端,舵机通过后臂与结点连杆对前臂进行带动控制。
(5)安装机械爪
机械爪由一个舵机控制,舵机通过齿轮结构带动爪子张开闭合,安装过程需要注意螺丝长度与规格,并且不能上太紧,同时检测舵机角度是否已经调到合适位置。预计爪子闭合舵机角度90°,爪子张开,舵机角度0°。
(6)拼接前臂、后臂和机械爪
连接舵机上半身的三个结构,形成平面上的3自由度机械臂,旋转舵机,查看是否出现阻塞问题或部位太紧的问题。
(7)拼接机械臂与底盘
把舵机上半部分连接底盘,形成3维4自由度的机械臂,同时装上负责驱动的arduino板,扩展版和电池。
至此,机械臂硬件组装完成。
五、简单自学习系统开发设计
(1)系统设计目标
简单自学习系统要求机械臂能够记录夹取物体的位置和放置物体的位置,并且根据记录的两个位置完成夹取和放置工作。假设接近地面的位置会有其他物体阻挡,应当尽量避免与这些物体发生碰撞。本系统假设地面所处平面上方基本没有障碍,机械臂抬高后可以无障碍运动。
完成自学习功能,首先要让机械臂完成两点位置的记录。然后根据位置开启自动移动功能。完成抓取与放置流程。这个过程需要规划路线,尽量避免贴着低水平面移动机械臂,因为这样会发生触碰目标物体或者别的障碍物的风险。设计机械臂按照底盘、前臂、后臂、爪子的顺序进行移动,这样可以避免与路径上的物体发生碰撞。同时在移动之前再次抬高机械臂(后臂、前臂的顺序),避免与低水平面物体发生碰撞。如图ABC路径为机械臂移动的大致路径。
设计过程考虑位置记录方法,考虑以机械臂底盘为O点建立坐标系,但是空间坐标计算过于复杂,时间有限无法实现,因此直接采用舵机角度的位置记录方法,例如旋转到左边30°,后臂垂直位置向前倾45°,前臂左向下60°抓取一个物体,则如图所示(2D平面,地盘旋转角度没有画出,只分析了机械臂上半身的运动),记录(底盘舵机120°,后臂舵机135°前臂舵机)。
(3)简易自学习系统存储数据结构
记录机械臂4个舵机的各种状态,需要一个大小为4的数组,每个舵机需要记录旋转范围(最小,最大),记录当前角度,记录初始状态角度,记录舵机当前运行方向至少5个数据量,因此需要一个4X5大小的数组对舵机的数据进行存储。
简易自学习需要记录机械臂的抓取位置和放置位置,既记录两次4个舵机的角度,需要一个2X4的数组。
考虑到爪子只是一开一合(0-90),因此可以适当去掉关于爪子角度的存储。
(4)机械臂控制移动实现设计
前期系统采用手柄移动控制机械臂运作,手柄由左摇杆和右摇杆组成,左遥感左右控制底盘左右移动,上下控制后臂上下移动,右摇杆左右控制爪子张开闭合,上下控制前臂上下移动。前臂的上下移动对应舵机角度的增加减少,前臂舵机移动角度范围为(0-120),后臂上下移动对应舵机角度的增加减少,前臂舵机移动角度范围为(0-100),底盘左右移动对应舵机角度的增加减少,前臂舵机移动角度范围为(0-180),爪子舵机移动范围(0-90),张开对应角度减少,闭合对应角度增加。
进行手柄控制移动时,首先检测当前时刻下手柄按键,并且以此更改各个舵机所记录的方向(可以是静止)。然后根据舵机记录的移动方向逐个移动舵机,每次移动2°,大概没几十毫秒检测并移动一次,在手柄控制模式达到所有自由度同时控制移动的效果。
(5)简易学习后自移动实现设计
在手柄控制模式下,第一次按下左遥感记录第一个位置,并认定为抓取位置,第二次按下记录为第二个位置,认定为放置位置。
按下第二次左摇杆后进入自动模式,会按照上述设计的机械臂移动顺序自动重复进行抓取和放置,代码设计只需要for循环按照顺序进行并移动到记录位置即可。移动过程的程序设计非常的简介且死板,具体可查看附件处代码文件。
自动过程中手柄动作无效,除了右摇杆的按下设计为外部中断,该中断处理函数设置标志位让遥感执行完本次自动抓取放置后停止操作变回手柄控制模式。
八、附录
(1)CAD绘图文件
CAD文件夹中的绘图,需要用CAD软件打开
(2)arduino代码文件
Arm文件夹中的是VS2017项目,可以用VS2017打开,其中Arm.ino是arduino专用的代码文件,可以用写代码的软件打开。
(3)机械臂演示视频
演示机械臂操作流程的录制视频。
附件下载:
百度网盘下载 提取码:c2q3 | |
---|---|