38 #ifndef NAV2_COSTMAP_2D__LEGACY_INFLATION_LAYER_HPP_
39 #define NAV2_COSTMAP_2D__LEGACY_INFLATION_LAYER_HPP_
47 #include "rclcpp/node_interfaces/node_parameters_interface.hpp"
48 #include "rclcpp/parameter.hpp"
49 #include "nav2_costmap_2d/inflation_layer_interface.hpp"
50 #include "nav2_costmap_2d/layered_costmap.hpp"
69 CellData(
unsigned int x,
unsigned int y,
unsigned int sx,
unsigned int sy)
70 : x_(x), y_(y), src_x_(sx), src_y_(sy)
74 unsigned int src_x_, src_y_;
111 double robot_x,
double robot_y,
double robot_yaw,
double * min_x,
114 double * max_y)
override;
125 int min_i,
int min_j,
int max_i,
int max_j)
override;
144 need_reinflation_ =
true;
152 unsigned char cost = 0;
154 cost = LETHAL_OBSTACLE;
155 }
else if (distance * resolution_ <= inscribed_radius_) {
156 cost = INSCRIBED_INFLATED_OBSTACLE;
160 exp(-1.0 * cost_scaling_factor_ * (distance * resolution_ - inscribed_radius_));
161 cost =
static_cast<unsigned char>((INSCRIBED_INFLATED_OBSTACLE - 1) * factor);
176 return cost_scaling_factor_;
181 return inflation_radius_;
199 unsigned int mx,
unsigned int my,
unsigned int src_x,
202 unsigned int dx = (mx > src_x) ? mx - src_x : src_x - mx;
203 unsigned int dy = (my > src_y) ? my - src_y : src_y - my;
204 return cached_distances_[dx * cache_length_ + dy];
216 unsigned int mx,
unsigned int my,
unsigned int src_x,
219 unsigned int dx = (mx > src_x) ? mx - src_x : src_x - mx;
220 unsigned int dy = (my > src_y) ? my - src_y : src_y - my;
221 return cached_costs_[dx * cache_length_ + dy];
246 unsigned int index,
unsigned int mx,
unsigned int my,
247 unsigned int src_x,
unsigned int src_y);
253 rcl_interfaces::msg::SetParametersResult
256 double inflation_radius_, inscribed_radius_, cost_scaling_factor_;
257 bool inflate_unknown_, inflate_around_unknown_;
258 unsigned int cell_inflation_radius_;
259 unsigned int cached_cell_inflation_radius_;
260 std::vector<std::vector<CellData>> inflation_cells_;
264 std::vector<bool> seen_;
266 std::vector<unsigned char> cached_costs_;
267 std::vector<double> cached_distances_;
268 std::vector<std::vector<int>> distance_matrix_;
269 unsigned int cache_length_;
270 double last_min_x_, last_min_y_, last_max_x_, last_max_y_;
273 bool need_reinflation_;
276 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.