说到单摆的实体模型,大家可能会想:不就是一根绳子吊着一根小球吗?这有什么可写的?诶,还恰恰不是我们刻板印象中想象的那样。
为了实现数字孪生,我们需要在单摆的小球上设计一个传感器,用于实时传输获取到的数据来在电脑端实现可视化,画出一个几乎跟实体模型同频的IoT模型,刚开始想到这里觉得确实很简单,不就是把传感器一贴,数据一读,图像一画,一气呵成一下子就搞定了吗?还真不是这样。
首先,我们了解单摆是在初中、高中阶段,学到的单摆其实是在二维平面内近似后的结果,虽然实际生活中我们主观上认为这二者差别其实很小,但真正要做时却发现这其中不确定因素太多了,拿从某宝上买来的单摆模型举个例子吧,这个买来的模型其实已经比较理想化了,绳子不是弹性绳,且相较于底下悬挂着的小球来说绳子质量很轻可以忽略不计,重心就可以近似看成小球的球心(划重点!下面还会说到这点)
单摆摆动1
通过视频可以看到,我从一个理想情况释放小球,刚开始可能还看不太出来,可是当来回摆动多次时,就可以很明显的看到小球其实是在三维平面内画圈,而且轨迹越摆越偏,甚至摆着摆着会装上右边的铁杆。
单摆摆动2
这样就导致设计数学算法建模时不能很好的找到一个恰当的模型来拟合,我从百度百科上找到的公式
来进行建模的话,由于传感器读入的角速度是三个轴xyz的,会导致实际传输回来的数据比理想化的数据要大很多,我设计的
算法,引入了arccos函数,而arccos函数是有定义域要求的【-1,1】,这样就导致传回来的数据一旦比正常大一些,程序运行时会直接报math error,也就是超出定义域了……
于是乎我考虑改进实体模型,尽量减少干扰因素,减少不确定度,我考虑了三个方案
第一个方案是这样的:
这个方案是由钟摆引发的灵感,因为钟摆是一个比较理想的在二维平面内摆动的例子,我觉得这样设计可能会比较理想,于是乎就用CAD设计了一个图,然后用激光切割机切割了一块亚克力板,用胶带把传感器和供电电池贴上去
也就是这样的效果,可是我想的是挺好的,但实际上我设计的这个“钟摆”,它的物理原型并不是个单摆,而是一个我从未接触到的概念——复摆
摘自度娘的定义
而复摆的计算就要涉及刚体力学等深奥的物理知识,数学计算也远远比单摆要复杂,而且做一个复摆出来也不是我做这个数字孪生示范项目的初衷,复摆也不是中小学生所能接触到的知识,本项目的初衷是为了让知识学习低龄化、大众化,高级的技术是中学生看不懂的,教育就会做得太高级,而我是想弥补中间的裂痕。所以我又考虑方案二
方案二是设计一个正方形壳子,然后把传感器和电池塞在里面,然后拿一根细线绑着这个正方体的一个角,让重心能够共线,我用SolidWorks设计了一个模型,也就是这样的效果:
效果视频
结果前行路上处处充满坎坷TAT,我设计模型尺寸时想的是正好把传感器和电池卡上去,所以设计打印尺寸就比实际的传感器和电池尺寸大了一丢丢,然后经历了一个下午3D打印机的费心工作,当我拿银铲铲把模型铲下来满怀喜悦心情要插好物理模型搞IoT时……¥&……()*&()*#¥……#¥
┭┮﹏┭┮
于是又经历了漫长的n个小时,重新把模型放大了一点,打印出来,终于可以把传感器和电池放进去啦!
单摆实体模型探索·1
传感器贴好,电池贴好,细线牵好!本以为可以大功告成,结果挂在铁架上试摆的时候,发现了一个很严重的问题,就是这个正方体在不断地自转……以及还是会出现在三维空间里画圈的问题
而我用的传感器,是ICM20948,有三轴陀螺仪,如果如视频那样这个小正方块不停地自转的话,我读取到的数据会不可用,会偏差非常大……
经过再三思考,我觉得做出一个真正意义上的绳子牵小方块这样一个单摆模型,远远超出了我当前的能力范围,因为这样做的话对我的工程量要求太大,如果是涉及摄像头用openCV做的话算法难度也会过大,总之这两条路都不好走,所以我打算先用激光切割好的复摆,先去做出一个IoT模型,再在IoT模型上不断改进,慢慢趋近于最初的初衷和目的