Jafar
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | Friends
jafar::rtslam::hardware::HardwareSensorAbstract< T > Class Template Reference

Generic implementation of hardware sensor based on ring buffer. More...


Detailed Description

template<typename T>
class jafar::rtslam::hardware::HardwareSensorAbstract< T >

Generic implementation of hardware sensor based on ring buffer.

You need to inherit this class and start in the constructor a thread that will read the sensor, fill the ring buffer, and notify the condition variable when a new reading arrives.

TODO should be improved to be able to not fail if it overflows and that it should not be fatal but just throw away oldest data. 3 policies on overflow: fail, ignore/loop, block (for offline)

Definition at line 101 of file hardwareSensorAbstract.hpp.

#include <hardwareSensorAbstract.hpp>

List of all members.

Public Types

typedef ublas::vector< T > VecT
typedef ublas::vector_indirect
< VecT
VecIndT

Public Member Functions

 HardwareSensorAbstract (kernel::VariableCondition< int > *condition, Mode mode, unsigned bufferSize)
 Constructor.
virtual void start ()=0
 start the acquisition thread, once the object is configured
virtual void stop ()=0
 stop the acquisition thread
virtual bool join (int timed_ms=-1)=0
 wait that the acquisition thread has finished
bool stopped ()
bool initialized ()
void setSyncConfig (double timestamps_correction=0.0)
virtual void getTimingInfos (double &data_period, double &arrival_delay, bool locked=false)
 Provides approximate informations about the timings of data.
virtual void setTimingInfos (double data_period, double arrival_delay)
virtual double getLastTimestamp ()=0
virtual void showInfos ()
virtual VecIndT getRaws (double t1, double t2, bool release=true)
 will also release the raws before the first one if release is true
virtual int getUnreadRawInfos (RawInfos &infos)
 get timing informations about unread raws
virtual int getNextRawInfo (RawInfo &info)
 get info about next unread raw
virtual void getRaw (unsigned id, T &raw)
 will also release the raws before this one
virtual void observeRaw (unsigned id, T &raw)
 get raw but doesn't release raws before
virtual double getRawTimestamp (unsigned id)
virtual int getLastUnreadRaw (T &raw)
 will also release the raws before this one
virtual void getLastProcessedRaw (T &raw)
 for information only (display...)
virtual void release ()
virtual void enable (bool enabled=true)
void stopDumping ()

Protected Member Functions

int getWritePos (bool locked=false)
 the ring buffer
void incWritePos (bool locked=false)
int getFirstUnreadPos ()
int getLastUnreadPos (bool locked=false)
void releaseUntil (unsigned id, bool locked=false)
 release until id, excluding id
void release (unsigned id, bool locked=false)
 release until id, including id
bool isFull (bool locked=false)
bool isEmpty (bool locked=false)
void update_arrival_delay (double delay)

Protected Attributes

kernel::VariableCondition< int > * condition
 current read_pos is being used
kernel::VariableCondition< int > index
 to notify when new data is available
boost::mutex mutex_data
 index of used data
boost::condition_variable cond_offline_full
 mutex for using this object
boost::condition_variable cond_offline_freed
int data_count
int last_sent_pos
 image count since last image read
bool no_more_data
 position of the last raw sent
double timestamps_correction
double data_period
double arrival_delays [narrival_delays]
int iarrival_delay
double arrival_delay
bool started
bool stopping
 has the start() command been already run ?
bool enabled
bool initialized_
 whether the sensor is enabled or not
Mode mode
 whether the sensor is correctly initialized and working correctly
int bufferSize
VecT buffer
 size of the ring buffer

Private Attributes

int write_pos
int read_pos
 next position where to write, oldest available reading
bool buffer_full
 oldest position not released (being read or not read at all)
bool read_pos_used
 when read_pos = write_pos, tells whether the buffer is full or empty

Friends

class rtslam::SensorProprioAbstract
class rtslam::SensorExteroAbstract

Constructor & Destructor Documentation

template<typename T>
jafar::rtslam::hardware::HardwareSensorAbstract< T >::HardwareSensorAbstract ( kernel::VariableCondition< int > *  condition,
Mode  mode,
unsigned  bufferSize 
) [inline]

Constructor.

Parameters:
conditionto notify when new data is available

Definition at line 209 of file hardwareSensorAbstract.hpp.


Member Function Documentation

template<typename T>
int jafar::rtslam::hardware::HardwareSensorAbstract< T >::getFirstUnreadPos ( ) [inline, protected]
Warning:
check that buffer is not empty before

Definition at line 154 of file hardwareSensorAbstract.hpp.

Referenced by jafar::rtslam::hardware::HardwareSensorAbstract< RawVec >::releaseUntil().

template<typename T>
int jafar::rtslam::hardware::HardwareSensorAbstract< T >::getLastUnreadPos ( bool  locked = false) [inline, protected]
Warning:
check that buffer is not empty before

Definition at line 160 of file hardwareSensorAbstract.hpp.

template<typename T>
virtual void jafar::rtslam::hardware::HardwareSensorAbstract< T >::getTimingInfos ( double &  data_period,
double &  arrival_delay,
bool  locked = false 
) [inline, virtual]

Provides approximate informations about the timings of data.

Parameters:
data_periodthe period at which the data are arriving
arrival_delaythe delay between the moment we get a data and its real date. This is a starting point that must be overestimated, it may be estimated more precisely afterwards.

Definition at line 230 of file hardwareSensorAbstract.hpp.


Member Data Documentation

template<typename T>
bool jafar::rtslam::hardware::HardwareSensorAbstract< T >::stopping [protected]

has the start() command been already run ?

the stop() command has been run, we should stop reading data No need to protect it with a mutex for two reasons: 1. assigning and reading a boolean is an indivisible operation 2. boolean have only two possible values, so even if read/write clash was possible it wouldn't hurt

Definition at line 134 of file hardwareSensorAbstract.hpp.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Wed Oct 15 2014 00:37:46 for Jafar by doxygen 1.7.6.1
LAAS-CNRS