1  // %flair:license{


2  // This file is part of the Flair framework distributed under the


3  // CECILLC License, Version 1.0.


4  // %flair:license}


5  /*!


6  * \file AhrsData.h


7  * \brief Class defining AHRS datas


8  * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253


9  * \date 2016/03/01


10  * \version 4.0


11  */


12  #ifndef AHRSDATA_H


13  #define AHRSDATA_H


14 


15  #include <io_data.h>


16  #include <IODataElement.h>


17  #include <Vector3D.h>


18  #include <Quaternion.h>


19 


20  namespace flair {


21  namespace core {


22 


23  /*! \class AhrsData


24  *


25  * \brief Class defining AHRS datas


26  *


27  * AHRS datas consist of quaternion and rotational angles values. \n


28  *


29  */


30  class AhrsData : public io_data {


31  public:


32  class Type : public DataType {


33  public:


34  Type(const ScalarType &inElementDataType)


35  : elementDataType(inElementDataType) {}


36  const ScalarType &GetElementDataType() const { return elementDataType; }


37  std::string GetDescription() const { return "ahrs data"; }


38  size_t GetSize() const { return 7 * elementDataType.GetSize(); }


39 


40  private:


41  const ScalarType &elementDataType;


42  };


43 


44  /*!


45  \enum PlotableData_t


46  \brief Datas wich can be plotted in a DataPlot1D


47  */


48  typedef enum {


49  Roll /*! roll */,


50  Pitch /*! pitch */,


51  Yaw /*! yaw */,


52  RollDeg /*! roll degree*/,


53  PitchDeg /*! pitch degree */,


54  YawDeg /*! yaw degree */,


55  Q0 /*! quaternion 0 */,


56  Q1 /*! quaternion 1 */,


57  Q2 /*! quaternion 2 */,


58  Q3 /*! quaternion 3 */,


59  Wx /*! x filtered angular rate */,


60  Wy /*! y filtered angular rate */,


61  Wz /*! z filtered angular rate */,


62  WxDeg /*! x filtered angular rate degree*/,


63  WyDeg /*! y filtered angular rate degree*/,


64  WzDeg /*! z filtered angular rate degree*/,


65  } PlotableData_t;


66 


67  /*!


68  * \brief Constructor


69  *


70  * Construct an io_data representing AHRS datas. \n


71  *


72  * \param parent parent


73  * \param name name


74  * \param n number of samples


75  */


76  AhrsData(const Object *parent, std::string name = "", int n = 1);


77 


78  /*!


79  * \brief Destructor


80  *


81  */


82  ~AhrsData();


83 


84  /*!


85  * \brief Element


86  *


87  * Get a pointer to a specific element. This pointer can be used for plotting.


88  *


89  * \param plotableData data type


90  *


91  * \return pointer to the element


92  */


93  IODataElement *Element(PlotableData_t plotableData) const;


94 


95  /*!


96  * \brief Set quaternion


97  *


98  * This method is mutex protected.


99  *


100  * \param quaternion quaternion


101  *


102  */


103  void SetQuaternion(const Quaternion &quaternion);


104 


105  /*!


106  * \brief Get quaternion


107  *


108  * This method is mutex protected.


109  *


110  * \return quaternion


111  *


112  */


113  Quaternion GetQuaternion(void) const;


114 


115  /*!


116  * \brief Set angular rates


117  *


118  * This method is mutex protected.


119  *


120  * \param angularRates angular rates


121  *


122  */


123  void SetAngularRates(const Vector3Df &angularRates);


124 


125  /*!


126  * \brief Get angular rates


127  *


128  * This method is mutex protected.


129  *


130  * \return angular rates


131  *


132  */


133  Vector3Df GetAngularRates(void) const;


134 


135  /*!


136  * \brief Get both quaternion and angular rates


137  *


138  * This method is mutex protected.


139  *


140  * \param quaternion quaternion


141  * \param angularRates angular rates


142  *


143  */


144  void GetQuaternionAndAngularRates(Quaternion &quaternion,


145  Vector3Df &angularRates) const;


146 


147  /*!


148  * \brief Set both quaternion and angular rates


149  *


150  * This method is mutex protected.


151  *


152  * \param quaternion quaternion


153  * \param angularRates angular rates


154  *


155  */


156  void SetQuaternionAndAngularRates(const Quaternion &quaternion,


157  const Vector3Df &angularRates);


158 


159  const Type &GetDataType() const { return dataType; }


160 


161  private:


162  /*!


163  * \brief Raw read datas


164  *


165  * Reimplemented from io_data. \n


166  * See io_data::RawRead.


167  *


168  * \param dst destination buffer


169  */


170  void RawRead(char *dst) const;


171 


172  void Queue(char **dst, const void *src, size_t size) const;


173 


174  /*!


175  * \brief %Quaternion


176  *


177  */


178  Quaternion quaternion;


179 


180  /*!


181  * \brief Angular rates


182  *


183  */


184  Vector3Df angularRates;


185 


186  Type dataType;


187  };


188 


189  } // end namespace core


190  } // end namespace flair


191 


192  #endif // AHRSDATA_H

