自平衡的立方体

 又一个非常有意思的项目,利用反作用力轮保持平衡的立方体! 

 

这个项目有什么用?没任何实际的用途,但却可以学到很多东西:)当然,韦伯望远镜的姿态控制也使用了类似的技术。

概览

这个立方体能够在顶点处保持平衡,同时还能以受控方式绕轴旋转。这一功能是通过巧妙地控制和一组三个反作用力轮来实现的。
这个装置的最初创意来自苏黎世联邦理工学院的研究人员。后来,该装置的设计得到了改进,Bobrow 等人(圣保罗大学)引入了改进的控制概念,将所需的 IMU(惯性测量单元)数量从六个减少到一个。

我决定挑战一下,自己动手做一个。尽管这个想法并不新颖,但以前的作品基本上都是闭源的。我想改变这种状况,从头开始逆向工程并制作这一切。我的工作成果是完全开源的,请看下面的视频。

机械设计

立方体的机械设计与最初的 Cubli 基本相同,但也有一些细微的差别。主体结构由八个转角组件和六块面板组成。其中三块面板具有额外的功能,可支持电机和反作用力轮组件。所有部件都是在 Fusion 360 中绘制的。我的学生时代已经结束,因此不得不告别西门子 NX。

大多数结构部件都由不锈钢制成,强度极高。面板由铝制成,以减轻重量。这些部件不需要使用钢材,因为铝材组装结构的刚度将绰绰有余。

我对电机和飞轮组件的设计很感兴趣。我一直在寻找一种坚固耐用的设计–毕竟飞轮的速度可达每分钟 6000 转–同时还要保持重量轻。虽然我是机械工程师出身,但结构原理并不是我的强项,不过毕竟这也是开展此类项目的原因:学习!我最终想出了以下方案。

电机通过三个沉头螺钉连接到不锈钢桥上。电桥最终连接到其中一个铝面板上。

一个小轮毂安装在电机轴上,并用三个固定螺钉固定。这个轮毂至关重要:如果中心孔与三角形平面不垂直,轮子就无法与电机轴对准,从而导致振动和磨损。

使用三个沉头螺钉将反作用力轮安装到轮毂上。这一步需要反复试验,以纠正轮毂和轮子上的缺陷,这些缺陷可能会导致我前面提到的不对齐问题。我通过在轮毂和飞轮的水平接触面之间放置小纸片来解决这些问题,结果令人满意。毕竟,这些部件并不经常被拆开。

将一个小型径向球轴承插入其中一个面板,并用氰基丙烯酸酯(”超级”)胶水固定。该滚珠轴承将支撑电机轴的一端。轴的另一端也由电机本身的轴承支撑。

最后,将电机轴插入轴承中,用四个螺栓将电桥与面板连接起来。此过程重复两次。

这样就得到了半个立方体。其余的面板不需要任何特殊的组装步骤,可以直接组装。注意到其中一个电机相对于它所连接的电桥的方向不同吗?这样做的目的是:简化稍后的布线工作。

这样就形成了一个坚固但相对轻巧的结构。铝制面板本身相对较弱,但组装在一起后不会移动。

机电设计

关于电机和电机控制器,使用的是 Maxon “EC flat “系列电机。虽然有可能找到更便宜的替代品,但电机及其控制器都是关键部件,我不想吝啬。立方体将通过对电机施加扭矩来实现平衡。许多直流电机的数据表甚至都没有说明扭矩常数(扭矩常数定义了扭矩和电流之间的关系),许多无刷电机控制器(如ESC系列)只提供速度控制,而不提供电流控制。要实现这个项目,这两者都是必不可少的,因此选择高质量的元件是显而易见的。

我选择了一个 60 W 的电机和一个兼容的四象限电机控制器,该控制器可提供高达 6 A 的电流。虽然这远远超出了电机的额定功率,但电机短暂过载是没有问题的。此外,控制器内置 I2t 算法,可在绕组温度过高时限制电机电流。由于平衡时的电流通常很低,因此在正常运行时,立方体不太可能达到这些极限。

