我目前正在尝试使用“ rigid_body_tree.cc”文件计算方程式的曲折臂的雅各比:Tau = J ^ T * F,其中Tau是曲折臂的7个关节扭矩,F是末端执行器处的笛卡尔力和扭矩,J ^ T是雅可比移调的。
在Drake中存在一个名为transformPointsJacobian的函数,该函数接收缓存,点,from_body_or_frame_ind,to_body_or_frame_ind和in_terms_of_qdot。
该函数首先计算几何雅可比行列式,输出一个6x7矩阵(kuka有7个关节)
然后,它使用该矩阵并将其用于确定一个3x7的雅各布,其计算如下:
J.template block<kSpaceDimension, 1>(row_start, *it) = Jv.col(col);
J.template block<kSpaceDimension, 1>(row_start, *it).noalias() += Jomega.col(col).cross(points_base.col(i));
这会将6x7几何jacobian缩小为3x7 jacobian,其中前3行是通过Jv + Jw * Transformation计算的。
此代码肯定有效,但是我似乎不明白为什么此步骤有效。另外,由于我将需要笛卡尔末端执行器空间中的扭矩,因此我将需要完整的6x7雅可比。
为了获得雅各布的最后三行,我如何使用几何雅各布的输出,以便在方程Tau = J ^ T * F中有效?
谢谢!