基于3DOF机械臂的五子棋机器人–运动控制
文章目录
1. 前言
这篇文章会讲一下跟机械臂控制有关的部分。包括运动学逆解和运动学控制。不过这篇文章写的都是最简单、最基础的实现方法。因为我对自动控制方面并没有深入研究。
2. 运动学逆解
2.1 什么是运动学逆解
首先说明一个概念,什么是运动学逆解。
我们知道,机械臂控制,最终都是通过调整关节处的舵机角度实现的。而我们想机械臂达到指定位置,需要的却是一个坐标信息。把坐标信息通过数学运算得到每一个关节角的角度,就是运动学逆解
2.2 运动学逆解包括什么
一般来说,运动学逆解包括几何法和代数法两种解法。对于三自由度机械臂来说,利用几何法,仅仅需要很少的数学知识就能够解析得到所需要的舵机角度。而代数法,需要使用线性代数的知识,通过不断的进行坐标变换和基变换,在一个个坐标空间之间做映射才能求解得到。
因为我项目中使用的是三自由度的机械臂,因此,这里仅仅介绍下几何法解法。不过,对于更加复杂的系统来说,运动学逆解很可能出现多解问题,因为到达指定的坐标,机械臂关节角可以有多种组合方法。
2.3 基于几何法的运动学逆解
这里使用的数学知识,仅仅需要余弦定理即可。
我手动推导一下,我具体的代码丢了,这里就不展示了。不过注意是是,c++有atan2(),这种需要两个参数的反三角函数,一定要用这个,因为比值相同的x/y可能对应的是正负不同的角度。单独把x和y拿出来,能够利用象限区分得到的应该是正角还是负角
3. 运动控制
运动控制的话,也比较简单,主要想说速度控制、平稳过渡和路径规划的问题。
3.1 速度控制
机械臂控制的过程中,一定不要直接就从a点关节角度参数,变到b点节角度参数,这样的话,机械臂运动看起来像抽风一样,而且还抖动及其的厉害。应该利用循环进行过度。比如从0->90度,就应该是0,1,2,…,90这样的慢慢过度。
3.2 平稳过渡
控制好了速度之后,还有平稳过度的问题。为了平稳过度,绝对不能是x方向的关节角变动结束了,再变动y方向关节角,再变动z方向关节角这种,因为加速度方向突变太大,运动一点都不平稳。应该让x方向关节角改变1度,再y方向关节角改变1度,再z方向关节角改变1度这样,直到最后三个方向的关节角全部到达指定位置。
除此之外,每次改变关节角之后,最好都加一点点的延时。事实上,运动的太快,除了机械臂不平稳,姿势怪异、东西会掉可能会掉以外,还可能造成惯性对运动控制的影响。因为你各个关节舵机带动的杆件有弹性,可能会在误差范围内,每次控制杆件的位置都有些差异,使得你写好了坐标位置,但是可能每次都到达的不是同一个位置。如果速度太快,受到惯性影响,会沿着速度的方向继续偏移一点点。不过,如果你的机械结构刚性非常强,可能就不需要考虑这个问题了。
因此再重复强调一下机械设计时候说过的话,各个传动杆件的刚性一定要足够强!弹性太高了,控制精度会非常差!
不过,为了减少刚性的影响,我还想出了一种结构调整方法,但是我没试过,要是有人有兴趣可以试试。就是在机械臂大臂和小臂之间加一些弹簧,能够控制机械臂在左右方向上的振动。
如果懂自动控制原理的话,应该可以在运动中加入阻尼,减少晃动。
3.3 轨迹规划
轨迹规划问题,就比如你的运动轨迹上有障碍物,你必须要避开的时候,这个时候就有轨迹规划问题需要考虑。轨迹规划主要是通过插入中间点避开障碍物,然后以起始点、中间点、终点为关键点,在路径中使用插值的方法构建路径曲线,使得速度、加速度、加加速度全部都连续。这个我是没有用到过的,如果遇到这个问题,也可以去查阅相关的书籍。
4. 参考
我在机械臂的下位机和图像处理部分,都有参考这个up的源码,有需要也可以看看。https://www.bilibili.com/video/BV1v7411m765