⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pf.h

📁 机器人仿真软件
💻 H
字号:
/************************************************************************** * Desc: Simple particle filter for localization. * Author: Andrew Howard * Date: 10 Dec 2002 * CVS: $Id: pf.h,v 1.8 2005/11/19 08:37:45 gerkey Exp $ *************************************************************************/#ifndef PF_H#define PF_H#include "pf_vector.h"#include "pf_kdtree.h"#ifdef __cplusplusextern "C" {#endif// Forward declarationsstruct _pf_t;struct _rtk_fig_t;struct _pf_sample_set_t;// Function prototype for the initialization model; generates a sample pose from// an appropriate distribution.typedef pf_vector_t (*pf_init_model_fn_t) (void *init_data);// Function prototype for the action model; generates a sample pose from// an appropriate distributiontypedef void (*pf_action_model_fn_t) (void *action_data,                                       struct _pf_sample_set_t* set);// Function prototype for the sensor model; determines the probability// for the given set of sample poses.typedef double (*pf_sensor_model_fn_t) (void *sensor_data,                                         struct _pf_sample_set_t* set);// Information for a single sampletypedef struct{  // Pose represented by this sample  pf_vector_t pose;  // Weight for this pose  double weight;  } pf_sample_t;// Information for a cluster of samplestypedef struct{  // Number of samples  int count;  // Total weight of samples in this cluster  double weight;  // Cluster statistics  pf_vector_t mean;  pf_matrix_t cov;  // Workspace  double m[4], c[2][2];  } pf_cluster_t;// Information for a set of samplestypedef struct _pf_sample_set_t{  // The samples  int sample_count;  pf_sample_t *samples;  // A kdtree encoding the histogram  pf_kdtree_t *kdtree;  // Clusters  int cluster_count, cluster_max_count;  pf_cluster_t *clusters;  } pf_sample_set_t;// Information for an entire filtertypedef struct _pf_t{  // This min and max number of samples  int min_samples, max_samples;  // Population size parameters  double pop_err, pop_z;    // The sample sets.  We keep two sets and use [current_set]  // to identify the active set.  int current_set;  pf_sample_set_t sets[2];} pf_t;// Create a new filterpf_t *pf_alloc(int min_samples, int max_samples);// Free an existing filtervoid pf_free(pf_t *pf);// Initialize the filter using a guassianvoid pf_init(pf_t *pf, pf_vector_t mean, pf_matrix_t cov);// Initialize the filter using some modelvoid pf_init_model(pf_t *pf, pf_init_model_fn_t init_fn, void *init_data);// Update the filter with some new actionvoid pf_update_action(pf_t *pf, pf_action_model_fn_t action_fn, void *action_data);// Update the filter with some new sensor observationvoid pf_update_sensor(pf_t *pf, pf_sensor_model_fn_t sensor_fn, void *sensor_data);// Resample the distributionvoid pf_update_resample(pf_t *pf);// Compute the CEP statistics (mean and variance).void pf_get_cep_stats(pf_t *pf, pf_vector_t *mean, double *var);// Compute the statistics for a particular cluster.  Returns 0 if// there is no such cluster.int pf_get_cluster_stats(pf_t *pf, int cluster, double *weight,                         pf_vector_t *mean, pf_matrix_t *cov);// Display the sample setvoid pf_draw_samples(pf_t *pf, struct _rtk_fig_t *fig, int max_samples);// Draw the histogram (kdtree)void pf_draw_hist(pf_t *pf, struct _rtk_fig_t *fig);// Draw the CEP statisticsvoid pf_draw_cep_stats(pf_t *pf, struct _rtk_fig_t *fig);// Draw the cluster statisticsvoid pf_draw_cluster_stats(pf_t *pf, struct _rtk_fig_t *fig);#ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -