这是我正在使用的3D模型的草稿,我想使用python语言模拟其行为。我一直在研究此模拟的最佳实现,但没有发现任何适合实际运动的东西。我尝试了解析求解,但由于某些参数(确定臂长的某些误差)的不确定性而失败了。
我想模拟旋转关节产生的运动,然后将其转移到类似于该方案所示系统的系统。
在特定时间,系统可能会使用旋转关节,然后变为以下状态。
下一个方案描述了系统的两种状态。
使用DH参数的简单简化将是:
重要的是如何计算两个不受控制的关节的位置和角度,以便可以计算出受体关节的角度(固定点)。
这不仅是逆运动学问题。也必须考虑运动限制。运动必须由旋转关节角度,链节的长度以及固定点的位置和长度决定。
下一个图像中的红色圆圈表示第二个非受控点的可能位置。
您将如何模拟该运动?
解决方案
有一个有问题的位置,其中两个圆的交点(如下所述)只有一个点。在这种情况下(我们假设它是平面状态(重力垂直于所有手臂),并且处于静态状态),没有任何力随着第二个不受控制的关节而运动。在动态中,我们为下一步选择了另一个解决方案。
当不存在相交时,该情况不存在,并且旋转关节无法移动到该位置。
当计算所有位置并确定不存在交点的位置时,我们将获得(琐碎的)运动限制。
您是否直接获得非固定点的终点位置?
较旧的答案:
模拟运动:
使用步骤delta_t计算开始位置和结束位置之间所有时间的非控制点的位置。
逐步绘制每个计算出的位置(例如通过Pygame)。
计算:
第一个非控制点的第一个计算位置(较高)
x_2 = x_1 + l_12 cos(Theta_1),
y_2 = y_1 + l_12 sin(Theta_2),
其中X_1(x_1,y_1)是旋转点的位置,X_2(x_2,y_2)是第一个非控制点的位置,l_12是X_1和X_2之间的长度
计算两个圆k_1和k_2的交点,其中k_1(第一个非控制点,l_23)和k_2(受体关节,l_34),其中k(圆的中心,圆的半径)。
步骤2有两个解决方案。我们选择其中之一。为了模拟运动,我们必须选择“相同的解决方案”。
从两点计算角度:
alpha = math.atan2((y_2-y_1)/(x_2-x_1))