构建一个具有 5 个自由度的机器人手臂
扫描二维码
随时随地手机看文章
在之前的项目中,我构建了一个具有 5 个自由度的机器人手臂,并使用 D-H 方法以及解析求解器实现了其运动学计算。
你是否曾体验过伺服装置损坏所带来的痛苦?我经历过,但现在我可以在一个完全安全的环境中对更昂贵的部件进行这种操作了。
在疯狂地进行谷歌搜索的过程中,我偶然发现了一种涉及螺旋理论的方法,但这种方法看起来极其复杂,而且我知道自己肯定会犯很多错误。我还意识到,在实体机器人上调试数学问题是非常低效的(而且可能成本高昂)。
为了将高级控制与物理机器人众多的潜在误差源隔离开来,我在 Webots 中搭建了一个包含工业机械臂的模拟环境。通过设置“完美”的物理参数,使得诸如齿轮间隙这类误差问题不再成为问题,这样我就能将故障排查的范围缩小到数学和代码层面。一旦我最终将这种方法应用到我的物理机械臂上,我就能确定任何抖动都是硬件故障,而非计算错误。
运动学 - 螺旋理论
虽然市面上确实有各种各样的运动学库,但我还是决定从零开始构建运动学求解器,以便深入了解雅可比矩阵以及“扭转”这一概念的运作原理。
为了解决正向运动学和逆向运动学问题,我参考了林奇和帕克所著的《现代机器人学》一书中的相关理论,该理论主要基于螺旋理论。
螺旋理论基于莫齐-夏斯莱定理,该定理指出,在三维空间中任何刚体的运动都可以用螺旋运动来表示(即沿着螺旋轴进行旋转和平移)。
优点
•采用基于雅可比矩阵的方法,对奇异点的适应性更强。
•由于螺杆轴的设定方式比 D-H 坐标系更直观易懂,因此安装起来会更加简便。而且无需再为轴的对齐问题而烦恼了。
牛顿-拉夫逊求解器
虽然这种方法对于逆运动学没有解析解,但牛顿-拉夫逊迭代法使得求解器能够适用于任何类型的机器人。如果我要增加或减少一个自由度,我就不必手动重新求解正向和逆向运动学了。
牛顿-拉夫森算法的原理很简单。你向它输入一个关于所有关节角度应为何值的初始猜测值,然后它会计算出前向运动学,从而得出在该初始猜测值下的末端执行器姿态。如果新得到的末端执行器姿态与目标之间的误差不在某个阈值范围内,它就会继续进行下一个猜测,这个过程会不断重复,直到末端执行器“足够接近”目标为止。
位置控制与速度控制
起初,我尝试通过位置控制来控制手臂,即先求出目标关节位置的逆运动学。这种方法的问题在于每个关节移动的距离不同,因此它们到达目标的时间也会各不相同,手臂最终会以一种不可预测的弧线摆动,而不是沿着一条平滑的路径移动。一种解决办法是设置位于直线路径上的中间点。另一种方法是控制关节速度而非位置。
速度控制通过一种称为雅可比矩阵的特殊矩阵来解决这一问题。雅可比矩阵是一个将末端执行器的速度与所有关节速度联系起来的矩阵。具体而言,它帮助我们回答“什么样的关节速度会导致期望的末端执行器速度?”这样的问题。
PID 控制
在主运动方式中结合了 PID 控制回路和加速/减速逻辑,这样手臂的移动就会更加平稳,而不会突然以初始速度快速启动。
带有加速度的 PID 控制回路
动作中间的跳跃现象是由于在加速过程中速度达到了上限所致。这需要对加速幅度和限制条件进行调整。
为了更好地调整和调试 PID 控制,我为扭转误差实现了一个可视化工具。请注意,当机器人开始移动时,误差会急剧上升,然后随着机器人接近目标位置,误差会逐渐降低至零。
PID 倾斜误差图,旋转分量在左侧,平移分量在右侧。
问题
在编写这段代码的过程中,我开始思考是否真的有必要使用 PID 控制。如果我有加速控制功能,能够将速度加速到某一特定值,然后在末端执行器接近目标时减速至零,那么 PID 控制又能解决什么呢?它会与梯形速度曲线发生冲突吗?接下来我将通过实现梯形速度曲线来探索这个问题,并希望这样能使动作看起来更加真实。
本文编译自hackster.io





