| Directory: | ./ |
|---|---|
| File: | include/pinocchio/spatial/classic-acceleration.hpp |
| Date: | 2025-02-12 21:03:38 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 21 | 21 | 100.0% |
| Branches: | 26 | 56 | 46.4% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // | ||
| 2 | // Copyright (c) 2019 INRIA | ||
| 3 | // | ||
| 4 | |||
| 5 | #ifndef __pinocchio_spatial_classic_acceleration_hpp__ | ||
| 6 | #define __pinocchio_spatial_classic_acceleration_hpp__ | ||
| 7 | |||
| 8 | #include "pinocchio/spatial/se3.hpp" | ||
| 9 | #include "pinocchio/spatial/motion.hpp" | ||
| 10 | |||
| 11 | namespace pinocchio | ||
| 12 | { | ||
| 13 | /// | ||
| 14 | /// \brief Computes the classic acceleration from a given spatial velocity and spatial | ||
| 15 | /// acceleration. | ||
| 16 | /// | ||
| 17 | /// \tparam Motion1 type of the input spatial velocity. | ||
| 18 | /// \tparam Motion2 type of the input spatial acceleration. | ||
| 19 | /// \tparam Vector3Like type of the return type (a type similar to a 3D vector). | ||
| 20 | /// | ||
| 21 | /// \param[in] spatial_velocity input spatial velocity. | ||
| 22 | /// \param[in] spatial_acceleration input spatial acceleration. | ||
| 23 | /// \param[out] res computed classic acceleration. | ||
| 24 | /// | ||
| 25 | /// \remarks To be valid, the spatial velocity and the spatial acceleration have to be expressed | ||
| 26 | /// at the same Frame. | ||
| 27 | /// | ||
| 28 | template<typename Motion1, typename Motion2, typename Vector3Like> | ||
| 29 | 427 | inline void classicAcceleration( | |
| 30 | const MotionDense<Motion1> & spatial_velocity, | ||
| 31 | const MotionDense<Motion2> & spatial_acceleration, | ||
| 32 | const Eigen::MatrixBase<Vector3Like> & res) | ||
| 33 | { | ||
| 34 |
4/8✓ Branch 1 taken 427 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 427 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 427 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 427 times.
✗ Branch 12 not taken.
|
854 | PINOCCHIO_EIGEN_CONST_CAST(Vector3Like, res).noalias() = |
| 35 |
2/4✓ Branch 2 taken 427 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 427 times.
✗ Branch 6 not taken.
|
854 | spatial_acceleration.linear() + spatial_velocity.angular().cross(spatial_velocity.linear()); |
| 36 | 427 | } | |
| 37 | |||
| 38 | /// | ||
| 39 | /// \brief Computes the classic acceleration from a given spatial velocity and spatial | ||
| 40 | /// acceleration. | ||
| 41 | /// | ||
| 42 | /// \tparam Motion1 type of the input spatial velocity. | ||
| 43 | /// \tparam Motion2 type of the input spatial acceleration. | ||
| 44 | /// | ||
| 45 | /// \param[in] spatial_velocity input spatial velocity. | ||
| 46 | /// \param[in] spatial_acceleration input spatial acceleration. | ||
| 47 | /// | ||
| 48 | /// \remarks To be valid, the spatial velocity and the spatial acceleration have to be expressed | ||
| 49 | /// at the same Frame. | ||
| 50 | /// | ||
| 51 | template<typename Motion1, typename Motion2> | ||
| 52 | 327 | inline typename PINOCCHIO_EIGEN_PLAIN_TYPE(typename Motion2::Vector3) classicAcceleration( | |
| 53 | const MotionDense<Motion1> & spatial_velocity, | ||
| 54 | const MotionDense<Motion2> & spatial_acceleration) | ||
| 55 | { | ||
| 56 | typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(typename Motion2::Vector3) ReturnType; | ||
| 57 | 327 | ReturnType res; | |
| 58 |
0/2✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
327 | classicAcceleration(spatial_velocity, spatial_acceleration, res); |
| 59 | 327 | return res; | |
| 60 | } | ||
| 61 | |||
| 62 | /// | ||
| 63 | /// \brief Computes the classic acceleration of a given frame B | ||
| 64 | /// knowing the spatial velocity and spatial acceleration of a frame A | ||
| 65 | /// and the relative placement between these two frames. | ||
| 66 | /// | ||
| 67 | /// \tparam Motion1 type of the input spatial velocity. | ||
| 68 | /// \tparam Motion2 type of the input spatial acceleration. | ||
| 69 | /// \tparam SE3Scalar Scalar type of the SE3 object. | ||
| 70 | /// \tparam SE3Options Options of the SE3 object. | ||
| 71 | /// \tparam Vector3Like type of the return type (a type similar to a 3D vector). | ||
| 72 | /// | ||
| 73 | /// \param[in] spatial_velocity input spatial velocity. | ||
| 74 | /// \param[in] spatial_acceleration input spatial acceleration. | ||
| 75 | /// \param[in] placement relative placement betwen the frame A and the frame B. | ||
| 76 | /// \param[out] res computed classic acceleration. | ||
| 77 | /// | ||
| 78 | template< | ||
| 79 | typename Motion1, | ||
| 80 | typename Motion2, | ||
| 81 | typename SE3Scalar, | ||
| 82 | int SE3Options, | ||
| 83 | typename Vector3Like> | ||
| 84 | 669 | inline void classicAcceleration( | |
| 85 | const MotionDense<Motion1> & spatial_velocity, | ||
| 86 | const MotionDense<Motion2> & spatial_acceleration, | ||
| 87 | const SE3Tpl<SE3Scalar, SE3Options> & placement, | ||
| 88 | const Eigen::MatrixBase<Vector3Like> & res) | ||
| 89 | { | ||
| 90 | typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(typename Motion1::LinearType) Vector3; | ||
| 91 | |||
| 92 |
2/4✓ Branch 1 taken 533 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 533 times.
✗ Branch 5 not taken.
|
669 | const Vector3 linear_velocity_frame_B = |
| 93 |
4/8✓ Branch 1 taken 533 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 533 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 533 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 533 times.
✗ Branch 11 not taken.
|
669 | spatial_velocity.linear() + spatial_velocity.angular().cross(placement.translation()); |
| 94 | |||
| 95 |
3/6✓ Branch 1 taken 533 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 533 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 533 times.
✗ Branch 8 not taken.
|
1338 | const Vector3 linear_acceleration_frame_B // expressed in the coordinate frame A |
| 96 |
2/4✓ Branch 1 taken 533 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 533 times.
✗ Branch 5 not taken.
|
1338 | = spatial_acceleration.linear() + spatial_velocity.angular().cross(linear_velocity_frame_B); |
| 97 | |||
| 98 |
5/10✓ Branch 1 taken 533 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 533 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 533 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 533 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 533 times.
✗ Branch 15 not taken.
|
1338 | PINOCCHIO_EIGEN_CONST_CAST(Vector3Like, res).noalias() = |
| 99 |
2/4✓ Branch 1 taken 533 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 533 times.
✗ Branch 5 not taken.
|
669 | placement.rotation().transpose() |
| 100 |
2/4✓ Branch 1 taken 533 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 533 times.
✗ Branch 5 not taken.
|
669 | * (linear_acceleration_frame_B - placement.translation().cross(spatial_acceleration.angular())); |
| 101 | 669 | } | |
| 102 | |||
| 103 | /// | ||
| 104 | /// \brief Computes the classic acceleration of a given frame B | ||
| 105 | /// knowing the spatial velocity and spatial acceleration of a frame A | ||
| 106 | /// and the relative placement between these two frames. | ||
| 107 | /// | ||
| 108 | /// \tparam Motion1 type of the input spatial velocity. | ||
| 109 | /// \tparam Motion2 type of the input spatial acceleration. | ||
| 110 | /// \tparam SE3Scalar Scalar type of the SE3 object. | ||
| 111 | /// \tparam SE3Options Options of the SE3 object. | ||
| 112 | /// | ||
| 113 | /// \param[in] spatial_velocity input spatial velocity. | ||
| 114 | /// \param[in] spatial_acceleration input spatial acceleration. | ||
| 115 | /// \param[in] placement relative placement betwen the frame A and the frame B. | ||
| 116 | /// | ||
| 117 | template<typename Motion1, typename Motion2, typename SE3Scalar, int SE3Options> | ||
| 118 | 364 | inline typename PINOCCHIO_EIGEN_PLAIN_TYPE(typename Motion2::Vector3) classicAcceleration( | |
| 119 | const MotionDense<Motion1> & spatial_velocity, | ||
| 120 | const MotionDense<Motion2> & spatial_acceleration, | ||
| 121 | const SE3Tpl<SE3Scalar, SE3Options> & placement) | ||
| 122 | { | ||
| 123 | typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(typename Motion2::Vector3) ReturnType; | ||
| 124 | 364 | ReturnType res; | |
| 125 |
0/2✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
364 | classicAcceleration(spatial_velocity, spatial_acceleration, placement, res); |
| 126 | 364 | return res; | |
| 127 | } | ||
| 128 | } // namespace pinocchio | ||
| 129 | |||
| 130 | #endif // ifndef __pinocchio_spatial_classic_acceleration_hpp__ | ||
| 131 |