初
机械手臂(英语:robotic arm)是具有模仿人类手臂功能并可完成各种作业的自动控制设备,这种机器人系统有多关节连结并节允许在平面或三度空间进行运动或使用线性位移移动。
本文的主题是平面三轴机械臂。
启
首先来学习一下单轴的,如下图:
(系统画图画的)
将物理问题转化为数学问题,建立坐标系:
杆长取r
很容易就能得到端点坐标为rcosα,rscinα
是不是很简单,那接下来看两个杆。
中
如图所示
继续将物理问题转化为数学问题,建立坐标系:
这里我作了两条辅助线用来辅助理解
图中α,β为绝对角度(也就是相对于x轴的角度),θ1,2,是相对角度(相对于上一段的角度)他的值可能为正也可能为负值,这样我们就能得到α,β与θ的表达式α=θ1,β=θ1+θ2
杆长依旧取r
,为了便于说明这里三根杆的长度都取r
这里我们很容易就能得到最右端坐标的表达式为:rcosα+rcosβ,rscinα+rsinβ
同理我们可以得到三杆的表达式α=θ1,β=θ1+θ2,γ=θ1+θ2+θ3
和rcosα+rcosβ+rcosγ,rscinα+rsinβ+rsinγ
到这里你肯定觉得这好简单,为什么要写一篇文章讲这个?
上述思路皆为正运动学(正运动学可以大致理解为已知三根杆的长度和角度,求端点坐标)。 既然有正运动学,就会有逆运动学(逆运动学可以理解为已知三杆长度和端点坐标,求相关角度)。 而在实际运用中,逆运动学往往更多,比如抓取物体。
潮
咱们还是从简单的开始
杆长r
,端点坐标为x,y
,很容易就能得到α角度arccos(r/x),arcsin(r/y)
接下来看两杆
依旧看这幅图,很容易就能想到余弦定理求角度,这没问题,但你可能会遇到一个问题,如图
你得到的结果可能是两个,这个时候就需要添加条件排除掉其中一个,或者根据条件选取最合适的一个,比如说让相对角度尽可能小,这样可以减少电机转动的圈数。
两杆就开始有多解,那三杆呢,肯定会有更多解,这个时候就要根据项目的具体情况去添加限制条件,下面拿具体项目来讲讲。
题目:使用摄像头进行识别并抓取物块放到指定的位置
这里是三个杆,就要想办法增加条件限制解的个数,比如物体的姿态,机械爪需要从哪个角度抓取等等条件。
我这里增加的就是物体姿态角,通过姿态角将三杆问题转化为两杆,再增加相对角度之和最小的条件得到最终结果。
如图所示:
下面详细介绍具体过程和代码实现(MFC & C++)
- 求解 根据坐标和姿态计算角度
- 移动到合适的抓取姿态 依次转动三根杆到合适的角度(也可以同时转动)
- 抓取 进行抓取
在这三个过程中还要通过正运动学计算并绘制爪子 另外,计算机的坐标原点和xy轴都在左上角,并不是中心点,需要进行坐标系变换,这里不再详细讲述。
源码仓库GitHub - wxydejoy/DrawPath: 三杆 机械臂
这里就不对代码进行介绍了,内容很多,核心部分以及思路已经在上述内容中讲过,欢迎指正。
终
思路其实不是很难,难的是其中的细节,敲错一点或者有理解不清楚的结果就会完全不一样。
平面三杆已经有点复杂了,那如果是空间三杆呢?如何计算?