动力学模型在实际工程中主要解决以下四大类问题:为了让机械臂这样动,电机要出多大力,(逆动力学/前馈);如果给电机这么大的力,机械臂会怎么动,(正动力学/仿真);如果它实际用的力和理论值不一样,是不是撞到了什么?(碰撞检测/安全)。
问题:纯位置环(PID)只有在产生了位置误差后才会发力,对于快速变化的轨迹,这会导致永远追不上、到处是滞后。
解决方案:利用逆动力学计算出为了达到这个加速度,电机现在该出多少力,提前发给驱动器(力矩前馈)。 机械臂场景:在 MIT 模式中,将重力项 G(q)和惯性项 M(q)q¨ 实时算好填入 τff,PD控制器只需要处理极小的扰动,实现零误差或者接近零误差的轨迹跟踪。
问题:机械臂本身很重,想让它柔顺(比如手推得动),必须先让它感觉不到自己的重量。
解决方案:重力补偿,利用动力学模型实时算出抵消重力所需力矩,输出给电机。
零力拖动示教:把 MIT 模式的 Kp,Kd设为 0,只发重力补偿力矩 τff,此时机器人像漂浮在太空,操作员可以用手指轻松拨动它来录制清洁轨迹。
问题:六维力传感器只装在末端,如果机械臂的大臂或肘部撞到了,你怎么知道?
解决方案:力矩残差监测,利用动力学模型实时计算正常运动应该需要多少力矩,然后和驱动器反馈的实际力矩做差。如果差得很多,说明机械臂碰到了意料之外的东西。 机械臂场景:算法监测到 J1 关节的力矩异常飙升,但此时六维力传感器没有读数,系统判断为J1 连杆发生碰撞,立即急停,保护机械臂。
问题:直接上真机调试算法很危险,或者机械臂还没造出来。
解决方案:正动力学,给定电机力矩,计算机械臂会怎么动。 场景:在 Simulink 或 Gazebo 里搭建一个虚拟的 SCARA+俯仰机械臂,调整导纳参数,看接触力曲线是否稳定。或者在制造之前,仿真验证电机扭矩是否足够抬起最重的清洁模组。
5. 最后说下动力学方程

5.2 拉格朗日法从能量出发得到:

5.3 牛顿-欧拉递推法从平衡出发:
正向算加速度:

反向算力矩:








