pf_init 函数

原型:void pf_init(pf_t *pf, pf_vector_t mean, pf_matrix_t cov)

pf是之前初始化的粒子滤波器对象,mean是amcl中的初始位姿[x,y,θ], cov是初始协方差

1
2
3
4
5
6
7
8
9
// 清空kd树
void pf_kdtree_clear(pf_kdtree_t *self)
{
self->root = NULL;
self->leaf_count = 0;
self->node_count = 0;

return;
}

调用 pf_cluster_stats的函数

pf_cluster_stats的调用关系.png
源码里没有用到pf_init_model,它完成的功能与pf_init基本是一样的,只是pf_init使用的是高斯模型,pf_init_model可以由用户提供模型。用户可以定义一个service客户端,发起global_localization服务,AMCL源码已经定义好了回调函数。

pf_init_model有三个参数,其中pf仍然是滤波器对象。init_fn是一个函数指针,用户需要提供一个生成随机样本的函数实现,该参数的作用就相当于pf_init中的高斯分布对象。参数init_data则是生成粒子的样本空间, 我们可以为之赋予地图数据。