robotoc
robotoc - efficient ROBOT Optimal Control solvers
Loading...
Searching...
No Matches
se3_jacobian_inverse.hxx
Go to the documentation of this file.
1#ifndef ROBOTOC_SE3_JACOBIAN_INVERSE_HXX_
2#define ROBOTOC_SE3_JACOBIAN_INVERSE_HXX_
3
5
6#include <cassert>
7
8
9namespace robotoc {
10
12 : mat_3d_tmp_(Eigen::Matrix3d::Zero()) {
13}
14
15
16template <typename MatrixType1, typename MatrixType2>
18 const Eigen::MatrixBase<MatrixType1>& Jac,
19 const Eigen::MatrixBase<MatrixType2>& Jac_inv) {
20 assert(Jac.rows() >= 6);
21 assert(Jac.cols() >= 6);
22 assert(Jac_inv.rows() >= 6);
23 assert(Jac_inv.cols() >= 6);
24 const_cast<Eigen::MatrixBase<MatrixType2>&>(Jac_inv).template topLeftCorner<3, 3>().noalias()
25 = Jac.template topLeftCorner<3, 3>().inverse();
26 const_cast<Eigen::MatrixBase<MatrixType2>&>(Jac_inv).template block<3, 3>(3, 3).noalias()
27 = Jac.template block<3, 3>(3, 3).inverse();
28 mat_3d_tmp_.noalias() = Jac.template block<3, 3>(0, 3)
29 * Jac_inv.template block<3, 3>(3, 3);
30 const_cast<Eigen::MatrixBase<MatrixType2>&>(Jac_inv).template block<3, 3>(0, 3).noalias()
31 = - Jac_inv.template topLeftCorner<3, 3>() * mat_3d_tmp_;
32}
33
34} // namespace robotoc
35
36#endif // ROBOTOC_SE3_JACOBIAN_INVERSE_HXX_
void compute(const Eigen::MatrixBase< MatrixType1 > &Jac, const Eigen::MatrixBase< MatrixType2 > &Jac_inv)
Computes the inverse of the Jacobian of SE3.
Definition: se3_jacobian_inverse.hxx:17
SE3JacobianInverse()
Default constructor.
Definition: se3_jacobian_inverse.hxx:11
Definition: constraint_component_base.hpp:17