本文讲述了关于如果使用 python,实现对曲柄摇杆机构(含双曲柄,双摇杆和以摇杆为主动件的尚未完成)的模拟仿真。如有大佬,望不吝赐教,感谢!
实现原理
如图所示,$l_{0}$ 为机架,$l_{1}$ 为主动件,$l_{2}$ 为连杆,$l_{3}$ 为从动件,${\alpha_{01}}$ 为主动件旋转角度。可在任意时刻作辅助线 $l_{4}$,根据余弦定理可计算得出
$$l_4=\sqrt[2]{l_0^2+l_1^2-2l_0l_1\cos{\alpha_{01}}}$$
同理可得 ${\alpha_{04}}$ 和 ${\alpha_{34}}$。值得注意的是,${\alpha_{03}}$ 的计算分为两种
$${\alpha_{03}}=180^\circ-({\alpha_{34}}+{\alpha_{04}})\ , {\alpha_{01}}\leq180^\circ$$
$${\alpha_{03}}=180^\circ-({\alpha_{34}}-{\alpha_{04}})\ , {\alpha_{01}}>180^\circ$$
角度均以 $x+$ 方向起始。
代码
1 | import math |
示例
小结
由于 python 的特性(浮点数精度保留),计算反余弦时有概率会报错,因为其值超出 [-1,1] 的区间了,网上也没什么特别好的方法,据说改调用
numpy
库会解决这一问题,但我想尽量使用自带库就没有尝试,后期可能会试一下,目前是使用判定,若超出范围,则对其值乘上0.97
(即代码中的值2.06
)使之强行落在范围内,所以在一些特定情形下会出现从动件 l3 跳跃和抖动。值得注意的是 math 库中计算三角函数角度单位均为弧度(rad),这可能也是导致第 1 条的一个原因吧。
同样还是 python 自带库的问题,range 函数无法生成小数间隔的数列,所以目前最小分辨率是 1°,后期会自己写一个生成器或采用 numpy 库的。
暂时因为时间原因尚未完成双摇杆和以摇杆为主动件的模拟仿真,未来即将补上。
即将补上的还有完善 GUI 布局。
如果有大佬或者其他感兴趣的同志,欢迎和我联系 ([email protected])。
下载请见 Malvern’s File Server。