基本上,我想同时模拟静态扭矩(由于手臂的重量)和动态扭矩(由于加速关节的运动)对于给定的一组关节需要承受的扭矩动作。
我浏览了网上,找到了ROS-MoveIt Visualiser,Gazebo,V-REP等工具,这些工具可以让我直观地看到机械臂并模拟位置逻辑和外部因素(例如碰撞等)。我无法通过这些工具模拟/计算动态扭矩值。
理想情况下,我想定义末端执行器的固定运动(即,将机器人在两个位置之间移动)并测量在特定移动过程中的扭矩(静态和动态)。
这些扭矩值对于选择适合我的设计和有效载荷的最佳电动机和变速箱至关重要。
#1 楼
机械手臂的动力学相当复杂,尤其是要考虑三个以上的关节时。问题在于,每个关节的运动都会使所有链接超出它,这会在其他关节上引起扭矩。您必须考虑所有链接的运动如何影响每个单独的关节。有一种软件可以根据您提供的几何形状自动计算动力学(想到的是MATLAB + SimMechanics,尽管这是一个昂贵的选择)。我没有免费模拟器的任何知识,但是我敢肯定它们存在。您可能需要四处搜索以查看哪种模拟器最适合您的应用。
另一个选择是编写自己的模拟。许多不同的教科书都介绍了串行链接机器人动力学背后的数学原理。为了从头开始做这部分,您需要熟悉矩阵的使用,以及一些对微分方程的理解。我可以在此处提供一些基础知识,以使您大致了解要编程的内容。
您可以使用以下非线性矩阵方程来计算移动串行链接机械臂所需的扭矩:
$ \ boldsymbol {\ tau} = \ boldsymbol {M}(\ boldsymbol {q})\ ddot {\ boldsymbol {q}} + \ boldsymbol {C}(\ boldsymbol {q} ,\ dot {\ boldsymbol {q}})\ dot {\ boldsymbol {q}} + \ boldsymbol {G}(\ boldsymbol {q})$
其中
$ \ boldsymbol {\ tau} $是关节扭矩的(6x1)向量
$ \ boldsymbol {q} $是关节角度的(6x1)向量
$ \ dot {\ boldsymbol {q}},\ ddot {\ boldsymbol {q}} $是(6x1)关节角速度矢量和关节角加速度矢量
$ \ boldsymbol {M }(\ boldsymbol {q})$是机器人的(6x6)惯性矩阵,它是关节角度的函数
$ \ boldsymbol {C}(\ boldsymbol {q},\点{\ boldsymbol {q}})$是(6x6)离心和科里奥利效应矩阵,它是关节角度和角速度
$ \ boldsymbol {G}(\ boldsymbol {q})$是(6x1)重力转矩矢量,它是关节位置的函数
请注意,该方程式同时包含了动静载荷每个关节。如果将关节角速度和加速度设置为零,则将具有静态方程式。
您可以找到$ M $,$ C $和$ G $的表达式。在线矩阵,但您也可以尝试使用Euler-Lagrange方法为应用程序导出它们。
因此,您需要采取的步骤是:
推导与您的应用程序关联的动态矩阵。
推导将末端执行器的运动(位置,速度,加速度)转换为关节运动的方程(逆运动学)。
编写程序,将末端执行器的轨迹转换为一组关节轨迹(位置,速度和加速度)。
使用动力学方程计算所需的扭矩这条轨迹上的每个点。
这都是可能的(事实上,我自己是为3 DOF机械手完成的),但对于发烧友来说可能是太多的工作。
#2 楼
我认为您可能对这个问题有误。如果找到报告关节扭矩的模拟器,那又如何?您是否要遍历每个可能的开始和结束位置?您只需要评估最坏情况下的运动即可。最坏的情况是静态扭矩使手臂伸直承受最大负载,而最坏的情况下动态扭矩可能会是与重力作斗争时最大运动范围。
评估最坏情况(顺便说一下,每个关节不一定都一样!),就完成了。
#3 楼
为了模拟动力学,您需要一个多体动力学模拟软件。 Matlab-Simulink具有SimMechanics工具箱来执行此操作,但是用于执行机器人机械设计的许多CAD软件也可以进行仿真。例如,SolidWorks有一个称为“仿真”的仿真组件。如果您对动态方程式接线和扭矩计算感兴趣,则可以使用迭代牛顿-欧拉法。
评论
$ \ begingroup $
SimMechanics现在称为Simscape Multibody,仅供参考。
$ \ endgroup $
–卡盘
16年7月11日在18:18
#4 楼
OpenRave是另一个很好的库,可以计算动态转矩。使用ComputeInverseDynamics函数。这是一个python示例:robot.SetDOFValues(dofvalues)
robot.SetDOFVelocities(dofvelocities)
torques = robot.ComputeInverseDynamics(dofaccelerations)
或
torqueconfiguration, torquecoriolis, torquegravity = robot.ComputeInverseDynamics(dofaccelerations,None,returncomponents=True)
评论
$ \ begingroup $
请注意@BarbalatsDilemma答案中的$ C $矩阵。与问题中的不同,您称动态扭矩是由于加速了机器人的关节而引起的,您还需要考虑仅用于补偿科里奥利力和离心力所需的扭矩。对于某些运动曲线,这些值超过了其他扭矩要求。
$ \ endgroup $
– SteveO
16年7月11日在19:07