cartesian-axis.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2017-2020 CNRS INRIA
3 //
4 
5 #ifndef __pinocchio_cartesian_axis_hpp__
6 #define __pinocchio_cartesian_axis_hpp__
7 
8 #include "pinocchio/fwd.hpp"
9 
10 namespace pinocchio
11 {
12 
13  template<int _axis>
15  {
16  enum
17  {
18  axis = _axis,
19  dim = 3
20  };
21 
22  typedef Eigen::Matrix<double, 3, 1> Vector3;
23 
24  template<typename V3_in, typename V3_out>
25  inline static void
26  cross(const Eigen::MatrixBase<V3_in> & vin, const Eigen::MatrixBase<V3_out> & vout);
27 
28  template<typename V3>
29  static typename PINOCCHIO_EIGEN_PLAIN_TYPE(V3) cross(const Eigen::MatrixBase<V3> & vin)
30  {
31  typename PINOCCHIO_EIGEN_PLAIN_TYPE(V3) res;
32  cross(vin, res);
33  return res;
34  }
35 
36  template<typename Scalar, typename V3_in, typename V3_out>
37  inline static void alphaCross(
38  const Scalar & s,
39  const Eigen::MatrixBase<V3_in> & vin,
40  const Eigen::MatrixBase<V3_out> & vout);
41 
42  template<typename Scalar, typename V3>
43  static typename PINOCCHIO_EIGEN_PLAIN_TYPE(V3)
44  alphaCross(const Scalar & s, const Eigen::MatrixBase<V3> & vin)
45  {
46  typename PINOCCHIO_EIGEN_PLAIN_TYPE(V3) res;
47  alphaCross(s, vin, res);
48  return res;
49  }
50 
51  template<typename Scalar>
52  Eigen::Matrix<Scalar, dim, 1> operator*(const Scalar & s) const
53  {
54  typedef Eigen::Matrix<Scalar, dim, 1> ReturnType;
55  ReturnType res;
56  for (Eigen::DenseIndex i = 0; i < dim; ++i)
57  res[i] = i == axis ? s : Scalar(0);
58 
59  return res;
60  }
61 
62  template<typename Scalar>
63  friend inline Eigen::Matrix<Scalar, dim, 1> operator*(const Scalar & s, const CartesianAxis &)
64  {
65  return CartesianAxis() * s;
66  }
67 
68  template<typename Vector3Like>
69  static void setTo(const Eigen::MatrixBase<Vector3Like> v3)
70  {
71  Vector3Like & v3_ = PINOCCHIO_EIGEN_CONST_CAST(Vector3Like, v3);
72  typedef typename Vector3Like::Scalar Scalar;
73 
74  for (Eigen::DenseIndex i = 0; i < dim; ++i)
75  v3_[i] = i == axis ? Scalar(1) : Scalar(0);
76  }
77 
78  template<typename Scalar>
79  static Eigen::Matrix<Scalar, 3, 1> vector()
80  {
81  typedef Eigen::Matrix<Scalar, 3, 1> Vector3;
82  return Vector3::Unit(axis);
83  }
84 
85  static Vector3 vector()
86  {
87  return vector<double>();
88  }
89 
90  }; // struct CartesianAxis
91 
92  template<>
93  template<typename V3_in, typename V3_out>
95  const Eigen::MatrixBase<V3_in> & vin, const Eigen::MatrixBase<V3_out> & vout)
96  {
97  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_in, 3)
98  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_out, 3)
99  V3_out & vout_ = PINOCCHIO_EIGEN_CONST_CAST(V3_out, vout);
100  vout_[0] = 0.;
101  vout_[1] = -vin[2];
102  vout_[2] = vin[1];
103  }
104 
105  template<>
106  template<typename V3_in, typename V3_out>
108  const Eigen::MatrixBase<V3_in> & vin, const Eigen::MatrixBase<V3_out> & vout)
109  {
110  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_in, 3)
111  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_out, 3)
112  V3_out & vout_ = PINOCCHIO_EIGEN_CONST_CAST(V3_out, vout);
113  vout_[0] = vin[2];
114  vout_[1] = 0.;
115  vout_[2] = -vin[0];
116  }
117 
118  template<>
119  template<typename V3_in, typename V3_out>
121  const Eigen::MatrixBase<V3_in> & vin, const Eigen::MatrixBase<V3_out> & vout)
122  {
123  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_in, 3)
124  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_out, 3)
125  V3_out & vout_ = PINOCCHIO_EIGEN_CONST_CAST(V3_out, vout);
126  vout_[0] = -vin[1];
127  vout_[1] = vin[0];
128  vout_[2] = 0.;
129  }
130 
131  template<>
132  template<typename Scalar, typename V3_in, typename V3_out>
134  const Scalar & s, const Eigen::MatrixBase<V3_in> & vin, const Eigen::MatrixBase<V3_out> & vout)
135  {
136  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_in, 3)
137  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_out, 3)
138  V3_out & vout_ = PINOCCHIO_EIGEN_CONST_CAST(V3_out, vout);
139  vout_[0] = 0.;
140  vout_[1] = -s * vin[2];
141  vout_[2] = s * vin[1];
142  }
143 
144  template<>
145  template<typename Scalar, typename V3_in, typename V3_out>
147  const Scalar & s, const Eigen::MatrixBase<V3_in> & vin, const Eigen::MatrixBase<V3_out> & vout)
148  {
149  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_in, 3)
150  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_out, 3)
151  V3_out & vout_ = PINOCCHIO_EIGEN_CONST_CAST(V3_out, vout);
152  vout_[0] = s * vin[2];
153  vout_[1] = 0.;
154  vout_[2] = -s * vin[0];
155  }
156 
157  template<>
158  template<typename Scalar, typename V3_in, typename V3_out>
160  const Scalar & s, const Eigen::MatrixBase<V3_in> & vin, const Eigen::MatrixBase<V3_out> & vout)
161  {
162  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_in, 3)
163  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_out, 3)
164  V3_out & vout_ = PINOCCHIO_EIGEN_CONST_CAST(V3_out, vout);
165  vout_[0] = -s * vin[1];
166  vout_[1] = s * vin[0];
167  vout_[2] = 0.;
168  }
169 
171  typedef XAxis AxisX;
172 
174  typedef YAxis AxisY;
175 
177  typedef ZAxis AxisZ;
178 
179 } // namespace pinocchio
180 
181 #endif // __pinocchio_cartesian_axis_hpp__
pinocchio::AxisY
YAxis AxisY
Definition: cartesian-axis.hpp:174
pinocchio::CartesianAxis::PINOCCHIO_EIGEN_PLAIN_TYPE
static PINOCCHIO_EIGEN_PLAIN_TYPE(V3) cross(const Eigen
Definition: cartesian-axis.hpp:29
pinocchio::CartesianAxis::cross
static void cross(const Eigen::MatrixBase< V3_in > &vin, const Eigen::MatrixBase< V3_out > &vout)
PINOCCHIO_EIGEN_CONST_CAST
#define PINOCCHIO_EIGEN_CONST_CAST(TYPE, OBJ)
Macro for an automatic const_cast.
Definition: eigen-macros.hpp:51
pinocchio::XAxis
CartesianAxis< 0 > XAxis
Definition: cartesian-axis.hpp:170
fwd.hpp
inverse-kinematics.i
int i
Definition: inverse-kinematics.py:17
pinocchio::AxisX
XAxis AxisX
Definition: cartesian-axis.hpp:171
pinocchio::CartesianAxis::vin
static const Eigen::MatrixBase< V3 > & vin
Definition: cartesian-axis.hpp:45
pinocchio::CartesianAxis::res
return res
Definition: cartesian-axis.hpp:48
pinocchio::python::Scalar
context::Scalar Scalar
Definition: admm-solver.cpp:29
pinocchio::ZAxis
CartesianAxis< 2 > ZAxis
Definition: cartesian-axis.hpp:176
pinocchio::CartesianAxis::operator*
friend Eigen::Matrix< Scalar, dim, 1 > operator*(const Scalar &s, const CartesianAxis &)
Definition: cartesian-axis.hpp:63
pinocchio::CartesianAxis::vector
static Eigen::Matrix< Scalar, 3, 1 > vector()
Definition: cartesian-axis.hpp:79
pinocchio::CartesianAxis::dim
@ dim
Definition: cartesian-axis.hpp:19
pinocchio::CartesianAxis::axis
@ axis
Definition: cartesian-axis.hpp:18
pinocchio::YAxis
CartesianAxis< 1 > YAxis
Definition: cartesian-axis.hpp:173
pinocchio::CartesianAxis::operator*
Eigen::Matrix< Scalar, dim, 1 > operator*(const Scalar &s) const
Definition: cartesian-axis.hpp:52
pinocchio::CartesianAxis::Vector3
Eigen::Matrix< double, 3, 1 > Vector3
Definition: cartesian-axis.hpp:22
pinocchio::CartesianAxis::setTo
static void setTo(const Eigen::MatrixBase< Vector3Like > v3)
Definition: cartesian-axis.hpp:69
pinocchio::AxisZ
ZAxis AxisZ
Definition: cartesian-axis.hpp:177
pinocchio::CartesianAxis::vector
static Vector3 vector()
Definition: cartesian-axis.hpp:85
pinocchio::CartesianAxis::alphaCross
static void alphaCross(const Scalar &s, const Eigen::MatrixBase< V3_in > &vin, const Eigen::MatrixBase< V3_out > &vout)
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:27
pinocchio::CartesianAxis
Definition: cartesian-axis.hpp:14


pinocchio
Author(s):
autogenerated on Wed Nov 13 2024 03:40:39