pf_kdtree.h
Go to the documentation of this file.
1 //this package is based on amcl and has been modified to fit gmcl
2 /*
3  * Author: Mhd Ali Alshikh Khalil
4  * Date: 20 June 2021
5  *
6 */
7 
8 //amcl author clarification
9 /*
10  * Player - One Hell of a Robot Server
11  * Copyright (C) 2000 Brian Gerkey & Kasper Stoy
12  * gerkey@usc.edu kaspers@robotics.usc.edu
13  *
14  * This library is free software; you can redistribute it and/or
15  * modify it under the terms of the GNU Lesser General Public
16  * License as published by the Free Software Foundation; either
17  * version 2.1 of the License, or (at your option) any later version.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free Software
26  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27  *
28  */
29 /**************************************************************************
30  * Desc: KD tree functions
31  * Author: Andrew Howard
32  * Date: 18 Dec 2002
33  * CVS: $Id: pf_kdtree.h 6532 2008-06-11 02:45:56Z gbiggs $
34  *************************************************************************/
35 
36 #ifndef PF_KDTREE_H
37 #define PF_KDTREE_H
38 
39 #ifdef INCLUDE_RTKGUI
40 #include "rtk.h"
41 #endif
42 
43 
44 // Info for a node in the tree
45 typedef struct pf_kdtree_node
46 {
47  // Depth in the tree
48  int leaf, depth;
49 
50  // Pivot dimension and value
51  int pivot_dim;
52  double pivot_value;
53 
54  // The key for this node
55  int key[3];
56 
57  // The value for this node
58  double value;
59 
60  // The cluster label (leaf nodes)
61  int cluster;
62 
63  // Child nodes
64  struct pf_kdtree_node *children[2];
65 
67 
68 
69 // A kd tree
70 typedef struct
71 {
72  // Cell size
73  double size[3];
74 
75  // The root node of the tree
77 
78  // The number of nodes in the tree
79  int node_count, node_max_count;
81 
82  // The number of leaf nodes in the tree
84 
85 } pf_kdtree_t;
86 
87 
88 // Create a tree
89 extern pf_kdtree_t *pf_kdtree_alloc(int max_size);
90 
91 // Destroy a tree
92 extern void pf_kdtree_free(pf_kdtree_t *self);
93 
94 // Clear all entries from the tree
95 extern void pf_kdtree_clear(pf_kdtree_t *self);
96 
97 // Insert a pose into the tree
98 extern void pf_kdtree_insert(pf_kdtree_t *self, pf_vector_t pose, double value);
99 
100 // Cluster the leaves in the tree
101 extern void pf_kdtree_cluster(pf_kdtree_t *self);
102 
103 // Determine the probability estimate for the given pose
104 extern double pf_kdtree_get_prob(pf_kdtree_t *self, pf_vector_t pose);
105 
106 // Determine the cluster label for the given pose
107 extern int pf_kdtree_get_cluster(pf_kdtree_t *self, pf_vector_t pose);
108 
109 
110 #ifdef INCLUDE_RTKGUI
111 
112 // Draw the tree
113 extern void pf_kdtree_draw(pf_kdtree_t *self, rtk_fig_t *fig);
114 
115 #endif
116 
117 #endif
pf_kdtree_node_t
struct pf_kdtree_node pf_kdtree_node_t
pf_kdtree_cluster
void pf_kdtree_cluster(pf_kdtree_t *self)
Definition: pf_kdtree.c:366
pf_vector_t
Definition: pf_vector.h:46
pf_kdtree_node::cluster
int cluster
Definition: pf_kdtree.h:66
pf_kdtree_t::root
pf_kdtree_node_t * root
Definition: pf_kdtree.h:76
pf_kdtree_get_cluster
int pf_kdtree_get_cluster(pf_kdtree_t *self, pf_vector_t pose)
Definition: pf_kdtree.c:176
pf_kdtree_node::pivot_value
double pivot_value
Definition: pf_kdtree.h:57
pf_kdtree_t::nodes
pf_kdtree_node_t * nodes
Definition: pf_kdtree.h:80
pf_kdtree_alloc
pf_kdtree_t * pf_kdtree_alloc(int max_size)
Definition: pf_kdtree.c:74
pf_kdtree_node::depth
int depth
Definition: pf_kdtree.h:53
pf_kdtree_node::leaf
int leaf
Definition: pf_kdtree.h:53
pf_kdtree_t
Definition: pf_kdtree.h:70
pf_kdtree_node
Definition: pf_kdtree.h:45
pf_kdtree_get_prob
double pf_kdtree_get_prob(pf_kdtree_t *self, pf_vector_t pose)
Definition: pf_kdtree.c:158
pf_kdtree_node::key
int key[3]
Definition: pf_kdtree.h:60
pf_kdtree_t::node_max_count
int node_max_count
Definition: pf_kdtree.h:79
pf_kdtree_node::children
struct pf_kdtree_node * children[2]
Definition: pf_kdtree.h:69
pf_kdtree_clear
void pf_kdtree_clear(pf_kdtree_t *self)
Definition: pf_kdtree.c:108
pf_kdtree_t::leaf_count
int leaf_count
Definition: pf_kdtree.h:83
pf_kdtree_node::pivot_dim
int pivot_dim
Definition: pf_kdtree.h:56
pf_kdtree_insert
void pf_kdtree_insert(pf_kdtree_t *self, pf_vector_t pose, double value)
Definition: pf_kdtree.c:120
pf_kdtree_node::value
double value
Definition: pf_kdtree.h:63
pf_kdtree_free
void pf_kdtree_free(pf_kdtree_t *self)
Definition: pf_kdtree.c:98


gmcl
Author(s): Mhd Ali Alshikh Khalil, adler1994@gmail.com
autogenerated on Wed Mar 2 2022 00:20:14