RevoluteJointFilter.h
Go to the documentation of this file.
00001 /*
00002  * RevoluteJointFilter.h
00003  *
00004  *      Author: roberto
00005  *
00006  * This is a modified implementation of the method for online estimation of kinematic structures described in our paper
00007  * "Online Interactive Perception of Articulated Objects with Multi-Level Recursive Estimation Based on Task-Specific Priors"
00008  * (Martín-Martín and Brock, 2014).
00009  * This implementation can be used to reproduce the results of the paper and to be applied to new research.
00010  * The implementation allows also to be extended to perceive different information/models or to use additional sources of information.
00011  * A detail explanation of the method and the system can be found in our paper.
00012  *
00013  * If you are using this implementation in your research, please consider citing our work:
00014  *
00015 @inproceedings{martinmartin_ip_iros_2014,
00016 Title = {Online Interactive Perception of Articulated Objects with Multi-Level Recursive Estimation Based on Task-Specific Priors},
00017 Author = {Roberto {Mart\'in-Mart\'in} and Oliver Brock},
00018 Booktitle = {Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems},
00019 Pages = {2494-2501},
00020 Year = {2014},
00021 Location = {Chicago, Illinois, USA},
00022 Note = {http://www.robotics.tu-berlin.de/fileadmin/fg170/Publikationen_pdf/martinmartin_ip_iros_2014.pdf},
00023 Url = {http://www.robotics.tu-berlin.de/fileadmin/fg170/Publikationen_pdf/martinmartin_ip_iros_2014.pdf},
00024 Projectname = {Interactive Perception}
00025 }
00026  * If you have questions or suggestions, contact us:
00027  * roberto.martinmartin@tu-berlin.de
00028  *
00029  * Enjoy!
00030  */
00031 
00032 #ifndef REVOLUTEJOINTFILTER_H_
00033 #define REVOLUTEJOINTFILTER_H_
00034 
00035 #include "joint_tracker/JointFilter.h"
00036 
00037 // Bayesian Filtering ROS
00038 #include <pdf/linearanalyticconditionalgaussian.h>
00039 #include <pdf/analyticconditionalgaussian.h>
00040 #include <pdf/analyticconditionalgaussian_additivenoise.h>
00041 #include <wrappers/matrix/matrix_wrapper.h>
00042 #include <filter/extendedkalmanfilter.h>
00043 #include <model/linearanalyticsystemmodel_gaussianuncertainty.h>
00044 #include <model/analyticmeasurementmodel_gaussianuncertainty.h>
00045 #include <model/measurementmodel.h>
00046 #include "joint_tracker/pdf/NonLinearRevoluteMeasurementPdf.h"
00047 
00048 namespace omip
00049 {
00050 
00051 class RevoluteJointFilter;
00052 typedef boost::shared_ptr<RevoluteJointFilter> RevoluteJointFilterPtr;
00053 
00054 class RevoluteJointFilter : public JointFilter
00055 {
00056 public:
00057 
00058     EIGEN_MAKE_ALIGNED_OPERATOR_NEW
00059 
00063     RevoluteJointFilter();
00064 
00068     virtual ~RevoluteJointFilter();
00069 
00076     RevoluteJointFilterPtr clone() const
00077     {
00078         return (RevoluteJointFilterPtr(doClone()));
00079     }
00080 
00084     RevoluteJointFilter(const RevoluteJointFilter &rev_joint);
00085 
00090     virtual void predictState(double time_interval_ns);
00091 
00096     virtual void predictMeasurement();
00097 
00101     virtual void correctState();
00102 
00107     virtual void estimateMeasurementHistoryLikelihood();
00108 
00115     virtual geometry_msgs::TwistWithCovariance getPredictedSRBPoseWithCovInSensorFrame();
00116 
00117     virtual void estimateUnnormalizedModelProbability() ;
00118 
00125     virtual geometry_msgs::TwistWithCovariance getPredictedSRBDeltaPoseWithCovInSensorFrame();
00126 
00133     virtual geometry_msgs::TwistWithCovariance getPredictedSRBVelocityWithCovInSensorFrame();
00134 
00135 
00139     virtual std::vector<visualization_msgs::Marker> getJointMarkersInRRBFrame() const;
00140 
00144     virtual JointFilterType getJointFilterType() const;
00145 
00149     virtual std::string getJointFilterTypeStr() const;
00150 
00151     virtual void setMinRotationRevolute(const double& value);
00152 
00153     virtual void setMaxRadiusDistanceRevolute(const double& value);
00154 
00155     virtual void initialize();
00156 
00157     virtual void setCovarianceDeltaMeasurementAngular(double sigma_delta_meas_uncertainty_angular);
00158 
00159 protected:
00160 
00166     double _sigma_delta_meas_uncertainty_angular;
00167 
00168     double _rev_min_rot_for_ee;
00169     double _rev_max_joint_distance_for_ee;
00170 
00171     BFL::LinearAnalyticConditionalGaussian* _sys_PDF;
00172     BFL::LinearAnalyticSystemModelGaussianUncertainty* _sys_MODEL;
00173 
00174     BFL::NonLinearRevoluteMeasurementPdf* _meas_PDF;
00175     BFL::AnalyticMeasurementModelGaussianUncertainty* _meas_MODEL;
00176 
00177     BFL::ExtendedKalmanFilter* _ekf;
00178 
00179     void _initializeSystemModel();
00180     void _initializeMeasurementModel();
00181     void _initializeEKF();
00182 
00183     virtual RevoluteJointFilter* doClone() const
00184     {
00185         return (new RevoluteJointFilter(*this));
00186     }
00187 
00188     double _accumulated_rotation;
00189 };
00190 
00191 }
00192 
00193 #endif /* REVOLUTEJOINTFILTER_H_ */


joint_tracker
Author(s): Roberto Martín-Martín
autogenerated on Sat Jun 8 2019 18:26:46