imu_stim300
Stim300Base.hpp
Go to the documentation of this file.
1 #ifndef _STIM300_BASE_HPP_
2 #define _STIM300_BASE_HPP_
3 
4 #include <iostream>
5 #include <math.h>
6 #include <string>
7 #include <boost/crc.hpp>
8 #include <boost/math/special_functions/fpclassify.hpp>
9 #include <Eigen/Geometry>
10 #include <iodrivers_base/Driver.hpp>
11 #include <base/Time.hpp>
12 
13 namespace imu_stim300
14 {
17 
20  RATE = 0x90,
21  RATE_ACC = 0x91,
22  RATE_INCLI = 0x92,
25  };
26 
28  enum ACC_OUTPUT{ACCELERATION, INCREMENTAL_VELOCITY, AVG_ACCELERATION}; // By default it is ACCELERATION but others are possible(read the manual)
29 
30  static const double STIM300_GRAVITY = 9.80665; // Internal definition of the standard gravity in the STIM300
31 
32  static const unsigned int DEFAULT_SAMPLING_FREQUENCY = 2000; //Selected by default as frequency in the firmware
33 
34  class Stim300Base: public iodrivers_base::Driver
35  {
36 
37  protected:
38  struct sensor_value
39  {
40  signed int value:24;
41  } __attribute__ ((__packed__));
42 
43  struct temp_value
44  {
45  signed int value:16;
46  } __attribute__ ((__packed__));
47 
48  typedef struct
49  {
50  uint8_t counter;
51  double gyro[3];
52  double acc[3];
53  double incl[3];
54  std::vector<double> temp;
55  double latency;
56  bool checksum;
58 
59  int baudrate;
62  base::Time pckgTimeout;
63  uint8_t prev_counter;
69  boost::uint32_t expectedCRC, calculatedCRC; /* Expected and calculated checksum value **/
70 
71  public:
72 
74  Stim300Base(int max_packet_size);
75  ~Stim300Base();
76 
81  void welcome();
82 
85  bool open(std::string const& filename);
86 
93  bool setBaudrate(int brate);
94 
96  bool fullReset();
97 
100  bool enterServiceMode();
101 
104  virtual int extractPacket(uint8_t const* buffer, size_t buffer_size) const = 0;
105 
108  virtual int processPacket() = 0;
109 
110  public:
116 
121  void setPackageTimeout(double timeoutSeconds);
122 
128  void setFrequency (int sampling_frequency);
129 
130  public:
134  bool getStatus();
135 
140  int getFileDescriptor();
141 
145 
149  int getPacketCounter();
150 
153  Eigen::Vector3d getAccData ();
154 
157  Eigen::Vector3d getGyroData ();
158 
161  Eigen::Vector3d getInclData ();
162 
165  std::vector<double> getTempData ();
166 
172  uint64_t getPacketLatency();
173 
176  bool getChecksumStatus();
177 
178  public:
179 
182  virtual void printInfo() = 0;
183 
184  protected:
185  double convertGyro2AngularRate(uint8_t const* buffer);
186 
187  virtual double convertAcc2Acceleration(uint8_t const* buffer) = 0;
188 
189  double convertIncl2Acceleration(uint8_t const* buffer);
190 
191  double convertAcc2IncreVel(uint8_t const* buffer);
192 
193  double convertTemp2Celsius(uint8_t const* buffer);
194 
195  double convertLatency2Microseconds(uint8_t const* buffer);
196 
197  };
198 } // end namespace
199 
200 #endif //
Definition: Stim300Base.hpp:34
int baudrate
Definition: Stim300Base.hpp:59
bool getStatus()
Return the STIM300 internal status Return the negation value of the internal_error variable...
Definition: Stim300Base.cpp:171
void setPackageTimeout(double timeoutSeconds)
Ste the package Timeout.
Definition: Stim300Base.cpp:159
Eigen::Vector3d getInclData()
Return the Inclinometers values.
Definition: Stim300Base.cpp:201
boost::uint32_t expectedCRC
Definition: Stim300Base.hpp:69
double latency
Definition: Stim300Base.hpp:55
double convertLatency2Microseconds(uint8_t const *buffer)
Definition: Stim300Base.cpp:318
Definition: Stim300Base.hpp:28
void welcome()
Definition: Stim300Base.cpp:21
Definition: Stim300Base.hpp:48
virtual int extractPacket(uint8_t const *buffer, size_t buffer_size) const =0
bool fullReset()
Definition: Stim300Base.cpp:40
STIM300_MODES
Definition: Stim300Base.hpp:16
bool internal_error
Definition: Stim300Base.hpp:66
int getPacketCounter()
Return the Incremental counter Return the value of the value of the counter in inertial_values.
Definition: Stim300Base.cpp:186
double convertAcc2IncreVel(uint8_t const *buffer)
Definition: Stim300Base.cpp:272
uint64_t getPacketLatency()
Return the datagram latency in microseconds (us) Return the latency calculated by the device...
Definition: Stim300Base.cpp:211
bool setBaudrate(int brate)
Definition: Stim300Base.cpp:33
signed int value
Definition: Stim300Base.hpp:45
virtual void printInfo()=0
Get sensors information.
imu_stim300::ACC_OUTPUT getAccOutputType()
Get Accelerometer Output Mode.
Definition: Stim300Base.cpp:181
bool setAcctoIncrementalVelocity()
Set Accelerometers output to Incremental velocity Internally enters in SERVICEMODE and It always retu...
Definition: Stim300Base.cpp:102
Definition: Stim300Base.hpp:16
ACC_OUTPUT acc_output
Definition: Stim300Base.hpp:68
DATAGRAM_CONTENT
Definition: Stim300Base.hpp:19
Definition: Stim300Base.hpp:28
boost::uint32_t calculatedCRC
Definition: Stim300Base.hpp:69
int sampling_frequency
Definition: Stim300Base.hpp:60
Definition: Stim300Base.hpp:16
Definition: Stim300Base.hpp:21
std::vector< double > getTempData()
Return the Temperature values from Gyros.
Definition: Stim300Base.cpp:206
void setFrequency(int sampling_frequency)
Ste the driver sampling frequency.
Definition: Stim300Base.cpp:164
uint8_t counter
Definition: Stim300Base.hpp:50
double convertGyro2AngularRate(uint8_t const *buffer)
Definition: Stim300Base.cpp:221
signed int value
Definition: Stim300Base.hpp:40
bool checksum
Definition: Stim300Base.hpp:56
STIM300_MODES modes
Definition: Stim300Base.hpp:65
Definition: Stim300Base.hpp:20
Eigen::Vector3d getAccData()
Return the Accelerometers values.
Definition: Stim300Base.cpp:191
bool enterServiceMode()
Enter in Service mode (not transferring data, configuration only)
Definition: Stim300Base.cpp:72
bool getChecksumStatus()
Return Checksum verification from the last computation.
Definition: Stim300Base.cpp:216
Definition: Stim300Base.hpp:23
Definition: Stim300Base.hpp:38
ACC_OUTPUT
Definition: Stim300Base.hpp:28
int getFileDescriptor()
It gets the file descriptor (fd)
Definition: Stim300Base.cpp:176
base::Time pckgTimeout
Definition: Stim300Base.hpp:62
std::vector< double > temp
Definition: Stim300Base.hpp:54
Eigen::Vector3d getGyroData()
Return the Gyroscopes values.
Definition: Stim300Base.cpp:196
double convertTemp2Celsius(uint8_t const *buffer)
Definition: Stim300Base.cpp:297
Stim300Base(int max_packet_size)
Definition: Stim300Base.cpp:5
double convertIncl2Acceleration(uint8_t const *buffer)
Definition: Stim300Base.cpp:247
~Stim300Base()
Definition: Stim300Base.cpp:15
Definition: Stim300Base.hpp:43
sensor_values inertial_values
Definition: Stim300Base.hpp:64
Definition: Stim300Base.hpp:16
uint8_t prev_counter
Definition: Stim300Base.hpp:63
virtual int processPacket()=0
read the package and puts the data into the corresponding structures. *
int counter_ratio
Definition: Stim300Base.hpp:61
bool open(std::string const &filename)
Definition: Stim300Base.cpp:26
imu_stim300::DATAGRAM_CONTENT content
Definition: Stim300Base.hpp:67
virtual double convertAcc2Acceleration(uint8_t const *buffer)=0
Definition: Stim300Base.hpp:28
Definition: Stim300Base.hpp:24
Definition: Stim300Base.hpp:22