38 #ifndef NAV2_COSTMAP_2D__LEGACY_INFLATION_LAYER_HPP_
39 #define NAV2_COSTMAP_2D__LEGACY_INFLATION_LAYER_HPP_
47 #include "rclcpp/rclcpp.hpp"
48 #include "nav2_costmap_2d/inflation_layer_interface.hpp"
49 #include "nav2_costmap_2d/layered_costmap.hpp"
68 CellData(
unsigned int x,
unsigned int y,
unsigned int sx,
unsigned int sy)
69 : x_(x), y_(y), src_x_(sx), src_y_(sy)
73 unsigned int src_x_, src_y_;
110 double robot_x,
double robot_y,
double robot_yaw,
double * min_x,
113 double * max_y)
override;
124 int min_i,
int min_j,
int max_i,
int max_j)
override;
143 need_reinflation_ =
true;
151 unsigned char cost = 0;
153 cost = LETHAL_OBSTACLE;
154 }
else if (distance * resolution_ <= inscribed_radius_) {
155 cost = INSCRIBED_INFLATED_OBSTACLE;
159 exp(-1.0 * cost_scaling_factor_ * (distance * resolution_ - inscribed_radius_));
160 cost =
static_cast<unsigned char>((INSCRIBED_INFLATED_OBSTACLE - 1) * factor);
175 return cost_scaling_factor_;
180 return inflation_radius_;
198 unsigned int mx,
unsigned int my,
unsigned int src_x,
201 unsigned int dx = (mx > src_x) ? mx - src_x : src_x - mx;
202 unsigned int dy = (my > src_y) ? my - src_y : src_y - my;
203 return cached_distances_[dx * cache_length_ + dy];
215 unsigned int mx,
unsigned int my,
unsigned int src_x,
218 unsigned int dx = (mx > src_x) ? mx - src_x : src_x - mx;
219 unsigned int dy = (my > src_y) ? my - src_y : src_y - my;
220 return cached_costs_[dx * cache_length_ + dy];
245 unsigned int index,
unsigned int mx,
unsigned int my,
246 unsigned int src_x,
unsigned int src_y);
252 rcl_interfaces::msg::SetParametersResult
255 double inflation_radius_, inscribed_radius_, cost_scaling_factor_;
256 bool inflate_unknown_, inflate_around_unknown_;
257 unsigned int cell_inflation_radius_;
258 unsigned int cached_cell_inflation_radius_;
259 std::vector<std::vector<CellData>> inflation_cells_;
263 std::vector<bool> seen_;
265 std::vector<unsigned char> cached_costs_;
266 std::vector<double> cached_distances_;
267 std::vector<std::vector<int>> distance_matrix_;
268 unsigned int cache_length_;
269 double last_min_x_, last_min_y_, last_max_x_, last_max_y_;
272 bool need_reinflation_;
275 rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler_;
Storage for cell information used during obstacle inflation.
CellData(unsigned int x, unsigned int y, unsigned int sx, unsigned int sy)
Constructor for a CellData objects.
A 2D costmap provides a mapping between points in the world and their associated "costs".
unsigned int cellDistance(double world_dist)
Given distance in the world... convert it to cells.
Abstract interface for inflation layers, providing common methods needed by navigation components reg...
Costmap2D * getCostmap()
Get the costmap pointer to the master costmap.
Layer to convolve costmap by robot's radius or footprint to prevent collisions and largely simply col...
void enqueue(unsigned int index, unsigned int mx, unsigned int my, unsigned int src_x, unsigned int src_y)
Enqueue new cells in cache distance update search.
unsigned char computeCost(double distance) const override
Given a distance, compute a cost.
double getInflationRadius() override
Get the inflation radius.
void updateBounds(double robot_x, double robot_y, double robot_yaw, double *min_x, double *min_y, double *max_x, double *max_y) override
Update the bounds of the master costmap by this layer's update dimensions.
void matchSize() override
Match the size of the master costmap.
int generateIntegerDistances()
Compute cached dsitances.
void onInitialize() override
Initialization process of layer on startup.
rcl_interfaces::msg::SetParametersResult dynamicParametersCallback(std::vector< rclcpp::Parameter > parameters)
Callback executed when a parameter change is detected.
void reset() override
Reset this costmap.
void computeCaches()
Compute cached dsitances.
unsigned int cellDistance(double world_dist)
Compute cached dsitances.
LegacyInflationLayer()
A constructor.
bool isClearable() override
If clearing operations should be processed on this layer or not.
void updateCosts(nav2_costmap_2d::Costmap2D &master_grid, int min_i, int min_j, int max_i, int max_j) override
Update the costs in the master costmap in the window.
unsigned char costLookup(unsigned int mx, unsigned int my, unsigned int src_x, unsigned int src_y)
Lookup pre-computed costs.
void onFootprintChanged() override
Process updates on footprint changes to the inflation layer.
~LegacyInflationLayer()
A destructor.
double distanceLookup(unsigned int mx, unsigned int my, unsigned int src_x, unsigned int src_y)
Lookup pre-computed distances.
mutex_t * getMutex() override
Get the mutex of the inflation information.
double getCostScalingFactor() override
Get the cost scaling factor.