历史上的今天
返回首页

历史上的今天

今天是:2025年12月14日(星期日)

2022年12月14日 | 基于STM32的六自由度机械臂控制与PID仿真

2022-12-14 来源:zhihu

为实现六自由度机械臂的控制抓取并在此基础上提高抓取精确度,本文采用D-H法建立基于xArm1S智能总线机械臂的数学模型。并在Matlab2020a的RoboticsToolbox工具箱中编程实现给定机械臂末端始末位置条件下机械臂各连杆的运动仿真和角速度解算。最后以STM32单片机为核心控制模块,实现六自由度机械臂的各连杆运动控制,并在Simulink中搭建模块加入PID控制器对机械臂运动进行仿真。


六自由度机械臂具有效率高、灵活性强等优点,并可取代人类进行各类精密操作,有很强的实用价值和意义。本文选取图1中的xArm1S机械臂进行研究,为了提高精度,在使用前将机械臂固定在桌面。xArm1S机械臂在机械结构上包括六自由度机械臂由底部基座、6个舵机、中间连杆和其他固定机构,基座底部包含固定装置、电源接口和机械臂核心控制电路。针对机械臂底部基座建立空间直角坐标系,以基座底部中央为原点,Z轴方向竖直向上,X轴,Y轴在桌面平面内,X轴沿纸面向外。底部基座可实现机械臂沿Z轴的旋转,关节1、2、3可在Y-Z平面内改变与Y轴的夹角。关节4为关节3末端的抓手,通过舵机连动齿轮转动带动抓手开合从而实现物品抓取,在建立坐标系时可将其视为一个关节。

图1 xArm 1s总线机械臂


1、机械臂运动学分析

连杆坐标系的建立

D-H法的作用是由矩阵变换求算终端抓手与基座坐标系的位置关系。在每个连杆n上建立坐标系[n],规定坐标原点为an和轴线交点处,Xn坐标轴为Zn-1轴和Zn轴公共垂线方向,Zn轴方向为关节轴线n方向,指向Zn轴偏离Zn-1轴。Yn按照右手螺旋定则确定。图2中为按规定要求建立的坐标系。本机械臂共有1个基座、3个关节和1个末端抓手,基座可实现机械臂在平面内360°旋转,因此针对基座的连杆坐标系Z轴方向在纸面内向上,Y轴和X轴在平面内。对于连接基座和连杆1的关节1,Z轴方向朝纸面向内,X轴和Y轴方向在纸面内。关节1可实现连杆1及以上部分关节在纸面内的270°转动。关节2和关节3的连杆坐标系的Z轴方向同样沿纸面向外,关节4可实现末端抓手的360°旋转抓取,关节5可实现抓手的闭合,实现系列抓取动作。

图2 xArm 1s机械臂连杆坐标系图


2、机械臂运动仿真与角度计算

2.1基于Robtics Toolbox工具箱的机械臂运动仿真

采用Robotics Toolbox10.4工具箱编写程序搭建模型实现了六自由度机械臂的运动仿真,生成GUI界面如图3所示。RoboticsToolbox可实现机械臂的可视化显示、多关节位置和相关参数计算。通过调整按钮q1-q6可依次改变基座和连杆1、连杆2、连杆3、尾部抓手的姿态。同时X、Y、Z可显示机械臂末端的空间坐标。

图3 机械臂仿真界面图


2.2始末位置设定与角度计算

在RoboticsToolbox工具箱中,编写程序并输入规定的机器臂的始末位置,可实现机械臂对应连杆运动角速度和角加速度、机械臂末端轨迹的求解与输出。仿真中设定六自由度机械臂末端的初始位置在原点,结束位置的角度坐标为[pi/4,-pi/3,pi/5,pi/2,-pi/4,pi/6]。图4表示仿真得到此过程各个连杆的相关运动信息,可将其记录并通过实物实现运动过程。

图4 仿真结果图

由工具箱仿真可求出给定始末位置机械臂运行时各角度和角加速度的变化情况。图4中最后一行为机械臂仿真后的终止位置图,在仿真过程中可实时显示机械臂各关节的运动情况。前三行图分别为机械臂末端在坐标系下的位置变化图,第四行和第五行分别为机械臂六个自由度连杆速度和加速度随时间的变化图像。分析图像可知,各关节的运动角速度在运动过程中随时间逐渐提高,于中期到达最大值,之后逐渐减少到0,角加速度在运动前期和运动后期各有一次峰值,体现了各关节的角度变化情况。


3、基于 STM32 单片机的机械臂控制系统

六自由度机械臂系统由电源及调理模块、单片机控制系统、六自由度机械臂机械结构、姿态控制蓝牙手柄、舵机组成,主控芯片为STM32单片机。六自由度机械臂共包含6个舵机,分别为1号总线舵机、5号LX-225舵机、2号3号4号6号LX-15D舵机。舵机均具有堵转保护和过温保护,支持回读,具有温度、电压和位置反馈。供电后通过编程接口将控制程序拷入STM32单片机中,结合时钟电路和复位电路实现舵机控制,从而自由改变机械臂的姿态。本文系统原理图如图5所示。

图5 系统原理图


3.1电机的控制实现

外接电源通过电源器供给系统电压为12V,通过编程接口将机械臂控制程序烧录到单片机内。电源输入后,单片机输出PWM脉宽信号,通过修改输入信号的脉宽可以转换舵机角度。一般在脉冲宽度为1.5ms时,舵机位置归一化。此后,脉宽每增加0.5ms,舵机输出轴角度顺时针旋转45°;脉冲宽度每减小0.5ms,舵机输出轴的角度就逆时针旋转45°。最后,实现了机械手各关节的挠度控制。此外,还可通过蓝牙连接上位机的方式进行机械臂的精确控制。在运行过程中,电位计测量并反馈电机输出轴的位置至STM32单片机,将电机的实际位置与单片机设置的目标位置进行比较,构成闭环控制系统,最终减少偏差,与设定值相匹配。在程序设计上,首先进行定时器的初始化配置,之后复位,并通过设计一定的延时保证动作可以完全执行。六自由度机械臂的舵机控制为定时器控制多路电机,STM32的高级定时器TIM1可产生7路定时器,因此可修改6路通道的比较寄存器值,实现6路舵机的控制。


3.2蓝牙模块的连接与通讯实现

系统选用HC-05蓝牙模块,通过蓝牙模块实现机械臂与上位机之间的通讯,并通过上位机对机械臂各关节的运动状态进行操纵。将HC-05蓝牙模块的波特率选在5000bps。HC-05蓝牙模块在与STM32单片机连接时,Vcc连接电源5V,HC-05的GND引脚与STM32模块的GND引脚相连接,RXD连接STM32模块的TXD引脚,TXD连接STM32模块的RXD引脚。使用HC-05模块时,可以忽略蓝牙的内部通信协议。两台设备共用同一个串口。一个设备通过串口发送数据,另一个设备可以通过串口接收数据。串行通信的实现分为六个步骤:第一,上电和复位;二、GPIO端口模式设置;二是串口参数初始化;第二,中断初始化NVIC;第三,中断函数编码。中断函数主要包括信息的发送和读取两部分。读取数据的函数为uint16_tUSART_ReceiveData(USART_TypeDef*USARTx)。


3.3PID 仿真与优化实现

由于在实际工作过程中会出现一定误差,对六自由度机械臂的每个关节单独引入PID控制,可减少机械臂在工作中受到外部因素的干扰。通过调整比例,可以提高系统的速度和响应峰值时间Tp;通过改变积分,可以提高系统的稳态精度,减小系统的响应误差;通过改变微分,可以提前减小系统响应的超调量,提高系统的稳定性。在机械臂系统前加入PID控制环节实现对机械臂系统的校正,在实际中各个机械臂的传递函数均不相同,一般通过实验输入单位阶跃得到输出结合数学方法求出机械臂的实际传递函数。PID输出系统框图如图6所示。

图6 PID 控制系统原理图


4、创新点

本文包含六自由度机械臂的仿真和控制全过程,可应用至实际项目中并实现多种复杂环境下各关节的控制:首先依据实际工程需要确定机械臂末端的起始位置和末端位置,之后通过RoboticsToolbox工具箱实现机械臂运动过程的仿真,求解得到此过程中各个关节的位置、运动角速度和运动角加速度。之后编写程序采用STM32单片机控制舵机实现机械臂的全部运动过程,同时可验证方程和仿真的准确性。为了弥补PID控制的部分缺点,可在后期对机械臂建立规则引入模糊控制,对于提高模型的精准度有较大意义。


5、结语

