| Directory: | ./ |
|---|---|
| File: | include/pinocchio/bindings/python/spatial/explog.hpp |
| Date: | 2025-02-12 21:03:38 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 46 | 64 | 71.9% |
| Branches: | 17 | 71 | 23.9% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // | ||
| 2 | // Copyright (c) 2015-2021 CNRS INRIA | ||
| 3 | // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. | ||
| 4 | // | ||
| 5 | |||
| 6 | #ifndef __pinocchio_python_explog_hpp__ | ||
| 7 | #define __pinocchio_python_explog_hpp__ | ||
| 8 | |||
| 9 | #include "pinocchio/spatial/explog.hpp" | ||
| 10 | |||
| 11 | namespace pinocchio | ||
| 12 | { | ||
| 13 | namespace python | ||
| 14 | { | ||
| 15 | |||
| 16 | template<typename Vector3Like> | ||
| 17 | Eigen:: | ||
| 18 | Matrix<typename Vector3Like::Scalar, 3, 3, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options> | ||
| 19 | 4 | exp3_proxy(const Vector3Like & v) | |
| 20 | { | ||
| 21 | 4 | return exp3(v); | |
| 22 | } | ||
| 23 | |||
| 24 | template<typename Vector3Like> | ||
| 25 | Eigen:: | ||
| 26 | Matrix<typename Vector3Like::Scalar, 4, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options> | ||
| 27 | 1 | exp3_proxy_quat(const Vector3Like & v) | |
| 28 | { | ||
| 29 | typedef typename Vector3Like::Scalar Scalar; | ||
| 30 | typedef Eigen::Quaternion<Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options> | ||
| 31 | Quaternion_t; | ||
| 32 | typedef Eigen::Map<Quaternion_t> QuaternionMap_t; | ||
| 33 | typedef Eigen::Matrix<Scalar, 4, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options> | ||
| 34 | ReturnType; | ||
| 35 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ReturnType res; |
| 36 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | QuaternionMap_t quat_out(res.derived().data()); |
| 37 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | quaternion::exp3(v, quat_out); |
| 38 | 2 | return res; | |
| 39 | } | ||
| 40 | |||
| 41 | template<typename Vector3Like> | ||
| 42 | Eigen:: | ||
| 43 | Matrix<typename Vector3Like::Scalar, 3, 3, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options> | ||
| 44 | 1 | Jexp3_proxy(const Vector3Like & v) | |
| 45 | { | ||
| 46 | typedef Eigen::Matrix< | ||
| 47 | typename Vector3Like::Scalar, 3, 3, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options> | ||
| 48 | ReturnType; | ||
| 49 | 1 | ReturnType res; | |
| 50 |
0/2✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
1 | Jexp3(v, res); |
| 51 | 1 | return res; | |
| 52 | } | ||
| 53 | |||
| 54 | template<typename Matrix3Like> | ||
| 55 | 11 | typename PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like) Jlog3_proxy(const Matrix3Like & M) | |
| 56 | { | ||
| 57 | typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like) ReturnType; | ||
| 58 | 11 | ReturnType res; | |
| 59 |
0/2✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
11 | Jlog3(M, res); |
| 60 | 11 | return res; | |
| 61 | } | ||
| 62 | |||
| 63 | template<typename Matrix3Like, typename Vector3Like> | ||
| 64 | typename PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like) | ||
| 65 | ✗ | Hlog3_proxy(const Matrix3Like & M, const Vector3Like & v) | |
| 66 | { | ||
| 67 | typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like) ReturnType; | ||
| 68 | ✗ | ReturnType res; | |
| 69 | ✗ | Hlog3(M, v, res); | |
| 70 | ✗ | return res; | |
| 71 | } | ||
| 72 | |||
| 73 | template<typename Scalar, int Options> | ||
| 74 | 5 | SE3Tpl<Scalar, Options> exp6_proxy(const MotionTpl<Scalar, Options> & v) | |
| 75 | { | ||
| 76 | 5 | return exp6(v); | |
| 77 | } | ||
| 78 | |||
| 79 | template<typename Vector6Like> | ||
| 80 | SE3Tpl<typename Vector6Like::Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector6Like)::Options> | ||
| 81 | 1 | exp6_proxy(const Vector6Like & vec6) | |
| 82 | { | ||
| 83 | 1 | return exp6(vec6); | |
| 84 | } | ||
| 85 | |||
| 86 | template<typename Vector6Like> | ||
| 87 | Eigen:: | ||
| 88 | Matrix<typename Vector6Like::Scalar, 7, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector6Like)::Options> | ||
| 89 | ✗ | exp6_proxy_quatvec(const Vector6Like & vec6) | |
| 90 | { | ||
| 91 | EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector6Like, 6); | ||
| 92 | ✗ | return quaternion::exp6(vec6); // use quaternion-exp6 overload | |
| 93 | } | ||
| 94 | |||
| 95 | template<typename Scalar, int Options> | ||
| 96 | 100 | typename SE3Tpl<Scalar, Options>::Matrix6 Jlog6_proxy(const SE3Tpl<Scalar, Options> & M) | |
| 97 | { | ||
| 98 | typedef typename SE3Tpl<Scalar, Options>::Matrix6 ReturnType; | ||
| 99 | 100 | ReturnType res; | |
| 100 |
0/2✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
100 | Jlog6(M, res); |
| 101 | 100 | return res; | |
| 102 | } | ||
| 103 | |||
| 104 | template<typename Scalar, int Options> | ||
| 105 | 1 | typename MotionTpl<Scalar, Options>::Matrix6 Jexp6_proxy(const MotionTpl<Scalar, Options> & v) | |
| 106 | { | ||
| 107 | typedef typename MotionTpl<Scalar, Options>::Matrix6 ReturnType; | ||
| 108 | 1 | ReturnType res; | |
| 109 |
0/2✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
1 | Jexp6(v, res); |
| 110 | 1 | return res; | |
| 111 | } | ||
| 112 | |||
| 113 | template<typename Vector6Like> | ||
| 114 | Eigen:: | ||
| 115 | Matrix<typename Vector6Like::Scalar, 6, 6, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector6Like)::Options> | ||
| 116 | 1 | Jexp6_proxy(const Vector6Like & vec6) | |
| 117 | { | ||
| 118 | typedef MotionRef<const Vector6Like> Motion; | ||
| 119 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Motion v(vec6); |
| 120 | typedef typename Motion::Matrix6 ReturnType; | ||
| 121 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | ReturnType res; |
| 122 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Jexp6(v, res); |
| 123 | 2 | return res; | |
| 124 | } | ||
| 125 | |||
| 126 | template<typename Matrix3Like> | ||
| 127 | Eigen:: | ||
| 128 | Matrix<typename Matrix3Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like)::Options> | ||
| 129 | 15 | log3_proxy(const Matrix3Like & R) | |
| 130 | { | ||
| 131 | 15 | return log3(R); | |
| 132 | } | ||
| 133 | |||
| 134 | template<typename Matrix3Like, typename Matrix1Like> | ||
| 135 | Eigen:: | ||
| 136 | Matrix<typename Matrix3Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like)::Options> | ||
| 137 | ✗ | log3_proxy(const Matrix3Like & R, Eigen::Ref<Matrix1Like> theta) | |
| 138 | { | ||
| 139 | ✗ | return log3(R, theta.coeffRef(0, 0)); | |
| 140 | } | ||
| 141 | |||
| 142 | template<typename Matrix3Like, typename Scalar> | ||
| 143 | Eigen:: | ||
| 144 | Matrix<typename Matrix3Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like)::Options> | ||
| 145 | ✗ | log3_proxy_fix(const Matrix3Like & R, Scalar & theta) | |
| 146 | { | ||
| 147 | ✗ | return log3(R, theta); | |
| 148 | } | ||
| 149 | |||
| 150 | template<typename QuaternionLike> | ||
| 151 | Eigen::Matrix< | ||
| 152 | typename QuaternionLike::Scalar, | ||
| 153 | 3, | ||
| 154 | 1, | ||
| 155 | PINOCCHIO_EIGEN_PLAIN_TYPE(typename QuaternionLike::Vector3)::Options> | ||
| 156 | 1 | log3_proxy(const QuaternionLike & quat) | |
| 157 | { | ||
| 158 | 1 | return quaternion::log3(quat); | |
| 159 | } | ||
| 160 | |||
| 161 | template<typename Vector4Like> | ||
| 162 | Eigen:: | ||
| 163 | Matrix<typename Vector4Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options> | ||
| 164 | 1 | log3_proxy_quatvec(const Vector4Like & v) | |
| 165 | { | ||
| 166 | EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector4Like, 4); | ||
| 167 | typedef typename Vector4Like::Scalar Scalar; | ||
| 168 | typedef Eigen::Quaternion<Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options> | ||
| 169 | Quaternion_t; | ||
| 170 | typedef Eigen::Map<const Quaternion_t> ConstQuaternionMap_t; | ||
| 171 | |||
| 172 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | ConstQuaternionMap_t q(v.derived().data()); |
| 173 |
2/7✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1 | assert(quaternion::isNormalized( |
| 174 | q, typename Vector4Like::RealScalar(PINOCCHIO_DEFAULT_QUATERNION_NORM_TOLERANCE_VALUE))); | ||
| 175 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return quaternion::log3(q); |
| 176 | } | ||
| 177 | |||
| 178 | template<typename Vector4Like, typename Matrix1Like> | ||
| 179 | Eigen:: | ||
| 180 | Matrix<typename Vector4Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options> | ||
| 181 | ✗ | log3_proxy_quatvec(const Vector4Like & v, Eigen::Ref<Matrix1Like> theta) | |
| 182 | { | ||
| 183 | EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector4Like, 4); | ||
| 184 | typedef typename Vector4Like::Scalar Scalar; | ||
| 185 | typedef Eigen::Quaternion<Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options> | ||
| 186 | Quaternion_t; | ||
| 187 | typedef Eigen::Map<const Quaternion_t> ConstQuaternionMap_t; | ||
| 188 | |||
| 189 | ✗ | ConstQuaternionMap_t q(v.derived().data()); | |
| 190 | ✗ | assert(quaternion::isNormalized( | |
| 191 | q, typename Vector4Like::RealScalar(PINOCCHIO_DEFAULT_QUATERNION_NORM_TOLERANCE_VALUE))); | ||
| 192 | |||
| 193 | ✗ | return quaternion::log3(q, theta.coeffRef(0, 0)); | |
| 194 | } | ||
| 195 | |||
| 196 | template<typename Vector4Like, typename _Scalar> | ||
| 197 | Eigen:: | ||
| 198 | Matrix<typename Vector4Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options> | ||
| 199 | ✗ | log3_proxy_quatvec_fix(const Vector4Like & v, _Scalar & theta) | |
| 200 | { | ||
| 201 | EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector4Like, 4); | ||
| 202 | typedef typename Vector4Like::Scalar Scalar; | ||
| 203 | typedef Eigen::Quaternion<Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options> | ||
| 204 | Quaternion_t; | ||
| 205 | typedef Eigen::Map<const Quaternion_t> ConstQuaternionMap_t; | ||
| 206 | |||
| 207 | ✗ | ConstQuaternionMap_t q(v.derived().data()); | |
| 208 | ✗ | assert(quaternion::isNormalized( | |
| 209 | q, typename Vector4Like::RealScalar(PINOCCHIO_DEFAULT_QUATERNION_NORM_TOLERANCE_VALUE))); | ||
| 210 | |||
| 211 | ✗ | return quaternion::log3(q, theta); | |
| 212 | } | ||
| 213 | |||
| 214 | template<typename Matrix4Like> | ||
| 215 | MotionTpl<typename Matrix4Like::Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix4Like)::Options> | ||
| 216 | 2 | log6_proxy(const Matrix4Like & homegenous_matrix) | |
| 217 | { | ||
| 218 | 2 | return log6(homegenous_matrix); | |
| 219 | } | ||
| 220 | |||
| 221 | template<typename Vector7Like> | ||
| 222 | MotionTpl<typename Vector7Like::Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector7Like)::Options> | ||
| 223 | 1 | log6_proxy_quatvec(const Vector7Like & q) | |
| 224 | { | ||
| 225 | EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector7Like, 7); | ||
| 226 | typedef typename Vector7Like::Scalar Scalar; | ||
| 227 | enum | ||
| 228 | { | ||
| 229 | Options = PINOCCHIO_EIGEN_PLAIN_TYPE(Vector7Like)::Options | ||
| 230 | }; | ||
| 231 | typedef Eigen::Quaternion<Scalar, Options> Quaternion; | ||
| 232 | typedef Eigen::Map<const Quaternion, Options> ConstQuaternionMap; | ||
| 233 | typedef Eigen::Matrix<Scalar, 3, 1, Options> Vector3; | ||
| 234 | |||
| 235 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
1 | const Vector3 v(q.derived().template head<3>()); |
| 236 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | ConstQuaternionMap quat(q.derived().template tail<4>().data()); |
| 237 | |||
| 238 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return log6(quat, v); |
| 239 | } | ||
| 240 | } // namespace python | ||
| 241 | } // namespace pinocchio | ||
| 242 | |||
| 243 | #endif // ifndef __pinocchio_python_explog_hpp__ | ||
| 244 |