in differentiable_robot_model/spatial_vector_algebra.py [0:0]
def multiply_motion_vec(self, smv):
mass, com, inertia_mat = self._get_parameter_values()
mcom = com * mass
com_skew_symm_mat = utils.vector3_to_skew_symm_matrix(com)
inertia = inertia_mat + mass * (
com_skew_symm_mat @ com_skew_symm_mat.transpose(-2, -1)
)
batch_size = smv.lin.shape[0]
new_lin_force = mass * smv.lin - utils.cross_product(
mcom.repeat(batch_size, 1), smv.ang
)
new_ang_force = (
inertia.repeat(batch_size, 1, 1) @ smv.ang.unsqueeze(2)
).squeeze(2) + utils.cross_product(mcom.repeat(batch_size, 1), smv.lin)
return SpatialForceVec(new_lin_force, new_ang_force)