JointCombinedFilter.h
Go to the documentation of this file.
1 /*
2  * JointCombinedFilter.h
3  *
4  * Author: roberto
5  *
6  * This is a modified implementation of the method for online estimation of kinematic structures described in our paper
7  * "Online Interactive Perception of Articulated Objects with Multi-Level Recursive Estimation Based on Task-Specific Priors"
8  * (Martín-Martín and Brock, 2014).
9  * This implementation can be used to reproduce the results of the paper and to be applied to new research.
10  * The implementation allows also to be extended to perceive different information/models or to use additional sources of information.
11  * A detail explanation of the method and the system can be found in our paper.
12  *
13  * If you are using this implementation in your research, please consider citing our work:
14  *
15 @inproceedings{martinmartin_ip_iros_2014,
16 Title = {Online Interactive Perception of Articulated Objects with Multi-Level Recursive Estimation Based on Task-Specific Priors},
17 Author = {Roberto {Mart\'in-Mart\'in} and Oliver Brock},
18 Booktitle = {Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems},
19 Pages = {2494-2501},
20 Year = {2014},
21 Location = {Chicago, Illinois, USA},
22 Note = {http://www.robotics.tu-berlin.de/fileadmin/fg170/Publikationen_pdf/martinmartin_ip_iros_2014.pdf},
23 Url = {http://www.robotics.tu-berlin.de/fileadmin/fg170/Publikationen_pdf/martinmartin_ip_iros_2014.pdf},
24 Projectname = {Interactive Perception}
25 }
26  * If you have questions or suggestions, contact us:
27  * roberto.martinmartin@tu-berlin.de
28  *
29  * Enjoy!
30  */
31 
32 #ifndef JOINTCOMBINEDFILTER_H_
33 #define JOINTCOMBINEDFILTER_H_
34 
35 #include <pcl/point_types.h>
36 #include <unsupported/Eigen/MatrixFunctions>
37 #include <Eigen/Geometry>
38 #include <lgsm/Lgsm>
39 #include <boost/shared_ptr.hpp>
40 #include <boost/unordered_map.hpp>
41 
42 #include <ros/ros.h>
43 #include <geometry_msgs/Pose.h>
44 #include <geometry_msgs/Twist.h>
45 #include <geometry_msgs/PoseWithCovariance.h>
46 #include <tf/tf.h>
47 #include <tf/transform_datatypes.h>
50 
53 
54 namespace omip
55 {
56 
59 
60 typedef std::map<JointFilterType, JointFilterPtr> joint_filters_map;
61 
71 {
72 public:
73 
78 
79  void setJointCombinedFilterId(JointCombinedFilterId new_joint_combined_filter_id);
80 
84  virtual ~JointCombinedFilter();
85 
92  JointCombinedFilterPtr clone() const
93  {
94  return (JointCombinedFilterPtr(doClone()));
95  }
96 
100  JointCombinedFilter(const JointCombinedFilter &joint_combined_filter);
101 
106  virtual void predictState(double time_interval_ns);
107 
112  virtual void predictMeasurement();
113 
118  virtual void correctState();
119 
125  virtual void setMeasurement(joint_measurement_t acquired_measurement, const double& measurement_timestamp_ns);
126 
131  std::map<JointFilterType, Eigen::Twistd> getPredictedMeasurement();
132 
133  virtual void estimateJointFilterProbabilities();
134 
147  virtual void normalizeJointFilterProbabilities();
148 
154 
161  virtual JointFilterPtr getJointFilter(JointFilterType joint_type) const;
162 
167 
168  virtual void setJointLikelihoodDisconnected(double disconnected_joint_likelihood);
169 
170  virtual void setLoopPeriodNS(double loop_period_ns);
171 
172  virtual void setNumSamplesForLikelihoodEstimation(int likelihood_sample_num);
173 
174  virtual void setNormalizingTerm(double normalizing_term);
175 
176  virtual void setCovarianceDeltaMeasurementLinear(double sigma_delta_meas_uncertainty_linear);
177 
178  virtual void setCovarianceDeltaMeasurementAngular(double sigma_delta_meas_uncertainty_angular);
179 
180  virtual void initialize();
181 
182  virtual void setMaxTranslationRigid(double rig_max_translation);
183 
184  virtual void setMaxRotationRigid(double rig_max_rotation);
185 
186  virtual void setCovariancePrior(const JointFilterType& joint_type, double prior_cov_vel);
187 
188  virtual void setCovarianceAdditiveSystemNoisePhi(const JointFilterType& joint_type, double sys_noise_phi);
189 
190  virtual void setCovarianceAdditiveSystemNoiseTheta(const JointFilterType& joint_type, double sys_noise_theta);
191 
192  virtual void setCovarianceAdditiveSystemNoisePx(const JointFilterType& joint_type, double sys_noise_px);
193 
194  virtual void setCovarianceAdditiveSystemNoisePy(const JointFilterType& joint_type, double sys_noise_py);
195 
196  virtual void setCovarianceAdditiveSystemNoisePz(const JointFilterType& joint_type, double sys_noise_pz);
197 
198  virtual void setCovarianceAdditiveSystemNoiseJointState(const JointFilterType& joint_type, double sys_noise_js);
199 
200  virtual void setCovarianceAdditiveSystemNoiseJointVelocity(const JointFilterType& joint_type, double sys_noise_jv);
201 
202  virtual void setCovarianceMeasurementNoise(const JointFilterType& joint_type, double meas_noise);
203 
204  virtual void setMinRotationRevolute(const double& value);
205 
206  virtual void setMaxRadiusDistanceRevolute(const double& value);
207 
208  virtual void setInitialMeasurement(const joint_measurement_t &initial_measurement,
209  const Eigen::Twistd& rrb_pose_at_srb_birth_in_sf, const Eigen::Twistd& srb_pose_at_srb_birth_in_sf);
210 
211 protected:
212 
214 
216 
218 
219  // Contains an instance of each joint type
220  joint_filters_map _joint_filters;
221 
222  // Contains the probabilities of each joint type
223  std::map<JointFilterType, double> _joint_normalized_prediction_errors;
224 
225  virtual JointCombinedFilter* doClone() const
226  {
227  return (new JointCombinedFilter(*this));
228  }
229 
230 };
231 
232 }
233 
234 #endif /* JOINT_H_ */
virtual JointFilterPtr getJointFilter(JointFilterType joint_type) const
Get the joint filter of the type given.
virtual void setCovarianceAdditiveSystemNoisePhi(const JointFilterType &joint_type, double sys_noise_phi)
std::pair< omip_msgs::RigidBodyPoseAndVelMsg, omip_msgs::RigidBodyPoseAndVelMsg > joint_measurement_t
virtual void setCovarianceAdditiveSystemNoisePx(const JointFilterType &joint_type, double sys_noise_px)
virtual void setJointLikelihoodDisconnected(double disconnected_joint_likelihood)
joint_filters_map _joint_filters
std::map< JointFilterType, double > _joint_normalized_prediction_errors
JointFilterType
Definition: JointFilter.h:71
std::map< JointFilterType, Eigen::Twistd > getPredictedMeasurement()
virtual void setCovarianceAdditiveSystemNoisePy(const JointFilterType &joint_type, double sys_noise_py)
virtual void setCovariancePrior(const JointFilterType &joint_type, double prior_cov_vel)
virtual void setCovarianceDeltaMeasurementAngular(double sigma_delta_meas_uncertainty_angular)
virtual JointCombinedFilter * doClone() const
virtual void setCovarianceAdditiveSystemNoiseJointState(const JointFilterType &joint_type, double sys_noise_js)
static JointCombinedFilterId _joint_id_generator
boost::shared_ptr< JointCombinedFilter > JointCombinedFilterPtr
virtual void setMinRotationRevolute(const double &value)
virtual void setCovarianceMeasurementNoise(const JointFilterType &joint_type, double meas_noise)
virtual void setMaxRotationRigid(double rig_max_rotation)
virtual void setCovarianceAdditiveSystemNoiseTheta(const JointFilterType &joint_type, double sys_noise_theta)
virtual void normalizeJointFilterProbabilities()
Estimate the probability of each joint filter type. NOTE: Using the Bayes Rule, the probability of a ...
virtual void estimateJointFilterProbabilities()
virtual void setMaxTranslationRigid(double rig_max_translation)
JointCombinedFilterPtr clone() const
virtual void predictState(double time_interval_ns)
First step when updating the filter. The next state is predicted from current state and system model...
virtual void setCovarianceAdditiveSystemNoiseJointVelocity(const JointFilterType &joint_type, double sys_noise_jv)
std::map< JointFilterType, JointFilterPtr > joint_filters_map
void setJointCombinedFilterId(JointCombinedFilterId new_joint_combined_filter_id)
virtual void setNormalizingTerm(double normalizing_term)
int long JointCombinedFilterId
Definition: JointFilter.h:69
virtual void setMaxRadiusDistanceRevolute(const double &value)
virtual void setInitialMeasurement(const joint_measurement_t &initial_measurement, const Eigen::Twistd &rrb_pose_at_srb_birth_in_sf, const Eigen::Twistd &srb_pose_at_srb_birth_in_sf)
virtual void setLoopPeriodNS(double loop_period_ns)
JointCombinedFilterId _joint_id
virtual void setCovarianceDeltaMeasurementLinear(double sigma_delta_meas_uncertainty_linear)
virtual void setNumSamplesForLikelihoodEstimation(int likelihood_sample_num)
virtual JointFilterPtr getMostProbableJointFilter()
virtual void setCovarianceAdditiveSystemNoisePz(const JointFilterType &joint_type, double sys_noise_pz)
virtual JointCombinedFilterId getJointCombinedFilterId() const
virtual void setMeasurement(joint_measurement_t acquired_measurement, const double &measurement_timestamp_ns)
Set the latest acquired measurement.


joint_tracker
Author(s): Roberto Martín-Martín
autogenerated on Mon Jun 10 2019 14:06:16