Player
Frontpage
Contents
User
Installation
Quick start
Supported devices
Tutorials
Utilities
Client libraries
FAQ
Help
Developer
Architecture
libplayercore
libplayerinterface
interfaces
libplayerdrivers
drivers
libplayercommon
libplayersd
libplayertcp
libplayerxdr
TODO
Online
Homepage
Download
Project
Bugs
Help
server
drivers
localization
amcl
pf
pf_kdtree.h
1
/*
2
* Player - One Hell of a Robot Server
3
* Copyright (C) 2003
4
* Andrew Howard
5
* Brian Gerkey
6
*
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* (at your option) any later version.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*
21
*/
22
23
24
/**************************************************************************
25
* Desc: KD tree functions
26
* Author: Andrew Howard
27
* Date: 18 Dec 2002
28
* CVS: $Id: pf_kdtree.h 9120 2013-01-07 00:18:52Z jpgr87 $
29
*************************************************************************/
30
31
#ifndef PF_KDTREE_H
32
#define PF_KDTREE_H
33
34
#include <playerconfig.h>
35
36
#ifdef INCLUDE_RTKGUI
37
#include "rtk.h"
38
#endif
39
40
41
// Info for a node in the tree
42
typedef
struct
pf_kdtree_node
43
{
44
// Depth in the tree
45
int
leaf, depth;
46
47
// Pivot dimension and value
48
int
pivot_dim;
49
double
pivot_value;
50
51
// The key for this node
52
int
key[3];
53
54
// The value for this node
55
double
value;
56
57
// The cluster label (leaf nodes)
58
int
cluster;
59
60
// Child nodes
61
struct
pf_kdtree_node
*children[2];
62
63
}
pf_kdtree_node_t
;
64
65
66
// A kd tree
67
typedef
struct
68
{
69
// Cell size
70
double
size[3];
71
72
// The root node of the tree
73
pf_kdtree_node_t
*root;
74
75
// The number of nodes in the tree
76
int
node_count, node_max_count;
77
pf_kdtree_node_t
*nodes;
78
79
// The number of leaf nodes in the tree
80
int
leaf_count;
81
82
}
pf_kdtree_t
;
83
84
85
// Create a tree
86
extern
pf_kdtree_t
*pf_kdtree_alloc(
int
max_size);
87
88
// Destroy a tree
89
extern
void
pf_kdtree_free(
pf_kdtree_t
*
self
);
90
91
// Clear all entries from the tree
92
extern
void
pf_kdtree_clear(
pf_kdtree_t
*
self
);
93
94
// Insert a pose into the tree
95
extern
void
pf_kdtree_insert(
pf_kdtree_t
*
self
,
pf_vector_t
pose,
double
value);
96
97
// Cluster the leaves in the tree
98
extern
void
pf_kdtree_cluster(
pf_kdtree_t
*
self
);
99
100
// Determine the probability estimate for the given pose
101
extern
double
pf_kdtree_get_prob(
pf_kdtree_t
*
self
,
pf_vector_t
pose);
102
103
// Determine the cluster label for the given pose
104
extern
int
pf_kdtree_get_cluster(
pf_kdtree_t
*
self
,
pf_vector_t
pose);
105
106
107
#ifdef INCLUDE_RTKGUI
108
109
// Draw the tree
110
extern
void
pf_kdtree_draw(
pf_kdtree_t
*
self
, rtk_fig_t *fig);
111
112
#endif
113
114
#endif
pf_kdtree_node
Definition:
pf_kdtree.h:42
pf_kdtree_t
Definition:
pf_kdtree.h:67
pf_vector_t
Definition:
pf_vector.h:41
Generated on Wed Sep 2 2020 16:39:27 for Player by
1.8.13