@@ -43,23 +43,6 @@ Polygon2d pointsToPoly(const Point2d p0, const Point2d p1, const double radius)
43
43
return line_poly;
44
44
}
45
45
46
- std::vector<std::pair<grid_map::Position, grid_map::Position>> pointsToRays (
47
- const grid_map::Position p0, const grid_map::Position p1, const double radius)
48
- {
49
- using grid_map::Position;
50
- std::vector<std::pair<Position, Position>> lines;
51
- const double angle = atan2 (p0.y () - p1.y (), p0.x () - p1.x ());
52
- const double r = radius;
53
- lines.emplace_back (std::make_pair (p0, p1));
54
- lines.emplace_back (std::make_pair (
55
- Position (p0.x () + r * sin (angle), p0.y () - r * cos (angle)),
56
- Position (p1.x () + r * sin (angle), p1.y () - r * cos (angle))));
57
- lines.emplace_back (std::make_pair (
58
- Position (p1.x () - r * sin (angle), p1.y () + r * cos (angle)),
59
- Position (p0.x () - r * sin (angle), p0.y () + r * cos (angle))));
60
- return lines;
61
- }
62
-
63
46
void findOcclusionSpots (
64
47
std::vector<grid_map::Position> & occlusion_spot_positions, const grid_map::GridMap & grid,
65
48
const Polygon2d & polygon, [[maybe_unused]] double min_size)
@@ -86,36 +69,21 @@ bool isCollisionFree(
86
69
const double radius)
87
70
{
88
71
const grid_map::Matrix & grid_data = grid[" layer" ];
89
- bool polys = true ;
90
72
try {
91
- if (polys) {
92
- Point2d occlusion_p = {p1.x (), p1.y ()};
93
- Point2d collision_p = {p2.x (), p2.y ()};
94
- Polygon2d polygon = pointsToPoly (occlusion_p, collision_p, radius);
95
- grid_map::Polygon grid_polygon;
96
- for (const auto & point : polygon.outer ()) {
97
- grid_polygon.addVertex ({point.x (), point.y ()});
98
- }
99
- for (grid_map_utils::PolygonIterator iterator (grid, grid_polygon); !iterator.isPastEnd ();
100
- ++iterator) {
101
- const grid_map::Index & index = *iterator;
102
- if (grid_data (index .x (), index .y ()) == grid_utils::occlusion_cost_value::OCCUPIED) {
103
- return false ;
104
- }
105
- }
106
- } else {
107
- std::vector<std::pair<grid_map::Position, grid_map::Position>> lines =
108
- pointsToRays (p1, p2, radius);
109
- for (const auto & p : lines) {
110
- for (grid_map::LineIterator iterator (grid, p.first , p.second ); !iterator.isPastEnd ();
111
- ++iterator) {
112
- const grid_map::Index & index = *iterator;
113
- if (grid_data (index .x (), index .y ()) == grid_utils::occlusion_cost_value::OCCUPIED) {
114
- return false ;
115
- }
116
- }
73
+ Point2d occlusion_p = {p1.x (), p1.y ()};
74
+ Point2d collision_p = {p2.x (), p2.y ()};
75
+ Polygon2d polygon = pointsToPoly (occlusion_p, collision_p, radius);
76
+ grid_map::Polygon grid_polygon;
77
+ for (const auto & point : polygon.outer ()) {
78
+ grid_polygon.addVertex ({point.x (), point.y ()});
79
+ }
80
+ for (grid_map_utils::PolygonIterator iterator (grid, grid_polygon); !iterator.isPastEnd ();
81
+ ++iterator) {
82
+ const grid_map::Index & index = *iterator;
83
+ if (grid_data (index .x (), index .y ()) == grid_utils::occlusion_cost_value::OCCUPIED) {
84
+ return false ;
117
85
}
118
- } // polys or not
86
+ }
119
87
} catch (const std::invalid_argument & e) {
120
88
std::cerr << e.what () << std::endl;
121
89
return false ;
@@ -324,7 +292,7 @@ void imageToOccupancyGrid(const cv::Mat & cv_image, nav_msgs::msg::OccupancyGrid
324
292
const int idx = (height - 1 - y) + (width - 1 - x) * height;
325
293
unsigned char intensity = cv_image.at <unsigned char >(y, x);
326
294
if (intensity == grid_utils::occlusion_cost_value::FREE_SPACE) {
327
- intensity = grid_utils::occlusion_cost_value::FREE_SPACE;
295
+ // do nothing
328
296
} else if (intensity == grid_utils::occlusion_cost_value::UNKNOWN_IMAGE) {
329
297
intensity = grid_utils::occlusion_cost_value::UNKNOWN;
330
298
} else if (intensity == grid_utils::occlusion_cost_value::OCCUPIED_IMAGE) {
@@ -348,14 +316,12 @@ void toQuantizedImage(
348
316
unsigned char intensity = occupancy_grid.data .at (idx);
349
317
if (intensity <= param.free_space_max ) {
350
318
continue ;
351
- } else if (param. free_space_max < intensity && intensity < param.occupied_min ) {
319
+ } else if (intensity < param.occupied_min ) {
352
320
intensity = grid_utils::occlusion_cost_value::UNKNOWN_IMAGE;
353
321
occlusion_image->at <unsigned char >(y, x) = intensity;
354
- } else if (param. occupied_min <= intensity) {
322
+ } else {
355
323
intensity = grid_utils::occlusion_cost_value::OCCUPIED_IMAGE;
356
324
border_image->at <unsigned char >(y, x) = intensity;
357
- } else {
358
- throw std::logic_error (" behavior_velocity[occlusion_spot_grid]: invalid if clause" );
359
325
}
360
326
}
361
327
}
0 commit comments