设计制造一个五轴机器人手臂
扫描二维码
随时随地手机看文章
这是我自行设计并用 3D 打印技术制造的五轴机器人手臂,我制作它是为了研究正运动学和逆运动学背后的数学原理,了解通信协议,同时也因为它是一个有趣的设计挑战!
该项目的灵感来源于著名的 LeRobot SO-101 设计理念,但其整体设计却是从零开始全新打造的。SO-101 机器人旨在尽可能简化设计,以便能够快速启动并运行,因为它主要是作为一个机器学习工具而设计的,并非机器人手臂教学套件。因此,为了实现这一目标,不得不做出一些妥协,比如采用刚性关节和延长使用寿命等。不过,对此项目并不抱有不敬之意,因为它确实是一款非常出色的产品(从其受欢迎程度就可以看出)。
构建详情
“Motors”
实际上,这是我第二次尝试制造机器人手臂。第一次时我只使用了普通的模型伺服电机,但它们的功能非常有限(没有反馈功能),而且如果用力对着它们吹气,手臂就会失控飘向空中。当 LeRobot SO-101 在所有机器人新闻媒体上频频出现时,我找到了一个更好的解决方案:智能串行总线伺服电机。
这些伺服电机具备速度控制、位置反馈等功能,而且远不止能够将自身移动至预设位置这么简单。当然,我必须亲自测试一下它们,而这个项目正是绝佳的实践机会。
关节
为了使所有关节更加坚固且顺畅,我在伺服电机的非驱动侧使用了滚珠轴承。这样可以支撑每个关节,从而避免所有重量都集中在输出轴和齿轮上。
底盘
整个手臂的主体部分是用 PLA 材料通过 3D 打印技术制造的。由于我并不期望这个手臂能长时间承受大量重量或进行多次重复动作,所以蠕变问题并不需要考虑。为了在手臂移动时保持平衡,我在底部放置了一个装满沙子的盒子,手臂的底部关节会与这个盒子的底部螺丝连接。稍后我会发布完整的物料清单。
运动学
现在,乐趣(以及痛苦)就开始了。在这个项目中,我采用了德瓦蒂-哈伦伯格(D-H)坐标系分配方法,并通过解析式计算出了逆运动学。这通常是学校里教授机器人运动学时所采用的“入门方法”,因为它简单到只是涉及大量的三角学知识,但对线性代数的要求并不高。
所有的数学运算都是使用 Python 语言结合 Numpy 库完成的,该库在线性代数方面非常强大。
控制面板用户界面
正如你所能想象的那样,这个项目中涉及了大量的调试工作。我发现自己总是需要不断地添加/删除代码行,以便让机器人按照特定方式移动,从而观察其行为并检查数学计算结果。最终,我实在忍无可忍,于是决定学习一些 C++,并使用 Qt 框架来构建一个图形用户界面(GUI)。
最初设计图形用户界面(GUI)的初衷只是为了让用户能够简单地控制机器人,使其能够向任何方向移动并获取位置反馈,但如果还能手动控制每个关节会怎样呢?而且为什么止步于此呢?我还可以添加一个摄像头视角以增添趣味性。既然我正在尝试使用带有反馈功能的这些高级伺服电机,那如果我能手动将机器人拖到某个位置,读取伺服电机的位置,然后保存该位置呢?等等,我刚刚实现了“教学”功能!这就是这个项目范围失控的原因所在。
交流;沟通
该项目包含以下几个部分:
•控制面板
•机器人控制板
•主控制器(使用 Python 作为服务器语言,运行于本地电脑上)
在所展示的内容中,还包含着更多的层次,这些内容在 Github 的 README 文件中有更详细的说明。
如果你熟悉 Qt 框架,那么你很可能也知道它有一个对应的 Python 包。我敢肯定你一定在想,既然我之前用 Python 来实现所有其他组件,为什么这次我不直接使用那个 Python 包呢?答案很简单:因为我喜欢这种“精神折磨”,而且我还想学习一些 C++。
然而,这也有其自身的挑战。为了能够在 C++ 和 Python 之间高效且优雅地进行通信,我不得不自行创建一种二进制协议。
本文编译自hackster.io





