12#ifndef STATEOBSERVATIONDEFINITIONSHPP
13#define STATEOBSERVATIONDEFINITIONSHPP
22#ifdef STATEOBSERVATION_VERBOUS_CONSTRUCTORS
26#include <boost/assert.hpp>
27#include <boost/timer/timer.hpp>
30#include <Eigen/Geometry>
33# include <boost/math/constants/constants.hpp>
34# define M_PI boost::math::constants::pi<double>()
37#include <state-observation/api.h>
50 static constexpr bool value = std::is_base_of<Eigen::EigenBase<T>,
T>
::value;
60template<
typename _Scalar,
int _Rows,
int _Cols,
int _Options,
int _MaxRows,
int _MaxCols>
66struct EigenType : std::enable_if<isEigen<T>::value, T>
79typedef Eigen::Matrix<double, 1, 1>
Vector1;
82typedef Eigen::Matrix<double, 2, 1>
Vector2;
94typedef Eigen::Matrix<double, 5, 1>
Vector5;
97typedef Eigen::Matrix<double, 6, 1>
Vector6;
143static const bool isDebug =
true;
145static const bool isDebug =
false;
152 template<
typename CustomNullaryOp>
153 static const Eigen::CwiseNullaryOp<CustomNullaryOp, typename Eigen::Matrix<double, compileTimeRows, compileTimeCols>>
160 return Eigen::Matrix<double, compileTimeRows, compileTimeCols>::NullaryExpr(
func);
164template<
int compileTimeCols>
168 template<
typename CustomNullaryOp>
174 return Eigen::Matrix<double, -1, compileTimeCols>::NullaryExpr(
rows,
cols,
func);
178template<
int compileTimeRows>
182 template<
typename CustomNullaryOp>
188 return Eigen::Matrix<double, compileTimeRows, -1>::NullaryExpr(
rows,
cols,
func);
196 template<
typename CustomNullaryOp>
202 return Eigen::Matrix<double, -1, -1>::NullaryExpr(
rows,
cols,
func);
206template<
typename MatrixT>
208 MatrixType<MatrixT>::type::ColsAtCompileTime>
214template<
typename T, const T defaultValue = T()>
221template<
typename T, const T defaultValue>
235template<errorType i = message,
int dummy = 0>
244 static const char *
v;
251 static const std::runtime_error
v;
258 static const std::runtime_error *
v;
263 If this happened during initialization then run command chckitm_set() \
264 to switch it to set. And if the initialization is incomplete, run \
265 chckitm_reset() afterwards.";
287template<
typename T,
typename defaultValue = DebugItemDefaultValue<T>,
bool debug = true>
297 inline operator T()
const
315template<
typename T,
typename defaultValue>
326 inline operator T()
const
328 return defaultValue::v;
332 return defaultValue::v;
336 return defaultValue::v;
389 inline operator T()
const;
390 inline operator const T &()
const;
404 inline void set(
bool value);
449 inline static constexpr char errorMessage[] =
"Matrix contains a NaN.";
468template<
typename MatrixType = Matrix,
bool lazy = false>
484 inline void set(
bool value =
true);
526template<
typename MatrixType = Matrix,
typename Allocator = std::allocator<MatrixType>>
539 typedef std::vector<MatrixType, Allocator>
Array;
639 typedef std::deque<MatrixType, Allocator>
Deque;
672constexpr double epsilon1 = std::numeric_limits<double>::epsilon();
703 using clock =
typename std::conditional<std::chrono::high_resolution_clock::is_steady,
704 std::chrono::high_resolution_clock,
705 std::chrono::steady_clock>::type;
711 startTime = clock::now();
718 auto elapsed = clock::now() - startTime;
719 return static_cast<double>(
elapsed.count());
734#include <state-observation/tools/definitions.hxx>
this is a structure allowing for automatically verifying that the item has been initialized or not....
Definition definitions.hpp:379
CheckedItem(bool initialize=true)
The parameter initialize sets whether the isSet() parameter is initialized to false.
static const bool do_check_
Definition definitions.hpp:416
CheckedItem & operator=(const CheckedItem &)
const T & operator()() const
CheckedItem(const CheckedItem &)
DebugItem< const char *, detail::defaultErrorMSG, do_assert_ > AssertMsg
Definition definitions.hpp:421
AssertMsg assertMsg_
Definition definitions.hpp:425
const T & getRefUnchecked() const
bool chckitm_check_() const
DebugItem< bool, detail::defaultTrue, do_check_ > IsSet
Definition definitions.hpp:420
static const bool do_exception_
Definition definitions.hpp:418
virtual ~CheckedItem()
Definition definitions.hpp:385
void setAssertMessage(std::string s)
void setExceptionPtr(std::exception *e)
DebugItem< const std::exception *, detail::defaultExceptionAddr, do_exception_ > ExceptionPtr
Definition definitions.hpp:422
IsSet isSet_
Definition definitions.hpp:424
void set(bool value)
set the value of the initialization check boolean
ExceptionPtr exceptionPtr_
Definition definitions.hpp:426
T v_
this can throw(std::exception)
Definition definitions.hpp:429
static const bool do_assert_
Definition definitions.hpp:417
const T & chckitm_getValue() const
Definition definitions.hpp:216
static const T v
Definition definitions.hpp:218
T get() const
Definition definitions.hpp:334
T & operator=(T v)
Definition definitions.hpp:321
T set(const T &)
Definition definitions.hpp:330
DebugItem()
Definition definitions.hpp:319
DebugItem(T)
Definition definitions.hpp:320
Definition definitions.hpp:289
T & operator=(T v)
Definition definitions.hpp:293
DebugItem()
Definition definitions.hpp:291
T set(const T &v)
Definition definitions.hpp:301
DebugItem(const T &v)
Definition definitions.hpp:292
T get() const
Definition definitions.hpp:305
This class describes a structure that enables to store array of matrices with time indexation.
Definition definitions.hpp:528
std::vector< MatrixType, Allocator > Array
Definition definitions.hpp:539
TimeIndex setLastIndex(int index)
Set the time index of the last element.
TimeIndex getNextIndex() const
void truncateAfter(TimeIndex timeIndex)
removes all the elements with larger indexes than timeIndex
void checkNext_(TimeIndex time) const
void writeInFile(const std::string &filename, bool clear=false, bool append=false)
void readVectorsFromFile(const char *filename, bool withTimeStamp=true)
TimeIndex setFirstIndex(int index)
set the time index of the first element
MatrixType & back()
gets the last value
void truncateBefore(TimeIndex timeIndex)
removes all the elements with smaller indexes than timeIndex
void clear()
Clears the vector but keeps the last index.
bool checkIndex(TimeIndex k) const
checks whether the index is present in the array
void writeInFile(const char *filename, bool clear=false, bool append=false)
void pushBack(const MatrixType &v)
Pushes back the matrix to the array, the new value will take the next time.
void readFromFile(const std::string &filename, Index rows, Index cols=1, bool withTimeStamp=true)
TimeIndex k_
Definition definitions.hpp:653
void check_(TimeIndex time) const
MatrixType operator[](TimeIndex index) const
gets the value with the given time index
MatrixType & front()
gets the first value
void popFront()
removes the first (oldest) element of the array
IndexedMatrixArrayT(TimeSize size, TimeIndex initTime=0)
Construct a new Indexed Vector Array T with a predifined size.
void resize(TimeSize i, const MatrixType &m=MatrixType())
resizes the array
std::deque< MatrixType, Allocator > Deque
Definition definitions.hpp:639
Deque v_
Definition definitions.hpp:655
const MatrixType & front() const
gets the first value
void setValue(const MatrixType &v, TimeIndex k)
IndexedMatrixArrayT()
Default constructor.
TimeIndex getFirstIndex() const
Get the time index.
void readFromFile(const char *filename, Index rows, Index cols=1, bool withTimeStamp=true)
const MatrixType & back() const
gets the last value
TimeIndex getLastIndex() const
Get the time index.
MatrixType & operator[](TimeIndex index)
gets the value with the given time index, non const version
void readVectorsFromFile(const std::string &filename, bool withTimeStamp=true)
Array getArray() const
converts the array into a standard vector
This class describes a structure composed by a matrix of a given size and a time-index parameter....
Definition definitions.hpp:470
MatrixType v_
Definition definitions.hpp:511
void setIndex(TimeIndex index)
set the index of the matrix
TimeIndex k_
Definition definitions.hpp:510
IndexedMatrixT & set(const MatrixType &v, TimeIndex k)
Set the value of the matrix and the time sample.
IndexedMatrixT(const MatrixType &v, TimeIndex k)
A constructor with a given matrix value and a time index.
MatrixType & operator()()
Get the matrix value.
IndexedMatrixT()
Default constructor.
TimeIndex getTime() const
Get the time index.
void reset()
Switch off the initalization flag, the value is no longer accessible.
const MatrixType & operator()() const
Get the matrix value (const version)
bool isSet() const
Says whether the matrix is initialized or not.
void set(bool value=true)
Switch the vector to "initialized" state.
static const std::runtime_error * v
Definition definitions.hpp:258
static const std::runtime_error v
Definition definitions.hpp:251
static const char * v
Definition definitions.hpp:244
Definition definitions.hpp:237
constexpr double gravityConstant
Definition definitions.hpp:663
constexpr double epsilonAngle
angles considered Zero
Definition definitions.hpp:669
const Vector gravity
Gravity Vector along Z.
Definition definitions.hpp:666
constexpr double epsilon1
number considered zero when compared to 1
Definition definitions.hpp:672
void STATE_OBSERVATION_DLLAPI defaultSum(const Vector &stateVector, const Vector &tangentVector, Vector &sum)
void STATE_OBSERVATION_DLLAPI defaultDifference(const Vector &stateVector1, const Vector &stateVector2, Vector &difference)
DebugItemDefaultValue< bool, true > defaultTrue
Definition definitions.hpp:226
DebugItemDefaultError< exceptionAddr > defaultExceptionAddr
Definition definitions.hpp:276
DebugItemDefaultError< message > defaultErrorMSG
Definition definitions.hpp:274
errorType
Definition definitions.hpp:229
@ exception
Definition definitions.hpp:231
@ exceptionAddr
Definition definitions.hpp:232
@ message
Definition definitions.hpp:230
DebugItemDefaultError< exception > defaultException
Definition definitions.hpp:275
Definition bidim-elastic-inv-pendulum-dyn-sys.hpp:21
Eigen::Matrix4d Matrix4
4x4 Scalar Matrix
Definition definitions.hpp:115
Eigen::AngleAxis< double > AngleAxis
Euler Axis/Angle representation of orientation.
Definition definitions.hpp:133
Eigen::Quaterniond Quaternion
Quaternion.
Definition definitions.hpp:127
bool isApprox(double a, double b, double relativePrecision=cst::epsilon1)
checks if two scalars have approximately the same value up to a given relative precision
IndexedMatrixT< Matrix > IndexedMatrix
Definition definitions.hpp:514
long int TimeIndex
Definition definitions.hpp:139
Eigen::Matrix< double, 3, 3, Eigen::DontAlign > Matrix3Unaligned
3x3 Scalar Matrix Unaligned
Definition definitions.hpp:112
bool isApproxAbs(double a, double b, double absolutePrecision=cst::epsilon1)
checks if two scalars have approximately the same value up to a given absolute precision
Eigen::Rotation2D< double > Rotation2D
2D rotations
Definition definitions.hpp:136
Eigen::Matrix2d Matrix2
2D scalar Matrix
Definition definitions.hpp:106
CheckedItem< Vector6, false, false, true, true, CheckNaN > CheckedVector6
Definition definitions.hpp:457
boost::timer::auto_cpu_timer auto_cpu_timer
Definition definitions.hpp:694
Eigen::Vector3d Vector3
3D vector
Definition definitions.hpp:85
Eigen::Vector4d Vector4
4D vector
Definition definitions.hpp:91
Index TimeSize
Definition definitions.hpp:140
CheckedItem< Matrix12, false, false, true, true, CheckNaN > CheckedMatrix12
Definition definitions.hpp:455
Eigen::Matrix< double, 1, 1 > Vector1
1D Vector
Definition definitions.hpp:79
IndexedMatrixArrayT< Vector > IndexedVectorArray
Definition definitions.hpp:659
Eigen::Matrix3d Matrix3
3x3 Scalar Matrix
Definition definitions.hpp:109
Eigen::MatrixXd Matrix
Dynamic sized Matrix.
Definition definitions.hpp:100
Eigen::Matrix< double, 5, 1 > Vector5
5D vector
Definition definitions.hpp:94
boost::timer::cpu_timer cpu_times
Definition definitions.hpp:696
Eigen::Matrix< double, 6, 1 > Vector6
6D vector
Definition definitions.hpp:97
Eigen::Matrix< double, 3, 1, Eigen::DontAlign > Vector3Unaligned
3D vector unaligned
Definition definitions.hpp:88
CheckedItem< Quaternion, false, false, true, true > CheckedQuaternion
Definition definitions.hpp:458
Eigen::Matrix< double, 6, 6 > Matrix6
6x6 Scalar Matrix
Definition definitions.hpp:121
CheckedItem< Vector3, false, false, true, true, CheckNaN > CheckedVector3
Definition definitions.hpp:456
Eigen::Index Index
Definition definitions.hpp:138
IndexedMatrixArrayT< Matrix > IndexedMatrixArray
Definition definitions.hpp:658
CheckedItem< Matrix3, false, false, true, true, CheckNaN > CheckedMatrix3
Definition definitions.hpp:453
Eigen::Matrix< double, 5, 5 > Matrix5
5x5 Scalar Matrix
Definition definitions.hpp:118
CheckedItem< Matrix6, false, false, true, true, CheckNaN > CheckedMatrix6
Definition definitions.hpp:454
Eigen::Matrix< double, 12, 12 > Matrix12
12x12 scalar Matrix
Definition definitions.hpp:124
boost::timer::cpu_timer cpu_timer
Definition definitions.hpp:695
IndexedMatrixT< Matrix3 > IndexedMatrix3
Definition definitions.hpp:517
Eigen::Matrix< double, 2, 1 > Vector2
2d Vector
Definition definitions.hpp:82
IndexedMatrixT< Vector > IndexedVector
Definition definitions.hpp:515
Eigen::VectorXd Vector
Dynamic sized scalar vector.
Definition definitions.hpp:76
IndexedMatrixT< Vector3 > IndexedVector3
Definition definitions.hpp:516
Eigen::Quaternion< double, Eigen::DontAlign > QuaternionUnaligned
Quaternion Unaligned.
Definition definitions.hpp:130
Eigen::Matrix< double, 1, 1 > Matrix1
1D scalar Matrix
Definition definitions.hpp:103
Additional checker that allows to check for the presence of NaN values in the item.
Definition definitions.hpp:437
static bool checkAssert(const T &m)
Definition definitions.hpp:444
static constexpr char errorMessage[]
Definition definitions.hpp:449
std::runtime_error ExceptionT
Definition definitions.hpp:450
static bool check(const T &m)
Definition definitions.hpp:439
Definition definitions.hpp:67
This structure is used as an additionalChecker for a CheckedItem that doesn't require additional test...
Definition definitions.hpp:347
std::runtime_error ExceptionT
Definition definitions.hpp:359
static bool check(const T &)
Definition definitions.hpp:349
static constexpr char errorMessage[]
Definition definitions.hpp:358
static bool checkAssert(const T &)
Definition definitions.hpp:354
Definition definitions.hpp:72
Checks if it is derived from EigenBase (the base class of all dense functions)
Definition definitions.hpp:49
static constexpr bool value
Definition definitions.hpp:50
Checks if a class is a specialization of Eigen::Matrix.
Definition definitions.hpp:57