首先说一下我的心得:   1. 我认为KDL的精髓是Spatial Vector,结合C++等面向对象的语言可以写出较好的软件。 2. 直接阅读KDL代码不适合初学者学习机械臂动力学。 3. 要学习机械臂动力学的话应首先阅读使用3维向量推导公式的文献,也就是线速度和角速度独立分析。 4. 掌握机械臂动力学的原理之后再考虑如何将其写成代码,顺序不能错,否则会很吃力。 5. 机械臂动力学涉及到刚体运动学、刚体动力学、矩阵分析、李群和螺旋理论等。   一、3维向量和6维向量   KDL中的算法大多是参考的《Rigid Body Dynamics Algorithms》这本书中的方法,它提出了Spatial Vector—是将3维的线性运动(力)和3维的旋转运动(力)组合起来的6维向量。这种组合可以极大地减小代数运算量,并且可以使代码更短、更清晰、更方便阅读和调试,所以这种程序适合用C++这种面向对象的语言来写。   Spatial Vector的种类: Spatial Velocity:   1614778159(1)   微信图片_20210303212959   Spatial Acceleration:   1614778260(1)   微信图片_20210303213124   Spatial Force:   1614778308(1)   微信图片_20210303213203   Spatial Momentum:   1614778385(1)     微信图片_20210303213334   Spatial Inertia tensor:   1614778438(1)  

二、牛顿欧拉法的数学基础

  刚体的运动方程,将牛顿方程和欧拉方程结合:   1614778520(1)   其中定义的一些运算符:   1614778542(1)   1614778577(1)(以基坐标为参考系,连杆i质心的速度) 1614778602(1) (以基坐标为参考系,连杆i质心的加速度) 1614778631(1)(以连杆i坐标系为参考系,连杆i质心的速度) 1614778656(1)(以连杆i坐标系为参考系,连杆i质心的加速度) 1614778677(1)(以连杆i坐标系为参考系,关节i传递给连杆i的力) 1614778701(1) (为了产生1614778737(1),关节i需要输出的力矩或力)