26
26
#include " nav2_amcl/map/map.hpp"
27
27
28
28
/*
29
- * @class CellData
29
+ * @struct CellData
30
30
* @brief Data about map cells
31
31
*/
32
- class CellData
32
+ struct CellData
33
33
{
34
- public:
35
34
map_t * map_;
36
35
unsigned int i_, j_;
37
36
unsigned int src_i_, src_j_;
37
+ float occ_dist;
38
38
};
39
39
40
40
/*
@@ -83,9 +83,7 @@ class CachedDistanceMap
83
83
*/
84
84
bool operator <(const CellData & a, const CellData & b)
85
85
{
86
- return a.map_ ->cells [MAP_INDEX (
87
- a.map_ , a.i_ ,
88
- a.j_ )].occ_dist > a.map_ ->cells [MAP_INDEX (b.map_ , b.i_ , b.j_ )].occ_dist ;
86
+ return a.occ_dist > b.occ_dist ;
89
87
}
90
88
91
89
/*
@@ -119,7 +117,9 @@ void enqueue(
119
117
CachedDistanceMap * cdm,
120
118
unsigned char * marked)
121
119
{
122
- if (marked[MAP_INDEX (map, i, j)]) {
120
+ const int map_index = MAP_INDEX (map, i, j);
121
+
122
+ if (marked[map_index]) {
123
123
return ;
124
124
}
125
125
@@ -131,18 +131,13 @@ void enqueue(
131
131
return ;
132
132
}
133
133
134
- map->cells [MAP_INDEX (map, i, j)].occ_dist = distance * map->scale ;
135
-
136
- CellData cell;
137
- cell.map_ = map;
138
- cell.i_ = i;
139
- cell.j_ = j;
140
- cell.src_i_ = src_i;
141
- cell.src_j_ = src_j;
134
+ map->cells [map_index].occ_dist = distance * map->scale ;
142
135
143
- Q.push (cell);
136
+ Q.emplace (CellData{map, static_cast <unsigned int >(i), static_cast <unsigned int >(j),
137
+ static_cast <unsigned int >(src_i), static_cast <unsigned int >(src_j),
138
+ map->cells [map_index].occ_dist });
144
139
145
- marked[MAP_INDEX (map, i, j) ] = 1 ;
140
+ marked[map_index ] = 1 ;
146
141
}
147
142
148
143
/*
@@ -165,16 +160,18 @@ void map_update_cspace(map_t * map, double max_occ_dist)
165
160
// Enqueue all the obstacle cells
166
161
CellData cell;
167
162
cell.map_ = map;
163
+ int loop_map_index;
168
164
for (int i = 0 ; i < map->size_x ; i++) {
169
165
cell.src_i_ = cell.i_ = i;
170
166
for (int j = 0 ; j < map->size_y ; j++) {
171
- if (map->cells [MAP_INDEX (map, i, j)].occ_state == +1 ) {
172
- map->cells [MAP_INDEX (map, i, j)].occ_dist = 0.0 ;
167
+ loop_map_index = MAP_INDEX (map, i, j);
168
+ if (map->cells [loop_map_index].occ_state == +1 ) {
169
+ map->cells [loop_map_index].occ_dist = 0.0 ;
173
170
cell.src_j_ = cell.j_ = j;
174
- marked[MAP_INDEX (map, i, j) ] = 1 ;
171
+ marked[loop_map_index ] = 1 ;
175
172
Q.push (cell);
176
173
} else {
177
- map->cells [MAP_INDEX (map, i, j) ].occ_dist = max_occ_dist;
174
+ map->cells [loop_map_index ].occ_dist = max_occ_dist;
178
175
}
179
176
}
180
177
}
@@ -183,27 +180,27 @@ void map_update_cspace(map_t * map, double max_occ_dist)
183
180
CellData current_cell = Q.top ();
184
181
if (current_cell.i_ > 0 ) {
185
182
enqueue (
186
- map, current_cell.i_ - 1 , current_cell.j_ ,
187
- current_cell.src_i_ , current_cell.src_j_ ,
188
- Q, cdm, marked);
183
+ map, current_cell.i_ - 1 , current_cell.j_ ,
184
+ current_cell.src_i_ , current_cell.src_j_ ,
185
+ Q, cdm, marked);
189
186
}
190
187
if (current_cell.j_ > 0 ) {
191
188
enqueue (
192
- map, current_cell.i_ , current_cell.j_ - 1 ,
193
- current_cell.src_i_ , current_cell.src_j_ ,
194
- Q, cdm, marked);
189
+ map, current_cell.i_ , current_cell.j_ - 1 ,
190
+ current_cell.src_i_ , current_cell.src_j_ ,
191
+ Q, cdm, marked);
195
192
}
196
193
if (static_cast <int >(current_cell.i_ ) < map->size_x - 1 ) {
197
194
enqueue (
198
- map, current_cell.i_ + 1 , current_cell.j_ ,
199
- current_cell.src_i_ , current_cell.src_j_ ,
200
- Q, cdm, marked);
195
+ map, current_cell.i_ + 1 , current_cell.j_ ,
196
+ current_cell.src_i_ , current_cell.src_j_ ,
197
+ Q, cdm, marked);
201
198
}
202
199
if (static_cast <int >(current_cell.j_ ) < map->size_y - 1 ) {
203
200
enqueue (
204
- map, current_cell.i_ , current_cell.j_ + 1 ,
205
- current_cell.src_i_ , current_cell.src_j_ ,
206
- Q, cdm, marked);
201
+ map, current_cell.i_ , current_cell.j_ + 1 ,
202
+ current_cell.src_i_ , current_cell.src_j_ ,
203
+ Q, cdm, marked);
207
204
}
208
205
209
206
Q.pop ();
0 commit comments