Fawkes API  Fawkes Development Version
acquisition_thread.h
1 
2 /***************************************************************************
3  * acquisition_thread.h - Thread that retrieves IMU data
4  *
5  * Created: Sun Jun 22 21:16:03 2014
6  * Copyright 2006-2014 Tim Niemueller [www.niemueller.de]
7  ****************************************************************************/
8 
9 /* This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU Library General Public License for more details.
18  *
19  * Read the full text in the LICENSE.GPL file in the doc directory.
20  */
21 
22 #ifndef _PLUGINS_IMU_ACQUISITION_THREAD_H_
23 #define _PLUGINS_IMU_ACQUISITION_THREAD_H_
24 
25 #include <aspect/blackboard.h>
26 #include <aspect/clock.h>
27 #include <aspect/configurable.h>
28 #include <aspect/logging.h>
29 #include <core/threading/thread.h>
30 
31 namespace fawkes {
32 class Mutex;
33 class Configuration;
34 class Logger;
35 class Time;
36 class IMUInterface;
37 } // namespace fawkes
38 
40  public fawkes::LoggingAspect,
42  public fawkes::ClockAspect,
44 {
45 public:
46  IMUAcquisitionThread(const char * thread_name,
47  bool continuous,
48  const std::string &cfg_name,
49  const std::string &cfg_prefix);
50  virtual ~IMUAcquisitionThread();
51 
52  bool lock_if_new_data();
53  void unlock();
54 
55  // must be called from sub-classes in continuous case
56  virtual void init();
57  virtual void loop();
58  virtual void finalize();
59 
60  /** Get orientation data.
61  * @return orientation data */
62  const float *
64  {
65  return orientation_;
66  }
67 
68  /** Get orientation covariance.
69  * @return orientation covariance */
70  const double *
72  {
74  }
75 
76  /** Get angular velocity data.
77  * @return angular velocity data */
78  const float *
80  {
81  return angular_velocity_;
82  }
83 
84  /** Get angular velocity covariance
85  * @return angular velocity covariance */
86  const double *
88  {
90  }
91 
92  /** Get linear acceleration data.
93  * @return linear acceleration data */
94  const float *
96  {
97  return linear_acceleration_;
98  }
99 
100  /** Get linera acceleration covariance.
101  * @return linear acceleration covariance */
102  const double *
104  {
106  }
107 
108  /** Get time of data set.
109  * @return timestamp */
110  const fawkes::Time *
112  {
113  return timestamp_;
114  }
115 
116  /** Stub to see name in backtrace for easier debugging. @see Thread::run() */
117 protected:
118  virtual void
119  run()
120  {
121  Thread::run();
122  }
123 
124 protected:
125  std::string cfg_name_;
126  std::string cfg_prefix_;
127  std::string cfg_frame_;
129 
132 
133  bool new_data_;
134 
135  float orientation_[4];
141 
142 private:
143  // only used if continuous
144  fawkes::IMUInterface *imu_if_;
145 };
146 
147 #endif
IMUAcquisitionThread::cfg_prefix_
std::string cfg_prefix_
Definition: acquisition_thread.h:126
IMUAcquisitionThread::new_data_
bool new_data_
Definition: acquisition_thread.h:133
fawkes::Mutex
Definition: mutex.h:38
fawkes::IMUInterface
Definition: IMUInterface.h:39
IMUAcquisitionThread::linear_acceleration_
float linear_acceleration_[3]
Definition: acquisition_thread.h:139
IMUAcquisitionThread::finalize
virtual void finalize()
Finalize the thread.
Definition: acquisition_thread.cpp:150
IMUAcquisitionThread::run
virtual void run()
Stub to see name in backtrace for easier debugging.
Definition: acquisition_thread.h:119
IMUAcquisitionThread::IMUAcquisitionThread
IMUAcquisitionThread(const char *thread_name, bool continuous, const std::string &cfg_name, const std::string &cfg_prefix)
Constructor.
Definition: acquisition_thread.cpp:99
IMUAcquisitionThread::loop
virtual void loop()
Code to execute in the thread.
Definition: acquisition_thread.cpp:156
IMUAcquisitionThread::get_linear_acceleration
const float * get_linear_acceleration()
Get linear acceleration data.
Definition: acquisition_thread.h:95
IMUAcquisitionThread
Definition: acquisition_thread.h:39
IMUAcquisitionThread::get_orientation_covariance
const double * get_orientation_covariance()
Get orientation covariance.
Definition: acquisition_thread.h:71
IMUAcquisitionThread::cfg_continuous_
bool cfg_continuous_
Definition: acquisition_thread.h:128
fawkes::BlackBoardAspect
Definition: blackboard.h:38
fawkes
fawkes::LoggingAspect
Definition: logging.h:38
IMUAcquisitionThread::cfg_name_
std::string cfg_name_
Definition: acquisition_thread.h:125
IMUAcquisitionThread::get_orientation
const float * get_orientation()
Get orientation data.
Definition: acquisition_thread.h:63
IMUAcquisitionThread::get_timestamp
const fawkes::Time * get_timestamp()
Get time of data set.
Definition: acquisition_thread.h:111
IMUAcquisitionThread::orientation_
float orientation_[4]
Definition: acquisition_thread.h:135
IMUAcquisitionThread::init
virtual void init()
Initialize the thread.
Definition: acquisition_thread.cpp:133
fawkes::Time
Definition: time.h:98
IMUAcquisitionThread::lock_if_new_data
bool lock_if_new_data()
Lock data if fresh.
Definition: acquisition_thread.cpp:179
fawkes::Thread
Definition: thread.h:45
IMUAcquisitionThread::get_angular_velocity_covariance
const double * get_angular_velocity_covariance()
Get angular velocity covariance.
Definition: acquisition_thread.h:87
fawkes::ConfigurableAspect
Definition: configurable.h:38
IMUAcquisitionThread::orientation_covariance_
double orientation_covariance_[9]
Definition: acquisition_thread.h:136
IMUAcquisitionThread::get_angular_velocity
const float * get_angular_velocity()
Get angular velocity data.
Definition: acquisition_thread.h:79
IMUAcquisitionThread::data_mutex_
fawkes::Mutex * data_mutex_
Definition: acquisition_thread.h:130
IMUAcquisitionThread::angular_velocity_covariance_
double angular_velocity_covariance_[9]
Definition: acquisition_thread.h:138
IMUAcquisitionThread::linear_acceleration_covariance_
double linear_acceleration_covariance_[9]
Definition: acquisition_thread.h:140
IMUAcquisitionThread::unlock
void unlock()
Unlock data,.
Definition: acquisition_thread.cpp:192
fawkes::ClockAspect
Definition: clock.h:40
IMUAcquisitionThread::get_linear_acceleration_covariance
const double * get_linear_acceleration_covariance()
Get linera acceleration covariance.
Definition: acquisition_thread.h:103
IMUAcquisitionThread::cfg_frame_
std::string cfg_frame_
Definition: acquisition_thread.h:127
IMUAcquisitionThread::angular_velocity_
float angular_velocity_[3]
Definition: acquisition_thread.h:137
IMUAcquisitionThread::timestamp_
fawkes::Time * timestamp_
Definition: acquisition_thread.h:131