本文采用D-H法建立基于xArm1S智能总线机械臂的数学模型。并在Matlab2020a的RoboticsToolbox工具箱中编程实现给定机械臂末端始末位置条件下机械臂各连杆的运动仿真和角速度解算。最后以STM32单片机为核心控制模块,实现六自由度机械臂的各连杆运动控制。引入PID控制进一步实现优化。


推荐阅读

史海拾趣

Foxboro I C T Inc公司的发展小趣事

在电子行业,尤其是工业自动化与控制领域,Foxboro I C T Inc(现为施耐德电气旗下的一部分,通常简称为Foxboro)的发展充满了创新与挑战。以下是五个与Foxboro在电子行业里发展起来相关的故事,每个故事均基于事实进行描述:

1. Foxboro的起源与早期创新

Foxboro的历史可以追溯到1908年,在美国马萨诸塞州的福克斯伯勒,E.H.和B.B.兄弟联手开设了商店,并逐渐发展成为一家专注于工业控制自动化的公司。1920年代,Foxboro推出了其第一款Model 10 Stabilog比例加复位控制器,这标志着公司在工业自动化领域的初步探索。此后,Foxboro持续在控制技术上取得突破,如1950年代发布的全尺寸图形面板仪表和首款磁流量计,这些创新为公司在工业控制领域奠定了坚实的基础。(参考来源:Foxboro官网及相关历史资料)

2. 分布式控制系统的先驱

进入1970年代,Foxboro推出了SPEC 200系统,这是全球第一款真正的分布式控制系统(DCS)。该系统通过分散控制、集中管理的理念,极大地提高了工业生产的效率和可靠性。SPEC 200系统的成功推出,不仅巩固了Foxboro在工业自动化领域的领先地位,也推动了整个行业向更加智能化、自动化方向发展。(参考来源:知乎专栏及相关行业报告)

3. 进入中国市场,引领自动化发展

1983年,在中美贸易合作的大背景下,Foxboro与中国上海仪电控股(集团)公司共同投资成立了上海福克斯波罗有限公司(即Foxboro中国)。作为最早的中美合资企业之一,Foxboro中国迅速将最新技术和产品引入中国,推动了中国过程自动化行业的蓬勃发展。在成立初期,Foxboro中国就完成了最新技术和产品向中国本土的转移,所生产的成套系统装置广泛应用于石油、化工、电力等多个行业。(参考来源:国际能源网及相关报道)

4. ISO 9001国际质量认证的历史性突破

1991年12月,Foxboro中国成为中国首个获得ISO 9001国际质量合格证书的企业。这一历史性突破不仅标志着Foxboro中国在质量管理上达到了国际先进水平,也为中国仪表行业乃至整个工业领域树立了标杆。此后,Foxboro中国积极分享其质量管理经验,帮助众多中国企业取得国际质量体系认证,推动了整个行业的质量提升。(参考来源:知乎专栏及相关历史资料)

5. 数字化时代的转型与升级

2014年,Foxboro被施耐德电气收购后,融入了施耐德电气的一体化能源管理与过程自动化解决方案。在此背景下,Foxboro推出了新一代EcoStruxure Foxboro DCS过程自动化系统。该系统融合了Foxboro I/A Series控制系统的可靠性和施耐德电气的数字化能力,为企业客户提供了一站式的平台服务。EcoStruxure Foxboro DCS的推出,标志着Foxboro在数字化时代迈出了重要一步,也为公司在全球工业自动化领域的持续发展注入了新的动力。(参考来源:施耐德电气官网及相关产品介绍)

All Sensors公司的发展小趣事

近年来,All Sensors通过与深圳电通纬创微电子股份有限公司的合作,成立了中美合资企业——深圳华美澳通传感器有限公司。这一合资企业的成立,不仅加强了All Sensors在中国市场的地位,也为其在全球范围内的业务拓展提供了有力支持。华美澳通公司利用All Sensors的专利技术,专业从事MEMS压力传感器及应用模组的研发、生产及销售,为电子行业提供了更多优质的产品和服务。

Fibrefab Limited公司的发展小趣事

Fibrefab Limited公司自创立之初,就致力于光纤通讯技术的研发。面对当时市场上光纤连接产品技术瓶颈,Fibrefab投入大量资源,成功研发出具有更高稳定性和更低损耗的光纤连接器。这一创新不仅解决了行业痛点,也帮助Fibrefab迅速在市场上树立起技术领先者的形象。随着技术的不断迭代升级,Fibrefab逐渐在光纤通讯领域确立了其市场领导地位。