Escon 电机控制器附带的软件非常棒。有电机调试和调整工具以及一个漂亮的仪表板,显示电机运行期间的状态及其输入/输出(如上面的截图所示)。

电池方面,我选择了6S1P锂聚合物电池。电机的额定电压为 24 V,因此六芯锂电池(标称电压 22.2 V)非常适合这里。电池容量为 1300 mAh(29 Wh),正常情况下足以运行立方体至少一个小时。

主板是定制设计,集成了三个电机控制器、IMU(隐藏式)、ESP32-S3 开发板以及一些辅助元件,如保护电路和稳压器。开发板还将为 RC 伺服电机提供输出,从而为立方体增加机械制动器。机械制动器将使立方体能够自行跳到平衡位置。目前没有完成制动器的设计开发。

组装电路板非常有趣。我首先涂上焊膏,然后放置表面贴装部件。在小型烤箱中回流后,我手工焊接了所有通孔部件。

后来,在整合和测试各个组件时,我发现自己犯了几个小的布线错误,于是我很快用 “飞线” 纠正了错误。原来,电机控制器上只有一个数字输入端支持 PWM,我把 PWM 信号接到了另一个(不支持的)输入端。

我还设计了一块安装电池的电路板。它要简单得多:有两个 XT60 连接器和两个开关(并联接线,因为电流高达 18 A),用于打开和关闭立方体。

控制器设计与调试

实际上,我自己并没有设计这个立方体的控制器,而是将 Fabio Bobrow 的工作(https://github.com/fbobrow/cubli-firmware)从 Arm Mbed 移植到了 Arduino。我还使用了 ESP32 而不是 STM32 Nucleo。尽管如此,重写代码还是花了不少功夫。此外,由于我使用了不同的 IMU(TDK Invensense 的 ICM20948),我不得不重写相应的 “驱动程序”。我还是花了不少时间研究这个控制器的设计,下面我将用几句话重点介绍它的一些优点。
主姿态控制器的设计非常有趣。也许最好的解释就是两个相互矛盾的目标之间的妥协。第一个目标是将立方体保持在所需的方向上,也就是保持在不稳定的平衡位置上。然而,第二个目标是将车轮速度保持在最低水平。如果不考虑第二个目标,可能会导致车轮速度失控,使电机达到饱和,从而实际上无法对立方体施加扭矩。

这两个目标是相互冲突的:如果将车轮速度保持在接近零的 “愿望” 过于强烈,立方体就会倒下。就像前面提到的,如果 “欲望”太弱,车轮可能会失控。因此,诀窍在于找到既能实现良好的平衡性能和干扰抑制,又能保持较低轮速的增益。

控制器中还有一种优雅的机制来处理恒定错误。什么是恒定误差?例如,由于立方体重量分布的不完美,配置的平衡位置和实际平衡位置之间可能存在微小差异。在 PID(比例-积分-导数)控制器中,积分部分处理这类误差。该控制器使用轮子的位置(度数)作为积分!在我看来,这实际上是一种非常直观的积分控制器可视化方式。当我修改立方体的重量分布时(在视频中:在立方体上放一个西红柿),你可以看到反作用力轮的速度先增大后减小:它们正在移动到一个新的位置,以补偿增大的误差!

到目前为止,调试和调整控制器是最大的代码相关工作。和其他有经验的控制工程师一样,我花了几天时间翻转各种信号的符号,才把它们弄对。然后,我必须为控制器找到合适的增益。Bobrow 论文中描述的调整方法对我不起作用,所以我只好用手调整增益。请注意,与 Bobrow 的魔方相比,我的魔方使用了不同的轮子,因此不可能重复使用增益。通过迭代程序,我最终得到了增益,从而实现了视频中显示的稳定性能。

原理图 & PCB
主板

电池板

License

GPL 3.0

仓库 & 下载

可以在Github中获取开源仓库:

https://github.com/willem-pennings/balancing-cube

作者:极客石头

在搞事情的路上越走越远。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注