Recast Navigation  1.0.35
DetourObstacleAvoidance.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
3 //
4 // This software is provided 'as-is', without any express or implied
5 // warranty. In no event will the authors be held liable for any damages
6 // arising from the use of this software.
7 // Permission is granted to anyone to use this software for any purpose,
8 // including commercial applications, and to alter it and redistribute it
9 // freely, subject to the following restrictions:
10 // 1. The origin of this software must not be misrepresented; you must not
11 // claim that you wrote the original software. If you use this software
12 // in a product, an acknowledgment in the product documentation would be
13 // appreciated but is not required.
14 // 2. Altered source versions must be plainly marked as such, and must not be
15 // misrepresented as being the original software.
16 // 3. This notice may not be removed or altered from any source distribution.
17 //
18 
19 #ifndef DETOUROBSTACLEAVOIDANCE_H
20 #define DETOUROBSTACLEAVOIDANCE_H
21 
23 {
24  float p[3];
25  float vel[3];
26  float dvel[3];
27  float rad;
28  float dp[3], np[3];
29 };
30 
32 {
33  float p[3], q[3];
34  bool touch;
35 };
36 
37 
39 {
40 public:
43 
44  bool init(const int maxSamples);
45  void reset();
46  void addSample(const float* vel, const float ssize, const float pen,
47  const float vpen, const float vcpen, const float spen, const float tpen);
48 
49  void normalizeSamples();
50 
51  inline int getSampleCount() const { return m_nsamples; }
52  inline const float* getSampleVelocity(const int i) const { return &m_vel[i*3]; }
53  inline float getSampleSize(const int i) const { return m_ssize[i]; }
54  inline float getSamplePenalty(const int i) const { return m_pen[i]; }
55  inline float getSampleDesiredVelocityPenalty(const int i) const { return m_vpen[i]; }
56  inline float getSampleCurrentVelocityPenalty(const int i) const { return m_vcpen[i]; }
57  inline float getSamplePreferredSidePenalty(const int i) const { return m_spen[i]; }
58  inline float getSampleCollisionTimePenalty(const int i) const { return m_tpen[i]; }
59 
60 private:
61  int m_nsamples;
62  int m_maxSamples;
63  float* m_vel;
64  float* m_ssize;
65  float* m_pen;
66  float* m_vpen;
67  float* m_vcpen;
68  float* m_spen;
69  float* m_tpen;
70 };
71 
74 
75 
76 static const int DT_MAX_PATTERN_DIVS = 32;
77 static const int DT_MAX_PATTERN_RINGS = 4;
78 
80 {
81  float velBias;
82  float weightDesVel;
83  float weightCurVel;
84  float weightSide;
85  float weightToi;
86  float horizTime;
87  unsigned char gridSize;
88  unsigned char adaptiveDivs;
89  unsigned char adaptiveRings;
90  unsigned char adaptiveDepth;
91 };
92 
94 {
95 public:
98 
99  bool init(const int maxCircles, const int maxSegments);
100 
101  void reset();
102 
103  void addCircle(const float* pos, const float rad,
104  const float* vel, const float* dvel);
105 
106  void addSegment(const float* p, const float* q);
107 
108  int sampleVelocityGrid(const float* pos, const float rad, const float vmax,
109  const float* vel, const float* dvel, float* nvel,
110  const dtObstacleAvoidanceParams* params,
111  dtObstacleAvoidanceDebugData* debug = 0);
112 
113  int sampleVelocityAdaptive(const float* pos, const float rad, const float vmax,
114  const float* vel, const float* dvel, float* nvel,
115  const dtObstacleAvoidanceParams* params,
116  dtObstacleAvoidanceDebugData* debug = 0);
117 
118  inline int getObstacleCircleCount() const { return m_ncircles; }
119  const dtObstacleCircle* getObstacleCircle(const int i) { return &m_circles[i]; }
120 
121  inline int getObstacleSegmentCount() const { return m_nsegments; }
122  const dtObstacleSegment* getObstacleSegment(const int i) { return &m_segments[i]; }
123 
124 private:
125 
126  void prepare(const float* pos, const float* dvel);
127 
128  float processSample(const float* vcand, const float cs,
129  const float* pos, const float rad,
130  const float* vel, const float* dvel,
131  const float minPenalty,
133 
134  dtObstacleAvoidanceParams m_params;
135  float m_invHorizTime;
136  float m_vmax;
137  float m_invVmax;
138 
139  int m_maxCircles;
140  dtObstacleCircle* m_circles;
141  int m_ncircles;
142 
143  int m_maxSegments;
144  dtObstacleSegment* m_segments;
145  int m_nsegments;
146 };
147 
150 
151 
152 #endif // DETOUROBSTACLEAVOIDANCE_H
float weightDesVel
Definition: DetourObstacleAvoidance.h:82
float getSamplePenalty(const int i) const
Definition: DetourObstacleAvoidance.h:54
void reset()
Definition: DetourObstacleAvoidance.cpp:244
dtObstacleAvoidanceQuery()
Definition: DetourObstacleAvoidance.cpp:209
float getSampleSize(const int i) const
Definition: DetourObstacleAvoidance.h:53
unsigned char adaptiveRings
adaptive
Definition: DetourObstacleAvoidance.h:89
void dtFreeObstacleAvoidanceQuery(dtObstacleAvoidanceQuery *ptr)
Definition: DetourObstacleAvoidance.cpp:201
~dtObstacleAvoidanceDebugData()
Definition: DetourObstacleAvoidance.cpp:100
void normalizeSamples()
Definition: DetourObstacleAvoidance.cpp:184
float vel[3]
Velocity of the obstacle.
Definition: DetourObstacleAvoidance.h:25
Definition: DetourObstacleAvoidance.h:38
float getSampleCurrentVelocityPenalty(const int i) const
Definition: DetourObstacleAvoidance.h:56
float weightCurVel
Definition: DetourObstacleAvoidance.h:83
Definition: DetourObstacleAvoidance.h:31
dtObstacleAvoidanceDebugData * dtAllocObstacleAvoidanceDebugData()
Definition: DetourObstacleAvoidance.cpp:72
static const int DT_MAX_PATTERN_RINGS
Max number of adaptive rings.
Definition: DetourObstacleAvoidance.h:77
unsigned char adaptiveDepth
adaptive
Definition: DetourObstacleAvoidance.h:90
float velBias
Definition: DetourObstacleAvoidance.h:81
dtObstacleAvoidanceDebugData()
Definition: DetourObstacleAvoidance.cpp:87
Definition: DetourObstacleAvoidance.h:93
float getSamplePreferredSidePenalty(const int i) const
Definition: DetourObstacleAvoidance.h:57
bool init(const int maxSamples)
Definition: DetourObstacleAvoidance.cpp:111
float q[3]
End points of the obstacle segment.
Definition: DetourObstacleAvoidance.h:33
float weightSide
Definition: DetourObstacleAvoidance.h:84
void addCircle(const float *pos, const float rad, const float *vel, const float *dvel)
Definition: DetourObstacleAvoidance.cpp:250
int sampleVelocityAdaptive(const float *pos, const float rad, const float vmax, const float *vel, const float *dvel, float *nvel, const dtObstacleAvoidanceParams *params, dtObstacleAvoidanceDebugData *debug=0)
Definition: DetourObstacleAvoidance.cpp:504
int sampleVelocityGrid(const float *pos, const float rad, const float vmax, const float *vel, const float *dvel, float *nvel, const dtObstacleAvoidanceParams *params, dtObstacleAvoidanceDebugData *debug=0)
Definition: DetourObstacleAvoidance.cpp:432
float p[3]
Position of the obstacle.
Definition: DetourObstacleAvoidance.h:24
float dvel[3]
Velocity of the obstacle.
Definition: DetourObstacleAvoidance.h:26
int getSampleCount() const
Definition: DetourObstacleAvoidance.h:51
bool init(const int maxCircles, const int maxSegments)
Definition: DetourObstacleAvoidance.cpp:225
const dtObstacleSegment * getObstacleSegment(const int i)
Definition: DetourObstacleAvoidance.h:122
const dtObstacleCircle * getObstacleCircle(const int i)
Definition: DetourObstacleAvoidance.h:119
bool touch
Definition: DetourObstacleAvoidance.h:34
float getSampleDesiredVelocityPenalty(const int i) const
Definition: DetourObstacleAvoidance.h:55
float np[3]
Use for side selection during sampling.
Definition: DetourObstacleAvoidance.h:28
float horizTime
Definition: DetourObstacleAvoidance.h:86
float p[3]
Definition: DetourObstacleAvoidance.h:33
int getObstacleCircleCount() const
Definition: DetourObstacleAvoidance.h:118
void reset()
Definition: DetourObstacleAvoidance.cpp:141
unsigned char adaptiveDivs
adaptive
Definition: DetourObstacleAvoidance.h:88
Definition: DetourObstacleAvoidance.h:22
float getSampleCollisionTimePenalty(const int i) const
Definition: DetourObstacleAvoidance.h:58
float weightToi
Definition: DetourObstacleAvoidance.h:85
unsigned char gridSize
grid
Definition: DetourObstacleAvoidance.h:87
Definition: DetourObstacleAvoidance.h:79
int getObstacleSegmentCount() const
Definition: DetourObstacleAvoidance.h:121
float rad
Radius of the obstacle.
Definition: DetourObstacleAvoidance.h:27
const float * getSampleVelocity(const int i) const
Definition: DetourObstacleAvoidance.h:52
~dtObstacleAvoidanceQuery()
Definition: DetourObstacleAvoidance.cpp:219
dtObstacleAvoidanceQuery * dtAllocObstacleAvoidanceQuery()
Definition: DetourObstacleAvoidance.cpp:194
float dp[3]
Definition: DetourObstacleAvoidance.h:28
void addSample(const float *vel, const float ssize, const float pen, const float vpen, const float vcpen, const float spen, const float tpen)
Definition: DetourObstacleAvoidance.cpp:146
void dtFreeObstacleAvoidanceDebugData(dtObstacleAvoidanceDebugData *ptr)
Definition: DetourObstacleAvoidance.cpp:79
static const int DT_MAX_PATTERN_DIVS
Max numver of adaptive divs.
Definition: DetourObstacleAvoidance.h:76
void addSegment(const float *p, const float *q)
Definition: DetourObstacleAvoidance.cpp:263