Program Listing for File IntensityMapSampler.h
↰ Return to documentation for file (include/ompl/mod/samplers/IntensityMapSampler.h)
#pragma once
#include <ompl/base/samplers/InformedStateSampler.h>
#include <ompl/util/RandomNumbers.h>
#include <fstream>
#include <memory>
#include <mod/cliffmap.hpp>
namespace ompl {
namespace MoD {
class IntensityMapSampler : public ompl::base::InformedSampler {
private:
bool checkValidity(double xi, double yi);
protected:
class QMap {
std::array<double, 2> position;
double value;
public:
QMap(double x, double y, double value) {
this->position[0] = x;
this->position[1] = y;
this->value = value;
}
double getX() const { return position[0]; }
double getY() const { return position[1]; }
double getValue() const { return value; }
inline ~QMap() = default;
};
std::vector<QMap> q_map;
std::vector<QMap> nonq_map;
double half_cell_size{0.0};
double bias_{0.5};
double value_sum{0.0};
ompl::RNG rng_;
bool debug_{false};
std::fstream sampledPosesFile_;
public:
IntensityMapSampler(const ompl::base::ProblemDefinitionPtr &pdef, unsigned int maxCalls,
const ::MoD::IntensityMap &q_map, double bias, bool debug = false);
IntensityMapSampler(const ompl::base::ProblemDefinitionPtr &pdef, unsigned int maxCalls,
const std::string &intensity_map_file_name, double bias = 0.5, bool debug = false);
void setBias(double bias) { bias_ = bias; }
inline ~IntensityMapSampler() override = default;
void setup(const ::MoD::IntensityMap &intensity_map);
bool sampleUniform(ompl::base::State *state, const ompl::base::Cost &maxCost) override;
inline bool sampleUniform(ompl::base::State *state, const ompl::base::Cost &minCost,
const ompl::base::Cost &maxCost) override {
return sampleUniform(state, maxCost);
}
inline bool hasInformedMeasure() const override { return false; }
inline double getInformedMeasure(const ompl::base::Cost ¤tCost) const override {
return this->space_->getMeasure();
}
void sampleNecessarilyValid(ompl::base::State *state);
static ompl::base::InformedSamplerPtr allocate(const ompl::base::ProblemDefinitionPtr &pdef, unsigned int maxCalls,
const std::string &intensity_map_file_name, double bias = 0.5,
bool debug = false) {
return std::make_shared<IntensityMapSampler>(pdef, maxCalls, intensity_map_file_name, bias, debug);
}
};
} // namespace MoD
} // namespace ompl