pose_estimation
Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
pose_estimation::RBSFilter Class Reference

The task context provides and requires services. It uses an ExecutionEngine to perform its functions. Essential interfaces are operations, data flow ports and properties. These interfaces have been defined using the oroGen specification. In order to modify the interfaces you should (re)use oroGen and rely on the associated workflow. More...

#include <RBSFilter.hpp>

Inheritance diagram for pose_estimation::RBSFilter:

Public Member Functions

 RBSFilter (std::string const &name="pose_estimation::RBSFilter")
 
 RBSFilter (std::string const &name, RTT::ExecutionEngine *engine)
 
 ~RBSFilter ()
 
bool configureHook ()
 The following lines are template definitions for the various state machine. More...
 
bool startHook ()
 
void updateHook ()
 
void errorHook ()
 
void stopHook ()
 
void cleanupHook ()
 

Protected Member Functions

bool setupFilter ()
 
void predictionStep (const base::Time &sample_time)
 
void writeCurrentState ()
 
virtual bool resetState ()
 
void verifyStreamAlignerStatus (transformer::Transformer &trans, double verification_interval=2.0, double drop_rate_warning=0.5, double drop_rate_critical=1.0)
 
void verifyStreamAlignerStatus (const aggregator::StreamAlignerStatus &status, double verification_interval=2.0, double drop_rate_warning=0.5, double drop_rate_critical=1.0)
 
bool getSensorInBodyPose (const transformer::Transformation &sensor2body_transformer, const base::Time &ts, Eigen::Affine3d &sensorInBody)
 

Protected Attributes

States last_state
 
States new_state
 
std::string source_frame
 
boost::shared_ptr< PoseUKF > pose_estimator
 
boost::shared_ptr< StreamAlignmentVerifier > verifier
 
base::Time last_sample_time
 
unsigned aligner_stream_failures
 
unsigned critical_aligner_stream_failures
 

Friends

class RBSFilterBase
 

Detailed Description

The task context provides and requires services. It uses an ExecutionEngine to perform its functions. Essential interfaces are operations, data flow ports and properties. These interfaces have been defined using the oroGen specification. In order to modify the interfaces you should (re)use oroGen and rely on the associated workflow.

The name of a TaskContext is primarily defined via:

deployment 'deployment_name'
    task('custom_task_name','pose_estimation::RBSFilter')
end

It can be dynamically adapted when the deployment is called with a prefix argument.

Constructor & Destructor Documentation

RBSFilter::RBSFilter ( std::string const &  name = "pose_estimation::RBSFilter")

TaskContext constructor for RBSFilter

Parameters
nameName of the task. This name needs to be unique to make it identifiable via nameservices.
initial_stateThe initial TaskState of the TaskContext. Default is Stopped state.
RBSFilter::RBSFilter ( std::string const &  name,
RTT::ExecutionEngine *  engine 
)

TaskContext constructor for RBSFilter

Parameters
nameName of the task. This name needs to be unique to make it identifiable for nameservices.
engineThe RTT Execution engine to be used for this task, which serialises the execution of all commands, programs, state machines and incoming events for a task.
RBSFilter::~RBSFilter ( )

Default deconstructor of RBSFilter

Member Function Documentation

void RBSFilter::cleanupHook ( )

This hook is called by Orocos when the state machine transitions from Stopped to PreOperational, requiring the call to configureHook() before calling start() again.

bool RBSFilter::configureHook ( )

The following lines are template definitions for the various state machine.

This hook is called by Orocos when the state machine transitions from PreOperational to Stopped. If it returns false, then the component will stay in PreOperational. Otherwise, it goes into Stopped.

It is meaningful only if the #needs_configuration has been specified in the task context definition with (for example):

task_context "TaskName" do
  needs_configuration
  ...
end
void RBSFilter::errorHook ( )

This hook is called by Orocos when the component is in the RunTimeError state, at each activity step. See the discussion in updateHook() about triggering options.

Call recover() to go back in the Runtime state.

bool RBSFilter::getSensorInBodyPose ( const transformer::Transformation &  sensor2body_transformer,
const base::Time &  ts,
Eigen::Affine3d &  sensorInBody 
)
protected

Tries to get a transformation from the given transformer at time ts

Returns
true if successful
void RBSFilter::predictionStep ( const base::Time &  sample_time)
protected

Applies a prediction step of the filter with a given current sample time. The delta time step is the difference between the last sample time and the current one.

bool RBSFilter::resetState ( )
protectedvirtual

Resets the filter to the initial state by calling setupFilter()

bool RBSFilter::setupFilter ( )
protected

Initializes the filter with a valid state and covariance (Given by the _initial_state property). Also sets the process noise (_process_noise property).

bool RBSFilter::startHook ( )

This hook is called by Orocos when the state machine transitions from Stopped to Running. If it returns false, then the component will stay in Stopped. Otherwise, it goes into Running and updateHook() will be called.

void RBSFilter::stopHook ( )

This hook is called by Orocos when the state machine transitions from Running to Stopped after stop() has been called.

void RBSFilter::updateHook ( )

This hook is called by Orocos when the component is in the Running state, at each activity step. Here, the activity gives the "ticks" when the hook should be called.

The error(), exception() and fatal() calls, when called in this hook, allow to get into the associated RunTimeError, Exception and FatalError states.

In the first case, updateHook() is still called, and recover() allows you to go back into the Running state. In the second case, the errorHook() will be called instead of updateHook(). In Exception, the component is stopped and recover() needs to be called before starting it again. Finally, FatalError cannot be recovered.

void pose_estimation::RBSFilter::verifyStreamAlignerStatus ( transformer::Transformer &  trans,
double  verification_interval = 2.0,
double  drop_rate_warning = 0.5,
double  drop_rate_critical = 1.0 
)
inlineprotected

Checks the current stream aligner sample drop rates of the aligned input ports. Drops might happen due to missaligned system times, high delays or sensor failuers.

When the drop_rate_warning is reached on at least one stream the task will switch to the runtime state TRANSFORMATION_ALIGNMENT_FAILURES. The task will continue to work. When the drop_rate_critical is reached on at least one stream the task will switch to the error state CRITICAL_ALIGNMENT_FAILURE. The task will be in an error state.

void RBSFilter::verifyStreamAlignerStatus ( const aggregator::StreamAlignerStatus &  status,
double  verification_interval = 2.0,
double  drop_rate_warning = 0.5,
double  drop_rate_critical = 1.0 
)
protected
void RBSFilter::writeCurrentState ( )
protected

Writes out the current robot pose and task state. The seperation in this method ensures that this is done at the end of the update hook of a derivated task.

Friends And Related Function Documentation

friend class RBSFilterBase
friend

Member Data Documentation

unsigned pose_estimation::RBSFilter::aligner_stream_failures
protected
unsigned pose_estimation::RBSFilter::critical_aligner_stream_failures
protected
base::Time pose_estimation::RBSFilter::last_sample_time
protected
States pose_estimation::RBSFilter::last_state
protected
States pose_estimation::RBSFilter::new_state
protected
boost::shared_ptr<PoseUKF> pose_estimation::RBSFilter::pose_estimator
protected
std::string pose_estimation::RBSFilter::source_frame
protected
boost::shared_ptr<StreamAlignmentVerifier> pose_estimation::RBSFilter::verifier
protected

The documentation for this class was generated from the following files: