Program Listing for File mrpt_localization_core.h
↰ Return to documentation for file (/tmp/ws/src/mrpt_navigation/mrpt_localization/include/mrpt_localization/mrpt_localization_core.h
)
/* +------------------------------------------------------------------------+
| mrpt_navigation |
| |
| Copyright (c) 2014-2023, Individual contributors, see commit authors |
| See: https://github.com/mrpt-ros-pkg/mrpt_navigation |
| All rights reserved. Released under BSD 3-Clause license. See LICENSE |
+------------------------------------------------------------------------+ */
#pragma once
#include <mrpt/bayes/CParticleFilter.h>
#include <mrpt/maps/CMultiMetricMap.h>
#include <mrpt/obs/CActionCollection.h>
#include <mrpt/obs/CActionRobotMovement2D.h>
#include <mrpt/obs/CObservationOdometry.h>
#include <mrpt/obs/CSensoryFrame.h>
#include <mrpt/poses/CPose2D.h>
#include <mrpt/poses/CPosePDFGaussian.h>
#include <mrpt/slam/CMonteCarloLocalization2D.h>
#include <mrpt/system/CTicTac.h>
#include <stdint.h>
#include <iostream>
using namespace mrpt::maps;
using namespace mrpt::obs;
class PFLocalizationCore
{
public:
enum PFStates
{
NA,
INIT,
RUN,
IDLE
};
PFLocalizationCore();
~PFLocalizationCore();
void init();
void observation(
CSensoryFrame::Ptr _sf, CObservationOdometry::Ptr _odometry);
protected:
bool use_motion_model_default_options_;
CActionRobotMovement2D::TMotionModelOptions
motion_model_default_options_;
CActionRobotMovement2D::TMotionModelOptions
motion_model_options_;
CMultiMetricMap::Ptr metric_map_ = CMultiMetricMap::Create();
mrpt::bayes::CParticleFilter
pf_;
mrpt::bayes::CParticleFilter::TParticleFilterStats
pf_stats_;
mrpt::slam::CMonteCarloLocalization2D pdf_;
mrpt::poses::CPosePDFGaussian
initial_pose_;
int initial_particle_count_;
mrpt::system::TTimeStamp time_last_update_;
mrpt::system::CTicTac tictac_;
size_t update_counter_;
PFStates state_;
mrpt::poses::CPose2D
odom_last_observation_;
bool init_PDF_mode;
float init_PDF_min_x;
float init_PDF_max_x;
float init_PDF_min_y;
float init_PDF_max_y;
private:
void initializeFilter();
void updateFilter(CActionCollection::Ptr _action, CSensoryFrame::Ptr _sf);
};