00001 /* 00002 * PrismaticJointFilter.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 PRISMATICJOINTFILTER_H_ 00033 #define PRISMATICJOINTFILTER_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/NonLinearPrismaticMeasurementPdf.h" 00047 00048 namespace omip 00049 { 00050 00051 class PrismaticJointFilter; 00052 typedef boost::shared_ptr<PrismaticJointFilter> PrismaticJointFilterPtr; 00053 00054 class PrismaticJointFilter : public JointFilter 00055 { 00056 public: 00057 00058 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 00059 00063 PrismaticJointFilter(); 00064 00068 virtual ~PrismaticJointFilter(); 00069 00076 PrismaticJointFilterPtr clone() const 00077 { 00078 return (PrismaticJointFilterPtr(doClone())); 00079 } 00080 00084 PrismaticJointFilter(const PrismaticJointFilter &prismatic_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(); 00114 virtual geometry_msgs::TwistWithCovariance getPredictedSRBPoseWithCovInSensorFrame(); 00115 00122 virtual geometry_msgs::TwistWithCovariance getPredictedSRBDeltaPoseWithCovInSensorFrame(); 00123 00130 virtual geometry_msgs::TwistWithCovariance getPredictedSRBVelocityWithCovInSensorFrame(); 00131 00132 virtual void estimateUnnormalizedModelProbability() ; 00133 00137 virtual std::vector<visualization_msgs::Marker> getJointMarkersInRRBFrame() const; 00138 00142 virtual JointFilterType getJointFilterType() const; 00143 00147 virtual std::string getJointFilterTypeStr() const; 00148 00149 virtual void initialize(); 00150 00151 virtual void setCovarianceDeltaMeasurementLinear(double delta_meas); 00152 00153 protected: 00154 00161 double _sigma_delta_meas_uncertainty_linear; 00162 00163 BFL::LinearAnalyticConditionalGaussian* _sys_PDF; 00164 BFL::LinearAnalyticSystemModelGaussianUncertainty* _sys_MODEL; 00165 00166 BFL::NonLinearPrismaticMeasurementPdf* _meas_PDF; 00167 BFL::AnalyticMeasurementModelGaussianUncertainty* _meas_MODEL; 00168 00169 BFL::ExtendedKalmanFilter* _ekf; 00170 00171 void _initializeSystemModel(); 00172 void _initializeMeasurementModel(); 00173 void _initializeEKF(); 00174 00175 virtual PrismaticJointFilter* doClone() const 00176 { 00177 return (new PrismaticJointFilter(*this)); 00178 } 00179 00180 }; 00181 00182 } 00183 00184 #endif /* PRISMATICJOINTFILTER_H_ */