Broadband公司的发展小趣事

为了进一步扩大市场份额,Fibrefab开始实施全球化战略。公司先后在亚洲、欧洲和美洲等地设立生产基地和研发中心,以满足不同地区客户的需求。同时,Fibrefab还积极与全球知名的电信运营商和设备制造商建立合作关系,共同推动光纤通讯技术的发展和应用。这一战略的实施不仅帮助Fibrefab拓展了海外市场,也提升了其品牌影响力和市场竞争力。

DRS Technologies公司的发展小趣事

在全球电子行业快速发展的背景下,DRS面临着来自各方面的挑战。为了应对这些挑战,DRS不断加强研发投入,提高产品质量和服务水平。同时,公司也积极拓展国际市场,寻求更多的合作机会。通过这些努力,DRS在全球电子行业中保持了领先地位,并为未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上故事均为概述性质,具体细节和背景信息可能有所省略。

达方(DARFON)公司的发展小趣事

面对日益严峻的环境问题,达方电子积极响应国家号召,将绿色发展理念融入公司战略。公司加大了对环保技术的研发力度,推出了多款绿色、节能的产品。同时,达方电子还积极参与公益事业,为社会做出了积极贡献。这一阶段的努力,不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

问答坊 | AI 解惑

完整版UCOS-II V2.52源代码

完整版UCOS-II V2.52源代码,需要的朋友赶快下 这个系统包无需改动,嵌入系统即可使用,主要是方便新伙计少走弯路,内容是原版邵贝贝光盘中的系统代码,放心使用! …

查看全部问答>

一个LED的N种玩法(五)----WatchDog Timer

一个LED的N种玩法(五)--WatchDog Timer Author: chenzhufly Email: chenzhufly@126.com 2010-05-02 一.WatchDog Timer 概述 看门狗的目的是当进入错误状态一定时间后复位微控制器。当看门狗使能时,如果用户没有在一定时间内喂狗(看门狗定时 ...…

查看全部问答>

1000VDC转5VDC大家有没有好的方案?

有一个项目,供电电压是1000V直流的,需要转为5V,功率在2W左右.由于电压较高,如用PWM降压常规的器件耐压达不到,不知大家有没有好的方案,不甚感激!…

查看全部问答>

wince 下directshow 截图

代码如下: pmeidacontrol->pause() 视频已经暂停了 m_Graphs->pMC->GetState(2000,(OAFilterState*)&pfs); pfs为State_Paused 暂停状态 hr=m_Graphs->pBV->GetCurrentImage(&bitmapSize,NULL); hr的值为E_INVALIDARG 查了好多资料 还是没找到 ...…

查看全部问答>

wince 6.0 OAL层初始化LOGO显示问题~

eboot显示一个 logo, 但进去系统的中间黑屏,我想继续在 oal中显示 logo, 去掉lcd初始化函数调用, 可看 OEMInit 函数,没见 初始化LCD部分代码, OEMInit 上下文周围也没找到 初始LCD有关的函数. 麻烦给个提示,谢谢 平台是 PXA270+WINCE6.0…

查看全部问答>

推荐ARM开发板

现在急需推荐一款ARM开发板,要求: 可以做触摸屏;操作系统WinCE——可以自己修改源码;应用于大型系统集成;处理数据采集系统;抗干扰能力强;数据运算速度快;扩展口多。哪位大侠给推荐一下,谢谢:)…

查看全部问答>

java 调用DLL 读串口,不久就死了,请帮忙看看什么原因?

经过仔细分析问题出这dll这里,但始终找不到解决办法,请大家帮忙看看,谢谢! dll代码如下: JNIEXPORT jstring JNICALL Java_getGPS (JNIEnv * env, jobject obj) {     char * cIpAddress =compressWideChar((LPCWSTR)L\"empty value! ...…

查看全部问答>

关于格式转换函数sprintf():

关于格式转换函数sprintf(): 我想用sprintf()函数将一个usigned int型变量转换为字符串从串口发送出去 结果调用的时候发现不对 我先定义DeocdeNum=2000;UCHAR *CH 保存转换后的字符串 printf(ch,\"%d\",DeocdeNum); 结果我发现在程序中 Deoc ...…

查看全部问答>

有源滤波器资料

本帖最后由 paulhyde 于 2014-9-15 03:08 编辑 我收集的有源滤波器资料,分享快乐    …

查看全部问答>